Mura CMS ti dà la possibilità di creare le tue funzionalità personalizzate, direttamente dal livello del tema. Questo articolo ti mostrerà come puoi migliorare i temi creando metodi personalizzati riutilizzabili che possono essere utilizzati sia nei modelli di layout che negli utenti amministratori.
Quando sviluppi temi, potresti avere una serie di "oggetti" che vorresti visualizzare più e più volte, come presentazioni, blocchi di dettagli, ecc..
Nel tutorial sulle estensioni di classe, abbiamo esaminato come creare attributi personalizzati per un libro e visualizzarli sulla pagina utilizzando un componente. Ecco il componente finale che abbiamo creato:
Dettagli
Autore: [M] $ content. ( 'BookAuthor') [/ m]
Data di rilascio: [M] dateFormat ($. Contenuti ( 'bookReleaseDate'), 'mm / gg / aa') [/ m]
ISBN: [M] $ content. ( 'BookISBN') [/ m]
Condizione: [M] $. Contenuti ( 'bookNewUsed') [/ m]
Prezzo: $ [M] $ content. ( 'BookPrice') [/ m]
Questo ha funzionato bene per il nostro esempio, ma ci sono alcuni inconvenienti:
Un modo per risolvere questi problemi è creare un metodo personalizzato nel nostro tema che visualizzi i dettagli del libro ogni volta che viene utilizzato.
I metodi di visualizzazione in Mura si trovano in un file chiamato contentRenderer.cfc. Ora, questo file esiste in due posizioni all'interno del tuo sito:
È importante capirlo tutti e due i file renderanno i metodi nel tuo sito, comunque a livello di tema contentRenderer.cfc aggiungerà eventuali metodi che non esistono a livello di sito e sostituiranno eventuali metodi già esistenti a livello di sito.
Un'altra cosa importante da considerare è che quando si esegue lo sviluppo del tema, qualsiasi lavoro svolto sopra la directory del tema non verrà distribuito con il tema. Se hai intenzione di creare temi per la distribuzione, ti consiglio di conservare tutto il codice personalizzato a livello di tema.
Nella tua directory dei temi, apri il contentRenderer.cfc file
Nota: se stai creando il tuo tema da zero e non hai già il file, vai avanti e aggiungi il contentRenderer.cfc dal tema MuraBootstrap3 allegato a questo articolo.
In questo file, creeremo una nuova funzione chiamata dspBookDetails
:
Ora, ogni volta che chiamiamo questa funzione, Mura eseguirà qualsiasi cosa al suo interno. Al momento, Mura non ha nulla da fare o da mostrare, finché non specifichiamo che vogliamo che la funzione restituisca qualcosa. Aggiungiamo una variabile per archiviare i nostri contenuti affinché questa funzione restituisca:
Ora puoi vedere che stiamo creando una variabile per archiviare tutto il nostro contenuto e la nostra logica (
), quindi dicendo alla funzione di restituire quella variabile alla pagina (
).
Ora siamo pronti per aggiungere il contenuto del libro reale, in modo simile a come avevamo nel componente:
Dettagli
Autore: # $. Contenuti ( 'bookAuthor') #
Data di rilascio: #dateFormat ($. contenuti ( 'bookReleaseDate'), 'mm / gg / aa') #
ISBN: # $. Contenuti ( 'bookISBN') #
Condizione: # $. Contenuti ( 'bookNewUsed') #
Prezzo: $ # $. Contenuti ( 'bookPrice') #
Nota: abbiamo sostituito il [M]
tag con hashtag (#
) perché siamo in un file di codice. [M]
i tag possono essere utilizzati solo negli editor dell'area admin.
Ora che abbiamo creato la funzione in contentRenderer.cfc, possiamo chiamarlo usando il Mura Scope. Torna al componente e sostituisci il contenuto con la seguente riga:
[M] $. DspBookDetails () [/ m]
Nota: Stiamo avvolgendo la funzione in a Quando pubblichi il componente e ricarichi la pagina del libro, dovresti vedere i dettagli del libro identici a come lo avevi prima: Oltre a chiamare la funzione da un componente, puoi anche utilizzare i tuoi metodi personalizzati direttamente all'interno dei modelli di layout. Ad esempio, è possibile duplicare il twoCol_SR.cfm modello, chiamalo book.cfm, e aggiungi questo alla barra laterale destra: Ora che abbiamo i dettagli del libro contenuti in un metodo personalizzato, possiamo aggiungere qualche logica aggiuntiva per rendere il nostro output un po 'più robusto. Innanzitutto, racchiudiamo l'intero contenuto della funzione per rilevare se la pagina in questione è effettivamente un libro. In caso contrario, non restituirà nulla. Autore: # $. Contenuti ( 'bookAuthor') # La prossima cosa che vogliamo fare è rilevare se esiste effettivamente un valore per ogni oggetto che stiamo visualizzando (Autore, ISBN, ecc.). Se il valore non esiste, vogliamo saltare l'elemento e passare alla riga successiva. Possiamo realizzare questo avvolgendo un Avvolgere ogni elemento di dettaglio del libro nel codice sopra, sostituendo il La creazione di metodi personalizzati è un ottimo modo per aggiungere versatilità ai tuoi temi, oltre a mantenere l'integrità del tuo codice. tag attorno all'output. Inoltre, non dimenticare la parentesi dopo aver chiamato la funzione
()
. Chiamare la funzione da un modello di layout
Aggiunta di alcuni logica dinamica
Dettagli
Data di rilascio: #dateFormat ($. contenuti ( 'bookReleaseDate'), 'mm / gg / aa') #
ISBN: # $. Contenuti ( 'bookISBN') #
Condizione: # $. Contenuti ( 'bookNewUsed') #
Prezzo: $ # $. Contenuti ( 'bookPrice') # Se
dichiarazione su ogni riga, verificando se esiste una lunghezza del valore maggiore di 0:
$ .Content ()
valori con i valori appropriati per ogni articolo:Dettagli
Conclusione