Autore Topic: Campi aggiuntivi - codice integrato ad un nuovo layout articolo  (Letto 434 volte)

Offline walturbo

  • Appassionato
  • ***
  • Post: 215
  • Sesso: Maschio
  • Possiamo essere liberi solo se tutti lo sono.
    • Mostra profilo
    • Ricette Last Minute
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:


Codice: [Seleziona]
<?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:



Codice: [Seleziona]
<?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:


Codice: [Seleziona]
<!-- 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:


Codice: [Seleziona]
<?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
« Ultima modifica: 01 Feb 2018, 11:56:29 da walturbo »

 

Torna su