Come configurare smartphone e PC. Portale informativo
  • Casa
  • Errori
  • Un semplice filtro AJAX per MODX utilizzando pdoPage. Filtra in base ai parametri TV in Modx Revolution utilizzando i filtri Modx tagManager2

Un semplice filtro AJAX per MODX utilizzando pdoPage. Filtra in base ai parametri TV in Modx Revolution utilizzando i filtri Modx tagManager2

Oggi c'è un articolo utile sui filtri phx e sui loro modificatori MODX Revo, con i quali puoi manipolare il valore di vari tag direttamente all'interno dei modelli.

Perché sono necessari?

I modificatori phx semplificano la vita agli sviluppatori modx. Diciamo che abbiamo un sito web con un carosello di immagini (o un banner) di cui abbiamo bisogno visualizzare solo nella pagina principale. Per fare ciò, inseriscilo in un blocco separato e quindi visualizzalo nel modello utilizzando questa costruzione

Dove: 1 — ID della home page,
$giostra- un pezzo con il codice del carosello (banner).
Solo i manichini completi creano un nuovo modello per il bene di poche righe di codice carosello. Anch'io ero così, in generale, non disperiamo e implementiamo phx nello sviluppo.

Diamo un'occhiata alla struttura di cui sopra in modo più dettagliato:

[[*id:is=`1`:then=`[[$carusel]]`]]

*id— visualizza l'id della pagina corrente;

:è=`1`:allora=

- controlla se è uguale *id == 1? e se uguale, viene emesso il contenuto Poi;
$giostra- visualizza il pezzo del carosello.

Invece di *id, puoi utilizzare altri campi, ad esempio *template: visualizzerà il modello attualmente utilizzato. Oppure puoi verificare se il campo TV è compilato o meno (che sia *parole chiave) e se è compilato, visualizzarlo. Diamo un'occhiata a questo caso in modo più dettagliato. Viene fornito il markup standard:

Compito: non visualizzare questa riga se le parole chiave TV sono vuote.
Soluzione.

[[*parole chiave:!vuoto=` `]]

Carichi

È necessario monitorare l'elaborazione dei modificatori; il loro utilizzo sconsiderato causerà carichi inutili. Torniamo al carosello, questa voce viene letta da sinistra a destra e MODH soddisfa tutte le condizioni nidificate, indipendentemente dal fatto che la condizione sia vera o meno, dal fatto che il contenuto venga visualizzato nella pagina corrente [[$giostra]] in ogni caso il suo contenuto verrà trattato. A questo proposito è più opportuno riscrivere la voce:

[[$caru[[*id:is=`1`:then=`sel`]]]]

In questo caso, il contenuto del pezzo $giostra, verrà elaborato se la condizione è soddisfatta

*id:is=`1`

Perché corsa

[[*id:is=`1`:then=`sel`]]

e se l'ID della pagina corrente è 1, l'ultima cosa che viene elaborata lo è [[$giostra]], se id non è uguale a 1 allora − [[$caru]]. E se Chunka $caru- se non negli elementi, non ci sarà alcun carico.

In generale, l'output ideale sarebbe simile a questo.

[[$[[*id:is=`1`:then=`giostra`]]]]

Consiglio di leggere qui come integrare correttamente il layout in modx revo.

Nota! Puoi combinare tutti i modificatori che desideri per adattarli alla logica di funzionamento dei componenti del sito, ma la cosa principale da ricordare è che la loro essenza principale è facilitare lo sviluppo e non complicare compiti già complessi. Di solito, il metodo più efficace ed efficiente è il più semplice, poiché quanto più semplice e chiaro è il design, tanto più facile sarà lavorarci in futuro. Di seguito sono riportati i principali modificatori che puoi utilizzare per qualsiasi tag MODH Revo.

Catene di modificatori

Un buon esempio di concatenamento potrebbe essere quello di formattare una stringa di data in un formato diverso, come questo:

[[+miadata:strtoora:data=`%Y-%m-%d`]]

L'accesso diretto alla tabella "modx_user_attributes" nel database utilizzando i modificatori di output anziché uno snippet può essere effettuato semplicemente utilizzando un modificatore userinfo. Seleziona la colonna appropriata dalla tabella e specificala come proprietà del modificatore di output, ad esempio, in questo modo:

Chiave utente interna: [[!+modx.user.id:userinfo=`internalKey`]] Accesso: [[!+modx.user.id:userinfo=`username`]] Nome completo: [[!+modx.user .id:userinfo=`fullname`]] Ruolo: [[!+modx.user.id:userinfo=`role`]] E-mail: [[!+modx.user.id:userinfo=`email`]] Telefono: [[!+modx.user.id:userinfo=`phone`]] Cellulare: [[!+modx.user.id:userinfo=`mobilephone`]] Fax: [[!+modx.user.id :userinfo=`fax`]] Compleanno: [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]] Sesso: [[!+modx.user . id:userinfo=`gender`]] Paese: [[!+modx.user.id:userinfo=`country`]] Stato: [[!+modx.user.id:userinfo=`state`]] Codice postale: [[!+modx.user.id:userinfo=`zip`]] Foto: [[!+modx.user.id:userinfo=`photo`]] Commento: [[!+modx.user.id:userinfo = `comment`]] Data dell'ultimo accesso: [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]] Numero di accessi: [[!+modx. utente .id:userinfo=`logincount`]]

Presta particolare attenzione al punto esclamativo [[ ! +modx.utente.id]]. Permette NON memorizzare nella cache contenuto in uscita. Perché non memorizzare nella cache? Immaginiamolo così: ci sono 5 utenti sul sito. Il primo utente ha visitato la pagina con la sfida:

Benvenuto, [[!+modx.user.id:userinfo=`nomeutente`]]!

