Salve a tutta la community!!
Come da titolo, ho bisogno di capire come inserire i campi aggiuntivi all'interno di un layout in modo che da backend la scheda
Contenuto in pratica non venga più utilizzata. L'utente che andrà a scrivere il nuovo articolo da backend lo farà solamente dalla nuova scheda creata tramite un
gruppo di campi aggiuntivi. Questa richiesta nasce dalla necessità di poter cambiare nel corso del tempo la disposizione degli elementi all'interno dell'articolo e poter replicare l'azione su migliaia di articoli formattati tutti allo stesso modo.
Esempio pratico:
Ho un sito web di ricette. Creo dei nuovi campi aggiuntivi chiamati
Foto Ricetta con il nome
foto-ricetta, Ingredienti Ricetta con il nome
ingredienti-ricetta e
Preparazione Ricetta con il nome
preparazione-ricetta e li racchiudo dentro un nuovo gruppo di campi aggiuntivi che si chiamerà
RICETTA. Il layout da richiamare invece si chiamerà
ricettelayout.php.Adesso quando creerò un nuovo articolo mi ritrovo la scheda
RICETTA con i tre campi appena creati all'interno. Li vado a compilare inserendo la foto, gli ingredienti e la procedura ma non vado a scrivere nulla all'interno della scheda
Contenuto. Dalla scheda
Opzioni vado a richiamare il layout
ricettalayout.
A questo punto per visualizzare qualcosa all'interno dell'articolo appena creato devo inserire nel file
ricettalayout.php il codice che richiama i tre campi aggiuntivi. Ho provato seguendo
questa guida ufficiale ma non riesco a far comparire i singoli campi, anzi, compaiono uno dopo l'altro ma senza darmi la possibilità di cambiarne l'ordine, prende la matrice dove sono salvati i dati e me la stampa, tutto qui!
Sul mio file ho aggiunto alla riga 1 il codice che richiama l'array dei campi aggiuntivi:
<?php
// GET CUSTOM FIELDS
$myCustomFields = array();
foreach($this->item->jcfields as $field) {
$myCustomFields[$field->name] = $field->value;
}
?>
Mentre più giù, dopo il titolo <h2> ho provato a mettere il codice che richiama il valore del singolo campo:
<?php echo $item->jcFields['foto-ricetta']->value; ?>
<?php echo $item->jcFields['ingredienti-ricetta']->value; ?>
<?php echo $item->jcFields['preparazione-ricetta']->value; ?>
Però non funziona, visualizzo solo il titolo dell'articolo e poi pagina bianca
Mentre, se cancello tutto il codice che ho scritto qui sopra ed inserisco dopo l'<h2> solo questo nuovo codice riesco a visualizzare tutti i campi aggiuntivi uno dopo l'altro
senza label e senza possibilità di poter applicare css, allinearli e cosi via:
<!-- Load the FieldsHelper -->
<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); ?>
<?php foreach ($this->item->jcfields as $field) : ?>
<!-- Render the field using the fields render method -->
<?php echo FieldsHelper::render($field->context, 'field.render', array('field' => $field)); ?>
<?php endforeach ?>
Eliminando i codici di sopra ed inserendo solo questo invece vedo sempre tutti i valori dei campi aggiuntivi ammassati ma in aggiunta c'è il label:
<?php foreach ($this->item->jcfields as $field) : ?>
<!-- Render the field using the fields render method -->
<?php echo $field->label . ':' . $field->value; ?>
<?php endforeach ?>
Qualcuno ha già affrontato questo problema e saprebbe darmi una dritta?Quando si hanno migliaia di articoli con una certa disposizione degli elementi e da un giorno all'altro si ha bisogno di cambiare questa disposizione è alquanto stupido agire da backend aprendo ciascun articolo, ovvio che è un lavoraccio!! Mentre in questo modo si ha la possibilità di cambiare solo qualche stringa di codice dentro al file di layout ed in pochi minuti si avrà la nuova struttura identica per tutte le pagine che richiamano quel layout.
Grazie a quanti vorranno rispondermi, spero di esser stato più chiaro possibile!!
Walter