Come previsto, questa pagina visualizza un messaggio di benvenuto per l'utente. Pertanto, se il risultato viene memorizzato nella cache, la prima volta che accedi a questa pagina, il nome dell'utente appena entrato verrà salvato e a tutti gli altri verrà mostrato non il loro nome, ma il nome dell'utente che è entrato per primo in questa pagina . Per evitare ciò, semplicemente non memorizziamo nella cache questo tag, utilizzando un punto esclamativo prima di chiamare [[ ! +modx...

P.s.: non dimenticare spegnere memorizzazione nella cache dei tag dove necessario! Per fare questo è necessario SBARAZZARSI dai punti esclamativi ( ! ). I risultati della maggior parte degli snippet possono funzionare facilmente dalla cache. Lo vedremo nella prossima lezione.

I filtri in Revolution ti consentono di manipolare il modo in cui vengono elaborati determinati tag. Ti consentono di modificare i valori direttamente all'interno dei tuoi modelli.

Filtri di ingresso

Attualmente, i filtri di input vengono utilizzati in preparazione all'elaborazione dei filtri di output. Di solito vengono utilizzati solo all'interno del motore MODX.

Filtri di uscita

In Revolution, i filtri di uscita si comportano allo stesso modo di PHx in Evolution, solo che i filtri ora sono integrati direttamente nel motore MODX. La sintassi è simile alla seguente:

[]

I filtri possono essere applicati in sequenza. Per fare ciò, scrivili in fila (da sinistra a destra):

[]

I filtri possono essere utilizzati anche per modificare l'output degli snippet. Il filtro deve essere specificato prima di tutti i parametri (prima del punto interrogativo):

[]

Modificatori di uscita

La tabella mostra alcuni modificatori ed esempi del loro utilizzo. Negli esempi, i modificatori vengono applicati ai segnaposto, ma dovresti ricordare che possono essere applicati a qualsiasi tag MODX. Assicurati che il tag che utilizzi restituisca almeno qualcosa che il modificatore elaborerà.

Modificatori di output condizionali

Modificatore Descrizione Esempio di utilizzo
se, input Passa testo arbitrario come input per il modificatore successivo [[*id:input=`[[+placeholder]]`:is=`1`:then=`Sì`:else=`No`]]
O O [[+numbooks:is=`5`:or:is=`6`:then=`Ci sono 5 o 6 libri qui`:else=`Non so quanti libri`]]
E Combinazione di più modificatori con un collegamento E [[+numbooks:gt=`5`:and:lt=`10`:then=`Ci sono da 5 a 10 libri qui`:else=`Ci sono meno di 5 o più di 10 libri`]]
isuguale, isuguale, uguale, uguale, è, eq Confronta il valore passato con il valore impostato. Se i valori corrispondono, viene visualizzato il valore "then", in caso contrario - "else" [[+numbooks:isequalto=`5`:then=`Ci sono 5 libri`:else=`Non so quanti libri`]]
notauguale, notauguale, non è, non è, neq, ne Confronta il valore passato con il valore impostato. Se i valori NON corrispondono, viene visualizzato il valore "then", in caso contrario - "else" [[+numbooks:notequalto=`5`:then=`Non so quanti libri`:else=`Ci sono 5 libri`]]
maggiore di o uguale a, uguale o maggiore quindi, ge, eg, isgte, gte Lo stesso, solo che la condizione è “Maggiore o uguale a” [[+numbooks:gte=`5`:then=`Ci sono 5 o più libri qui`:else=`Ci sono meno di cinque libri qui`]]
è maggiore di, maggiore di, isgt, gt Lo stesso, solo la condizione “Strettamente di più” [[+numbooks:gt=`5`:then=`Ci sono più di cinque libri qui`:else=`Ci sono 5 libri o meno`]]
ugualeomeno, menocheuguale, el, le, islte, lte Lo stesso, solo che la condizione è “Minore o uguale a” [[+numbooks:lte=`5`:then=`Ci sono 5 libri o meno qui`:else=`Ci sono più di cinque libri qui`]]
è inferiore a, è inferiore a, inferiore a, inferiore a, islt, lt Lo stesso, solo la condizione “Rigorosamente meno” [[+numbooks:lte=`5`:then=`Ci sono meno di cinque libri qui`:else=`Ci sono 5 o più libri qui`]]
nascondere Nasconde l'elemento se la condizione è vera [[+numbooks:lt=`1`:hide]]
spettacolo Visualizza un elemento se una condizione è vera [[+numbooks:gt=`0`:mostra]]
Poi Utilizzato per creare condizioni [[+numbooks:gt=`0`:then=`Libri in stock!`]]
altro Utilizzato per creare condizioni (insieme a "allora") [[+numbooks:gt=`0`:then=`Libri in stock!`:else=`Siamo spiacenti, ma è tutto esaurito.`]]
membro di, ismembro, mo Controlla se l'utente è membro del gruppo utenti specificato [[!+modx.user.id:memberof=`Amministratore`]]

Modificatori per lavorare con le stringhe

Modificatore Descrizione Esempio di utilizzo
gatto Aggiunge un valore dopo un tag [[+numbooks:cat=`libri`]]
lcase, minuscolo, strtolower Converte tutte le lettere in minuscolo [[+titolo:lcase]]
ucase, maiuscolo, strtoupper Converte tutte le lettere in maiuscolo [[+titolo:ucase]]
ucwords Rende maiuscola la prima lettera delle parole [[+titolo:ucwords]]
ucfirst Rende maiuscola la prima lettera di una stringa [[+nome:ucfirst]]
htmlent, htmlentities Converte tutti i caratteri nelle entità HTML corrispondenti [[+email:htmlent]]
esc, fuga Esegue l'escape sicuro dei caratteri utilizzando le espressioni regolari e `str_replace()`. Evita anche i tag MODX. [[+email:fuga]]
striscia Sostituisce tutti i trattini, le tabulazioni e qualsiasi numero di spazi con un solo spazio [[+testodocumento:striscia]]
stripString Taglia la sottostringa specificata da una stringa [[+nome:stripString=`Sig.`]]
sostituire Sostituisce le sottostringhe [[+pagetitle:replace=`Sig.==Sig.ra`]]
striptags, stripTags, notags, strip_tags Taglia tutti i tag (è possibile specificare i tag consentiti). Non utilizzare per scopi di sicurezza. [[+codice:strip_tags]]
len,lunghezza,strlen Stampa la lunghezza di una stringa [[+stringa lunga:strlen]]
inverso, strev Inverte una stringa carattere per carattere [[+mirrortext:reverse]]
wordwrap Inserisce un'interruzione di riga dopo ogni nesimo carattere (le parole non vengono interrotte) [[+bodytext:wordwrap=`80`]]
wordwrapcut Inserisce un'interruzione di riga dopo ogni nesimo carattere, anche se questo carattere è all'interno di una parola [[+bodytext:wordwrapcut=`80`]]
limite Stampa un numero specificato di caratteri dall'inizio di una riga (il valore predefinito è 100) [[+descrizione:limit=`50`]]
puntini di sospensione Aggiunge i puntini di sospensione e tronca la riga se è più lunga del numero di caratteri specificato (il valore predefinito è 100) [[+descrizione:ellissi=`50`]]
etichetta Schermatura. Visualizza l'elemento così com'è, senza il :tag. Da utilizzare nella documentazione [[+mostraQuesto:tag]]
aggiungere, incrementare, incrementare Aggiunge il numero specificato (predefinito +1) [[+download:incr]] [[+blackjack:add=`21`]]
sottrarre, decrementare, decrementare Sottrae il numero specificato (predefinito -1) [[+countdown:decr]] [[+moneys:subtract=`100`]]
moltiplica, mpy Moltiplica per il numero specificato (predefinito *2) [[+trifetta:mpy=`3`]]
dividere, div Divide per il numero specificato (predefinito /2) [[+valutazione:div=`4`]]
modulo, mod Restituisce il modulo di un numero (default: %2, restituisce 0 o 1) [[+numero:mod]]
se vuoto, predefinito, vuoto, è vuoto Restituisce il valore del modificatore se il valore del tag è vuoto [[+nome:default=`anonimo`]]
non vuoto, ! vuoto, se non vuoto, non è tentato Restituisce il valore del modificatore se il valore del tag Non vuoto [[+nome:notempty=`Ciao [[+nome]]!`]]
nl2br Sostituisce i ritorni a capo \n con il tag HTML br [[+file di testo:nl2br]]
data Converte il timestamp in testo in base al formato specificato (formato data) [[+anno di nascita:data=`%Y`]]
strtotime Converte la data come testo nel timestamp UNIX [[+thetime:strtotime]]
fuzzydate Accetta un timestamp e restituisce una data nel formato "Oggi alle 16:20" [[+creato il:fuzzydate]]
fa Restituisce il numero di secondi, minuti, settimane o mesi trascorsi dalla data specificata nel tag. [[+creato il: fa]]
md5 Crea un hash MD5 di un valore [[+password:md5]]
cdata Avvolge l'output con i tag CDATA [[+contenuto:cdata]]
userinfo Restituisce il valore richiesto dal profilo dell'utente. ID utente richiesto [[!+modx.user.id:userinfo=`nome utente`]]
è loggato Restituisce 1 se l'utente è autorizzato nel contesto corrente [[!+modx.user.id:isloggedin:is=`1`:then=`Sì`:else=`No`]]
non è loggato Restituisce 1 se utente Non autorizzato nel contesto attuale [[!+modx.user.id:isnotloggedin:is=`1`:then=`No`:else=`Sì`]]
urlencode Converte il valore come URL, ovvero utilizza la funzione PHP `urlencode()` [[+miastringa:codiceurlen]]
urldecode Converte il valore come da un URL, ovvero utilizza la funzione PHP `urldecode()` [[+myparam:urldecode]]

I modificatori per lavorare con gli utenti devono essere chiamati non memorizzati nella cache in modo che ogni utente veda i dati più recenti.

Utilizzo dei modificatori di output con parametri

Se un tag ha parametri, questi devono essere scritti immediatamente dopo il modificatore:

[[!getResources:default=`Spiacenti, non è stato trovato nulla`?

&tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

Creazione di un modificatore personalizzato

Qualsiasi snippet può essere utilizzato come modificatore di output. Per fare ciò, specifica semplicemente il nome dello snippet invece del modificatore. Ad esempio, creiamo uno snippet [] che aggiunge un certo numero di punti esclamativi all'output:

[[*pagetitle:makeExciting=`4`]]

Tale chiamata al tag passerà i seguenti parametri allo snippet makeExciting per l'elaborazione: Parametro Senso

Valore di esempio Buona salute a tutti. In questo articolo ti spiegherò come creare un filtro dei documenti basato sui parametri TV su un sito Web che esegue Modx Revolution. Utilizzeremo lo snippet tagManager2 da Andchir

. Questo frammento può funzionare con più televisori contemporaneamente, nonché con dati numerici (sotto forma di prezzo) e un elenco multiplo. Analizzeremo ulteriormente ciascuno di questi esempi.

1. Per prima cosa devi installare tagManager2 Per fare questo andiamo a

Applicazioni/Installatore/ premere il pulsante"Scarica componente aggiuntivo" Buona salute a tutti. In questo articolo ti spiegherò come creare un filtro dei documenti basato sui parametri TV su un sito Web che esegue Modx Revolution. Utilizzeremo lo snippet

ed entra nella barra di ricerca Inoltre è ancora necessario installare lo snippet getPage e getProducts . Così sezione"Gestione dei pacchetti"

dovrebbe assomigliare a questo (lo snippet translit, tra l'altro, è responsabile della traslitterazione degli alias in latino) Scarica, installa i pacchetti e vai a

"Impostazioni di sistema"

2. Configura lo snippet tagManager2

In Impostazioni di sistema, seleziona la sezione tag_manager2

Vedremo le opzioni di impostazione del filtro

  • Tutto lì è abbastanza semplice e chiaro, ma comunque: IN"ID risorsa directory di primo livello"
  • Tutto lì è abbastanza semplice e chiaro, ma comunque: specificare l'ID del modello di catalogo o della categoria in cui verranno filtrati i prodotti o le pagine"Delimitatore elenco multiplo aggiuntivo"
  • Tutto lì è abbastanza semplice e chiaro, ma comunque: metti il ​​segno #. Di seguito scoprirai perché è necessario"Nomi di campi elenco TV o multipli"
  • registrare la TV con un elenco multiplo. Ti mostrerò come crearli di seguito.- qui è necessario specificare i parametri TV, che conterranno numeri. Questo di solito è un parametro di prezzo. Questo filtro verrà visualizzato come uno slider “da e a”
  • Tutto lì è abbastanza semplice e chiaro, ma comunque: "ID modello prodotto" annotiamo gli id ​​delle pagine che devono essere filtrate e alle quali sono allegati i parametri TV sopra specificati
  • Tutto lì è abbastanza semplice e chiaro, ma comunque: "Nome del set di parametri utilizzato per il filtraggio" registrare catalog_filters. Utilizzeremo questo modello nei modelli di parametri getPage E getProdotti
  • Registrati “Snippet associato a un insieme di parametri” il nome dello snippet che visualizzerà e impaginerà pagine o prodotti. Di solito questo getPage.

3. Creare una serie di parametri catalog_filters in getPage

Andiamo allo snippet getPage

Vai alla scheda "Opzioni" e premere il pulsante "Aggiungi set di parametri". Ovviamente puoi modificare quello esistente, ma poi c'è la possibilità di sovrascrivere i parametri che ora creeremo durante l'aggiornamento di getPage. Se non hai intenzione di aggiornare, puoi semplicemente modificare.

Modifica i parametri esistenti e assegna i valori:

Creare nuovi parametri e assegnare valori

I parametri modificati verranno visualizzati in verde, i parametri creati verranno visualizzati in viola

4. Creare o modificare i parametri TV per il filtro

Ad esempio, ho creato 3 parametri TV

Vorrei prestare particolare attenzione al fatto che è necessario specificare il nome (titolo) del parametro TV, altrimenti potrebbe semplicemente non essere visualizzato nel modulo di controllo del filtro

​5.Crea un pezzo filtr_tpl

Questo pezzo è responsabile dell'output di ogni singolo risultato in getProducts

6. Creare una struttura nell'albero del documento

Per me assomiglia a questo:

La nostra pagina principale ha l'ID 1 e i prodotti hanno l'ID modello 1 (lo abbiamo nelle impostazioni di tag_manager2, se hai altri valori, non dimenticare di modificarlo nelle impostazioni)

7. Modifica filter.js

Andiamo all'indirizzo /assets/components/tag_manager2/js/web/filters.js e invece

Multitag: ["tag"],//Nomi aggiuntivi. campi con più valori

inserisci il codice con i nostri valori sostituiti

Multitag: ["filtr1", "filtr2"],//Nomi aggiuntivi. campi con più valori

Qui tutto è estremamente semplice e chiaro. Abbiamo inserito i nostri campi tv con più valori. In generale, questa è una configurazione di tutte le impostazioni (ma è meglio non toccarle senza il permesso dei grandi, intendo il consiglio dei creatori del modulo)

8. Visualizzare il filtro e i risultati del filtraggio

Il filtro stesso

[]
[[+filtri]]

Visualizzazione dei risultati con impaginazione

[[!tmCatalogo]]
    [[!+pagina.nav]]

Ordinamento dei risultati

9. Attiva il filtro

Ora non ci resta che attivare il nostro filtro. Per fare questo andiamo a Gestione applicazioni/filtri.

Qui è necessario selezionare le caselle accanto a ciascun filtro e fare clic sul pulsante"Salva" .

Se hai fatto tutto correttamente, il filtro dovrebbe funzionare. Questo è tutto. Se avete domande, fatele nei commenti, cercherò di rispondere. In generale, ecco la documentazione per tagManager2 . Buona fortuna per lo sviluppo. IN "Dimostrazione" uno dei miei siti che implementa un filtro utilizzando tagManager2

I filtri in Revolution ti consentono di elaborare e modificare i valori dei tag all'interno di modelli, blocchi e snippet.

Filtri di ingresso

Attualmente, i filtri di input vengono utilizzati in preparazione all'elaborazione dei filtri di output. In genere vengono utilizzati solo all'interno del kernel MODX.

Filtri di uscita

In MODX Revolution, i filtri di output vengono utilizzati come uno o più modificatori di output. Sono simili alle chiamate PHx in MODx Evolution, ma differiscono in quanto sono già integrati nel kernel.

Sintassi del modificatore:

[[+elemento:modificatore=`valore`]]

I filtri possono essere applicati in sequenza (scritti da sinistra a destra):

[[+elemento:modificatore=`valore`:anothermodificatore=`valore2`:andanothermodificatore:yetanother=`valore3`]]

Anche i filtri possono essere utilizzati per modificare l'output degli snippet. Il filtro deve essere specificato prima di tutti i parametri (prima del punto interrogativo):

Modificatori di uscita

La tabella mostra alcuni modificatori ed esempi del loro utilizzo. Negli esempi si applicano ai segnaposto, ma devi ricordartelo i modificatori possono essere applicati a qualsiasi tag MODX Revolution.

Modificatore Descrizione Esempio di utilizzo
se, input if - imposta una condizione aggiuntiva, input - aggiunge i dati elaborati al tag [[+num:is=`10`:and:if=`[[+num]]`:ne=`15`:then=`Sì, uguale a 10 e non 15`]]
o, e Combinazione di diversi modificatori con una connessione OR e una connessione AND [[+numProducts:is=`10`:or:is=`11`:then=`Ci sono 10 o 11 prodotti qui`:else=`Non so quanti prodotti`]]
isuguale, isuguale, uguale, uguale, è, eq Confronta il valore passato con il valore impostato. Se i valori corrispondono, viene visualizzato il valore "then", in caso contrario - "else" [[+numProducts:isequalto=`10`:then=`Ci sono 10 prodotti qui`:else=`Non sono sicuro di quanti prodotti`]]
notauguale, notauguale, non è, non è, neq, ne Confronta il valore passato con il valore impostato. Se i valori NON corrispondono, viene visualizzato il valore "then", in caso contrario - "else" [[+numProducts:notequalto=`10`:then=`Non so quanti prodotti`:else=`Ci sono 10 prodotti qui`]]
maggiore di o uguale a, uguale o maggiore quindi, ge, eg, isgte, gte Lo stesso, solo che la condizione è “Maggiore o uguale a” [[+numProducts:gte=`10`:then=`Ci sono 10 o più prodotti qui`:else=`Ci sono meno di 10 prodotti qui`]]
è maggiore di, maggiore di, isgt, gt Lo stesso, solo che la condizione è “Strettamente maggiore di” [[+numProducts:gt=`10`:then=`Ci sono più di 10 prodotti qui`:else=`Ci sono 10 prodotti o meno qui`]]
ugualeomeno, menocheuguale, el, le, islte, lte Lo stesso, solo che la condizione è “Minore o uguale a” [[+numProducts:lte=`10`:then=`Ci sono 10 prodotti o meno qui`:else=`Ci sono più di 10 prodotti qui`]]
è inferiore a, è inferiore a, inferiore a, inferiore a, islt, lt Idem, solo che la condizione è “Rigorosamente inferiore” [[+numProducts:lte=`10`:then=`Ci sono meno di 10 prodotti qui`:else=`Ci sono 10 prodotti o più qui`]]
nascondere Nasconde l'elemento se la condizione è vera [[+numProdotti:lt=`1`:nascondi]]
spettacolo Visualizza un elemento se una condizione è vera [[+numProdotti:gt=`0`:mostra]]
Poi Utilizzato per creare condizioni [[+numProdotti:gt=`0`:then=`Prodotti disponibili!`]]
altro Utilizzato per creare condizioni (insieme a "allora") [[+numProducts:gt=`0`:then=`Prodotti in stock!`:else=`Siamo spiacenti, ma è tutto esaurito.`]]
membro di, ismembro, mo Controlla se l'utente è membro del gruppo utenti specificato [[+modx.user.id:memberof=`Amministratore`]]

Modificatori per lavorare con le stringhe

Modificatore Descrizione Esempio di utilizzo
gatto Aggiunge un valore dopo un tag [[+numProdotti:cat=`prodotti`]]
lcase, minuscolo, strtolower Converte tutte le lettere in minuscolo [[+titolo:lcase]]
ucase, maiuscolo, strtoupper Converte tutte le lettere in maiuscolo [[+titolo lungo:ucase]]
ucwords Rende maiuscola la prima lettera delle parole [[+titolo:ucwords]]
ucfirst Rende maiuscola la prima lettera di una stringa [[+nome:ucfirst]]
htmlent, htmlentities Converte tutti i caratteri in entità HTML [[+email:htmlent]]
esc, fuga Esegue l'escape sicuro dei caratteri utilizzando le espressioni regolari e str_replace . Evita anche i caratteri [, ] e ` [[+email:fuga]]
striscia Sostituisce tutti i trattini, le tabulazioni e qualsiasi numero di spazi con un solo spazio [[+testodocumento:striscia]]
stripString Taglia la sottostringa specificata da una stringa [[+nome:stripString=`Sig.`]]
sostituire Sostituisce le sottostringhe [[+pagetitle:replace=`Sig.==Sig.ra`]]
striptags, stripTags, notags, strip_tags Taglia tutti i tag (è possibile specificare i tag consentiti). [[+codice:strip_tags=`
len, lunghezza, strlen Stampa la lunghezza di una stringa [[+stringa lunga:strlen]]
inverso, strev Inverte una stringa carattere per carattere [[+mirrortext:reverse]]
wordwrap Inserisce un'interruzione di riga dopo ogni nesimo carattere (le parole non vengono interrotte) [[+bodytext:wordwrap=`80`]]
wordwrapcut Inserisce un'interruzione di riga dopo ogni nesimo carattere, anche se questo carattere è all'interno di una parola [[+bodytext:wordwrapcut=`80`]]
limite Stampa un numero specificato di caratteri dall'inizio di una riga (il valore predefinito è 100) [[+descrizione:limit=`50`]]
puntini di sospensione Aggiunge i puntini di sospensione e tronca la riga se è più lunga di un certo numero di caratteri (il valore predefinito è 100) [[+descrizione:ellissi=`50`]]
etichetta Schermatura. Visualizza l'elemento così com'è, senza il :tag. Da utilizzare nella documentazione [[+mostraQuesto:tag]]
matematica Restituisce il risultato di calcoli avanzati (uso intensivo della CPU. Non consigliato)
aggiungere, incrementare, incrementare Aggiunge il numero specificato (predefinito +1) [[+download:incr]], [[+blackjack:add=`21`]]
sottrarre, decrementare, decrementare Sottrae il numero specificato (predefinito -1) [[+countdown:decr]], [[+moneys:subtract=`100`]]
moltiplica, mpy Moltiplica per il numero specificato (predefinito *2) [[+trifetta:mpy=`3`]]
dividere, div Divide per il numero specificato (predefinito /2) [[+valutazione:div=`4`]]
modulo, mod Restituisce la divisione modulo di un numero
(impostazione predefinita: %2, restituisce 0 o 1))
[[+numero:mod]]
ifempty, default, vuoto, isempty Restituisce il valore del modificatore se il valore del tag è vuoto [[+nome:default=`anonimo`]]
non vuoto, ! vuoto, se non vuoto, non è tentato Restituisce il valore del modificatore se il valore del tag NON è vuoto [[+nome:notempty=`Ciao, [[+nome]]!`]]
nl2br Sostituisce i ritorni a capo (\n) con un tag HTML
[[+file di testo:nl2br]]
data Converte il timestamp in testo in base al formato specificato (formato data) [[+anno di nascita:data=`%Y`]]
strtotime Converte la data come testo nel timestamp UNIX [[+thetime:strtotime]]
fuzzydate Restituisce la data nel formato "ieri, oggi, ...". Accetta un valore di data. [[+creato il:fuzzydate]]
fa Restituisce il numero di secondi, minuti, settimane o mesi trascorsi dalla data specificata nel tag. [[+creato il: fa]]
md5 Crea un hash MD5 di un valore [[+password:md5]]
cdata Avvolge l'output con i tag CDATA [[+contenuto:cdata]]
userinfo Restituisce il valore richiesto dal profilo dell'utente. ID utente richiesto [[+modx.user.id:userinfo=`nome utente`]]
è loggato Restituisce vero se l'utente è autenticato nel contesto corrente [[+modx.user.id:isloggedin]]
non è loggato Restituisce vero se l'utente NON è autenticato nel contesto corrente [[+modx.user.id:isnotloggedin]]
urlencode Converte il valore in URL [[+miastringa:codiceurlen]]
urldecode Converte il valore dall'URL [[+myparam:urldecode]]

Utilizzo dei modificatori di output con parametri

Se un tag ha parametri, questi devono essere scritti immediatamente dopo il modificatore:

&tplFirst=`blogTpl` &parents=`2,3,4,8` &tvFilters=`blog_tags==%[[!tag:htmlent]]%` &includeTVs=`1` ]]

Qualsiasi snippet può essere utilizzato anche come modificatore di output. Per usarlo, specifica semplicemente il nome dello snippet invece del modificatore. Ad esempio, creiamo uno snippet makeExciting che aggiunge un certo numero di punti esclamativi all'output:

[[*pagetitle:makeExciting=`4`]]

[[*pagetitle:makeExciting=`4`]]

Modificatore UserInfo

Accesso diretto ai dati da una tabella modx_user_attributes in un database, l'utilizzo dei modificatori di output anziché degli snippet può essere ottenuto semplicemente utilizzando il modificatore UserInfo.

Seleziona la colonna desiderata dalla tabella e specificala come proprietà del modificatore, ad esempio in questo modo:

Parametro Modificatore
Chiave interna dell'utente [[!+modx.user.id:userinfo=`internalKey`]]
Login [[!+modx.user.id:userinfo=`nome utente`]]
Nome e cognome [[!+modx.user.id:userinfo=`nome completo`]]
Ruolo [[!+modx.user.id:userinfo=`ruolo`]]
E-mail [[!+modx.user.id:userinfo=`email`]]
Telefono [[!+modx.user.id:userinfo=`telefono`]]
Telefono cellulare [[!+modx.user.id:userinfo=`mobilephone`]]
Fax [[!+modx.user.id:userinfo=`fax`]]
Data di nascita [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]
Pavimento [[!+modx.user.id:userinfo=`genere`]]
Paese [[+modx.user.id:userinfo=`paese`]]
Regione [[+modx.user.id:userinfo=`stato`]]
Codice Postale [[+modx.user.id:userinfo=`zip`]]
Foto [[+modx.user.id:userinfo=`foto`]]

PHx (Placeholders Xtended) aggiunge nuove funzionalità per la visualizzazione di segnaposto, tag MODx (inclusi i parametri TV) e tag delle impostazioni del sito. Il parser ricorsivo consente l'uso di tag nidificati. È possibile creare i propri modificatori creando snippet.

Puoi scaricare l'ultima versione di PHx dal repository MODX utilizzando questo collegamento.

Nuova installazione

  1. Scarica e decomprimi l'archivio.

Aggiornamento

  1. Scarica e decomprimi l'archivio.
  2. Rinominare la directory /assets/plugins/phx in /assets/plugins/phx-old
  3. Crea una directory "phx" nella cartella /assets/plugins.
  4. Carica tramite FTP o semplicemente copia il contenuto dell'archivio in /assets/plugins/phx
  5. Crea un nuovo plugin "PHx" nel pannello di controllo di MODx (Elementi - Gestione elementi - Plugin) e copia al suo interno il contenuto del file phx.plugin.txt
  6. Controlla l'evento "OnParseDocument" nella scheda "Eventi di sistema".

Configurazione

Nella scheda Configurazione, mentre modifichi il plugin, copia nel campo "Configurazione plugin":

&phxdebug=Registro eventi;int;0 &phxmaxpass=Numero max. numero di passaggi;int;50

Per utenti avanzati

Puoi modificare le impostazioni predefinite per il plugin PHx:

Registro eventi

0 = Disabilitato
1 = registrazione eventi PHx abilitata
Se abilitato, PHx crea un registro dettagliato per ogni evento registrato nel registro eventi (Rapporti->Visualizzatore eventi)

Massimo. numero di passaggi

Definisce la profondità massima dei tag nidificati che possono essere elaborati. Si consiglia di lasciare il valore su 50.

PHx (Placeholders Xtended) espande l'uso di segnaposto, tag di contenuto (inclusi i parametri TV) e tag di impostazioni del sito. Grazie a ciò, puoi facilmente determinare il formato di output del risultato finale. PHx è integrato nel parser MODX, espandendone le funzionalità con modificatori, condizioni e, come bonus, rendendolo veramente ricorsivo.

Tag supportati

PHx supporta i seguenti tag MODx:

  • [+segnaposto+]
  • [*tag contenuto*] (ad esempio: [*content*], [*pagetitle*] e altri)
  • [*Parametri TV*]
  • [(tag di personalizzazione)] (ad esempio: [(base_url)], [(nome_sito)] e altri)

Snippet che supportano PHx

  • Idem
  • MaxiGalleria

Puoi utilizzare la sintassi PHx nei blocchi utilizzati dagli snippet non presenti in questo elenco, ma ciò richiede un metodo diverso (vedi la sezione Suggerimenti e trucchi)

Segnaposto della visualizzazione normale

[+segnaposto+]

si trasforma facilmente in un segnaposto PHx:

[+segnaposto:esc+]

Puoi fare lo stesso con il tag content:

[*creato da*]

Aggiungi un modificatore:

[*createdby:date=`%a %B %d, %Y alle %H:%M`*]

Puoi anche utilizzare più modificatori contemporaneamente. Verranno elaborati da sinistra a destra:

Somevar:esc:nl2br:strip

Applicazioni avanzate

La presenza di un segnaposto speciale "phx" consente di utilizzare la sintassi PHx senza avere una variabile reale.

[+phx:if=`[+questo+]`:is=`[+quello+]`:allora=`fai questo`:else=`fai quello`+]

Con alcuni modificatori, questo segnaposto assume un certo significato. Nel caso del modificatore "userinfo", restituisce il valore corrispondente dalle informazioni sull'utente corrente:

[+phx:infoutente=`nomeutente`+]

Problemi noti

Sintassi

Sembra logico, ma vale la pena focalizzarlo. Evita di utilizzare i seguenti costrutti in un modello a meno che non facciano parte di un tag MODx:

[+
[*
[(
+]
*]
)]
]]

Il parser proverà a elaborarli e MODx genererà un errore. Di solito questo problema non si presenta. Ma nel caso di JavaScript, potresti avere un costrutto simile a questo:

Vettore

Ciò provocherà uno strano comportamento a causa di +]. Anche il tag di chiusura CDATA:

/* ]]> */

Può creare problemi.

Ricorda che non puoi perdere i dati del tuo sito utilizzando una sintassi PHx errata. La cosa peggiore che può succedere è che il tuo modello non venga visualizzato correttamente.

Stringhe

lcase

ucase

Converte tutti i caratteri di una stringa in maiuscolo.

[+stringa:ucase+]

All'ingresso:

Questa è una stringa

QUESTA È UNA STRINGA

ucfirst

La prima lettera della riga diventerà maiuscola.

[+stringa:ucfirst+]

All'ingresso:

lunghezza | len

Restituisce la lunghezza della stringa.

All'ingresso:

Questa è una stringa

notags

Taglia tutti i tag HTML da una stringa.

[+stringa:notags+]

All'ingresso:

Questo È UN corda

Questa è una stringa

ESC

Rimuove i tag HTML e le interruzioni di riga

htmlent

Converte la variabile originale in un'entità html. Analogo a htmlentities() in PHP.

nl2br

Converte i caratteri di nuova riga in tag.

[+stringa:nl2br+]

All'ingresso:

Questo è
una corda

Questo è
una corda

striscia

Rimuove i caratteri di nuova riga (\n), le tabulazioni (\t) e gli spazi consecutivi.

[+stringa:striscia+]

All'ingresso:

Questo è
UN
corda

Questa è una stringa

Altri modificatori

inversione

Gira le lettere all'indietro.

wordwrap

Spezza le parole nel valore corrente più lunghe della lunghezza di caratteri specificata inserendo uno spazio in mezzo.

Impostazione predefinita: 70 caratteri.

A capo automatico(=`lunghezza`)

lunghezza - caratteri

limite

Restituisce i primi X caratteri dal valore corrente.

Impostazione predefinita: 100 caratteri.

limite(=`lunghezza`)

Speciale

data

Converte un timestamp unix in modo che corrisponda al formato specificato.

data(=`formatodata`)

dateformat: secondo il formato della funzione PHP strftime

[*creato il:data=`%d.%m.%Y`*]

Affinché la data venga visualizzata in conformità con la lingua corrente del sito, è necessario impostare la locale all'inizio del codice del plugin PHx. Esempio seguente per il tedesco:

setlocale(LC_ALL, "de_DE@euro", "de_DE", "de", "ge");

md5

Crea un hash MD5 del valore corrente.

userinfo

Campi utilizzati nel database MODx dalla tabella user_attributes (ad esempio: nome utente, email utente).

Informazioni utente=`campo`

  • cachepwd: memorizza la password nella cache
  • commento: commento
  • Paese: Paese
  • dob: Data di nascita nel formato ora UNIX
  • e-mail: E-mail
  • fax:Fax
  • nome e cognome: Nome e cognome
  • genere: Pavimento
  • internalKey:Chiave interna dell'utente
  • lastlogin: Ultimo accesso, nel formato ora UNIX
  • logincount: numero di accessi
  • cellulare: Telefono cellulare
  • password: Parola d'ordine
  • telefono: Telefono
  • foto: Foto
  • ruolo: Ruolo
  • stato: Stato
  • questo login: questo accesso, nel formato ora UNIX
  • nome utente: Login
  • cerniera lampo: Codice Postale

matematica

Utilizzare calcoli come - * + /.

Matematica=`calcolo`

"?" il simbolo viene sostituito con il valore corrente dell'estensione, ma è anche possibile utilizzare tag nidificati.

Esempio di calcolo: ?+1+(2+3)+4/5*6

se vuoto

Utilizza "altro valore" se il valore segnaposto/templatevar è vuoto.

Sevuoto=`altro valore`

selezionare

Assume un valore in base ai valori segnaposto/templatevar.

Seleziona=`opzioni`

parametri: valore1=uscita1&valore2=uscita2

All'ingresso: 1

[+segnaposto:select=`0=OFF&1=ON&2=SCONOSCIUTO`+]

Ritorno: ON

Espressioni condizionali

È

ne

alias: non lo è, non lo è

non uguale (!=)

per esempio

maggiore o uguale a (>=)

el

minore o uguale a (<=)

GT

altro (>)

lt

meno (<)

mo=`Gruppi web`

sinonimi (alias): isinrole, ir, memberof

Prende un elenco di gruppi web separati da virgole come parametro e restituisce vero/falso a seconda che l'utente corrente appartenga o meno a uno di questi gruppi (sostituisce il modificatore "ruolo", che doveva essere combinato con un operatore condizionale).

[+phx:mo=`myWebgroup`:then=`Sono un membro`:else=`NON sono un membro`+]

if =`valore`

Accetta una variabile di confronto come parametro. Può essere utilizzato anche in combinazione con :O O :E.

[+phx:if=`[+prezzo+]`:gt=`0`:then=`Prezzo: [+prezzo+]`+]

O

OR logico (controlla se la prima o la seconda condizione è vera).

[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`((Chunk))`:else=`((OtherChunk))`+]

In questo esempio, se l'ID corrente è 2 o 3, viene visualizzato il pezzo ((Chunk)), altrimenti viene visualizzato il pezzo ((OtherChunk)).

E

AND logico (controlla se entrambe le condizioni sono vere).

[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`((ChildChunk))`:else=`((ParentChunk)) `+]

In questo esempio, se UltimateParent è uguale a 1 e diverso dall'ID corrente, viene visualizzato il pezzo ((ChildChunk)), altrimenti viene visualizzato il pezzo ((ParentChunk)).

quindi =`modello`

Senso modello visualizzato quando tutte le condizioni sono vere. Qui puoi specificare una chiamata ((chunk)), [[snippet]] o HTML puro.

else =`modello`

Senso modello viene visualizzato quando le condizioni non sono vere. Qui puoi specificare una chiamata ((chunk)), [[snippet]] o HTML puro.

spettacolo

Usato in modo simile Poi, ma il valore originale viene utilizzato come modello di output. Viene eseguito se le condizioni sono vere.

[+miosegnaposto:len:gt=`3`:mostra+]

In questo esempio, il valore del segnaposto verrà visualizzato se la sua lunghezza è superiore a 3 caratteri.

Modificatori personalizzati

Un modificatore è un semplice snippet che elabora un determinato valore. È possibile creare i propri modificatori/mini-snippet aggiungendo un nuovo snippet nel gestore risorse MODx o creando un file nella cartella modificatori del plugin PHx.

Poiché il codice modificatore è semplice, non necessita di parametri, ad eccezione di quelli che riceve dal parser.

Ci sono due variabili principali:

$uscita- contiene il valore corrente della variabile che deve essere modificata.
$opzioni- un parametro facoltativo, il cui valore viene passato al modificatore.

Esempio.

Diamo un paio di esempi sull'uso dei modificatori. Diciamo che il segnaposto myplaceholder importa "test":

[+miosegnaposto:miomodificatore+]

La variabile $output contiene il valore "test".
La variabile $opzioni non contiene nulla, perché nessun parametro è stato passato al modificatore.

[+miosegnaposto:miomodificatore=`le mie opzioni`+]

La variabile $output contiene ancora il valore "test".
La variabile $opzioni ora contiene il valore "le mie opzioni"

Altre variabili (per utenti avanzati)

$input: contiene il valore originale non modificato.
$condizione è un array contenente gli elementi che formano l'espressione condizionale (0, 1, || e &&).

Creare il tuo modificatore

Esempio 1: adoro MODx

Utilizzando le conoscenze acquisite, creeremo un nuovo modificatore personalizzato. Questo sarà un modificatore senza parametri che aggiungerà semplicemente il testo "perché amo MODx" alla variabile. Per fare ciò è necessario eseguire i seguenti passaggi:

1. Nel Gestore risorse, vai su Risorse (Elementi) -> Gestisci risorse (Elementi) -> Snippet

2. Fai clic su "Nuovo snippet"

phx: amore"

Affinché uno snippet venga percepito come un modificatore di PHx, il suo nome deve avere il prefisso "phx:" senza spazi tra esso e il nome dello snippet stesso. Quindi puoi usarlo come modificatore aggiungendo: love a qualsiasi segnaposto, ad esempio: [+myplaceholder:love+].

4. Ora aggiungiamo il codice modificatore al campo codice. Diciamo che questo è un codice come questo:

5. Salva le modifiche e il nostro nuovo modificatore ( :Amore) pronto per l'uso!

Esempio 2: amo MODx ancora di più

Creiamo un modificatore simile al modificatore :Amore dall'esempio precedente, ma gli daremo inoltre la possibilità di aggiungere alla stringa sorgente il valore del parametro passato, se era specificato.

1. Nel Gestore risorse, vai su Risorse (Elementi) -> Gestisci risorse (Elementi) -> Snippet

2. Fai clic su "Nuovo snippet"

3. Imposta il nome dello snippet su " phx:amore2"

Affinché uno snippet venga percepito come un modificatore di PHx, il suo nome deve avere il prefisso " foto:" senza spazi tra esso e il nome dello snippet stesso. Quindi puoi usarlo come modificatore aggiungendo: love a qualsiasi segnaposto, ad esempio: [+myplaceholder:love2+] .

ChunkGood.

Altri esempi

[+miosegnaposto:gt=`1`:then=`Sì`:else=`No`+]
[+myplaceholder:lt=`3`:and:gt=`1`:then=`Sì`:else=`No`+]
[+miosegnaposto:lt=`[+qualchesegnaposto+]`:then=`Sì`:else=`No`+]
[+myplaceholder:islt=`2`:then=`Sì`:else=`No`+]
[+myplaceholder:isnot=`2`:or:lt=`3`:then=`Sì`:else=`No`+]

Verranno restituiti tutti gli esempi .

[+myplaceholder:isnot=`2`:then=`Sì`:else=`No`+]
[+miosegnaposto:gt=`[+qualchesegnaposto+]`:then=`Sì`:else=`No`+]
[+myplaceholder:lt=`2`:then=`Sì`:else=`No`+]
[+miosegnaposto:gt=`2`:then=`Sì`:else=`No`+]
[+myplaceholder:lt=`1`:then=`Sì`:else=`No`+]

Verranno restituiti tutti gli esempi NO.

I migliori articoli sull'argomento