Salve, avrei bisogno di una mano per un problema riguardo la visualizzazione dei nuovi custom fields disponibili in Joomla! (3.9) nell'override del file default.php
Capisco come giustamente in questo forum sproniate le persone che chiedono aiuto a studiare, ma io non sono un programmatore php, non realizzo siti in Joomla! Wordpress dinamici ecc.
Sto facendo questo sito per un mio amico, purtroppo non ho tempo per approfondire lo studio di tali argomenti.
Passo ad esporre quello che vorrei ottenere ed il codice.
PREMESSE:
- Si tratta del com_content per l'article (il relativo file default.php al percorso override NomeSito/templates/NomeProprioTemplate/html/com_content/article/default.php )
- Ho già inserito il codice per far riconoscere nel file default.php i custom fields, funziona perchè con singoli custom fields riesco a visualizzarli e gestirli
- Il codice che sto provando utilizza la struttura di controllo if. Forse per semantica in alcuni casi potrebbe essere più "pulito" usare un ciclo for, tuttavia per ora preferirei questa soluzione (struttura if)
COSA VOGLIO OTTENERE:
1) Vorrei che venga stampato il codice html SOLO se uno dei due valori (stard-date o end-date, o entrambi, ovviamente) vengono inseriti.
2) Nel caso non ci sia alcun valore inserito NON deve essere inserito nessun codice html (e quindi neanche il div contenitore "contenitore-generale" con <h2>, <p> e <dl>. NIENTE!
3) Se viene inserito uno dei due valori (start-date o end-date) deve essere stampato il div contenitore, <h2>, <p> la <dl> MA SOLO LA COPPIA <dt><dd> del valore corrispondente inserito (e non anche l'altro vuoto).
IL PROBLEMA E' NEL PUNTO 3: non riesco a trovare modo per ottere l'effetto del punto 3
------------------------------------------
IL CODICE
Inserisco 2 versioni del codice
1)
Il CODICE 1: è la versione di base, non inserisce alcun codice html se nessun dato viene inserito (e fino qui andrebbe bene), MA INSERISCE TUTTI I SELETTORI ANCHE QUELLI VUOTI nel caso venga inserito uno solo dei due dati.
Questo accade ovviamente perchè non ho inserito la struttura di controllo interna per ogni coppia che contiene il custom field <dt><dd>, lo inserisco solo per mostrare da dove sono partito.
2)
il CODICE 2: è un tentativo di modifica del codice 1: Non funziona (non da errore ma inserisce il codice vuoto senza dati anche se vengono inseriti). E' modificato inserendo le strutture di controllo che servono per le coppie <dt><dd> che devono comparire appunto solo se viene inserito il loro dato.
Non so se può essere utile per prendere spunto, per "mischiare" la versione CODICE 1 (che funziona almeno quando non c'è alcun dato inserito non inserendo alcun codice) con questa versione..bho
======================================================================================
CODICE 1
Questo codice è incompleto, perchè manca un'ulteriore struttura di controllo in ogni coppia <dt><dd> (per fare in modo appunto che venga stampato il codice solo del dato/i inserito/i)
In pratica il seguente codice funziona per metà, se non è inserito nessun dato NON inserisce nessun codice html (come voglio io).
Però se per esempio inserisco solo il dato di start-date mi inserisce anche il codice <dt><dd> di end-date, ovviamente vuoto
Inserisce la dicitura <dt>END DATE</dt> e il relativo <dd></dd> vuoto
Non so se può essere un punto di partenza (per poi completarlo con le ulteriori strutture di controllo che servono in ogni coppia <dt><dd>, come mostrerò nell'altra versione di codice 2 sotto)
<?php
$showDates = false;
$showDates = $showDates || (isset($myCustomFields['start-date']) and !empty($myCustomFields['start-date']));
$showDates = $showDates || (isset($myCustomFields['end-date']) and !empty($myCustomFields['end-date']));
if($showDates){ ?>
<div id="contenitore-generale">
<h2>TITOLO DEL BOX</h2>
<p>testo descrittivo..</p>
<dl>
<dt>START DATE</dt>
<dd><?php echo $myCustomFields['start-date']; ?></dd>
<dt>END DATE</dt>
<dd><?php echo $myCustomFields['end-date']; ?></dd>
</dl>
</div>
<?php } ?>
======================================================================================
CODICE 2
Come accennato questo codice contiene le strutture di controllo interne per fare in modo che tutto il div contenitore, <h2>, <p> e le coppie <dt><dd> vengano visualizzate solo se inserito il loro valore.
NON FUNZIONA, nel senso che non restituisce errore ma stampa il div contenitore generale, <h2> e <p> sempre (anche se nessun dato viene inserito) e non mostra i dati se inseriti (sia che venga inserito un solo dato o entrambi, non li mostra mai!)
NOTA BENE!
1) Rispetto a CODICE 1, cambiano le prime righe, il nome delle variabili ecc.
2) Ho provato anche a modificare gli if interni cancellando i relativi
$params->get('start-date') &&
$params->get('end-date') &&
ma niente da fare, si comporta allo stesso modo
<?php
$showStartDate = isset($myCustomFields['start-date']) and !empty($myCustomFields['start-date']);
$showEndDate = isset($myCustomFields['end-date']) and !empty($myCustomFields['end-date']);
$showDates = $showStartDate || $showEndDate;
if($showDates){ ?>
<div id="contenitore-generale">
<h2>TITOLO DEL BOX</h2>
<p>testo descrittivo..</p>
<dl>
<?php if ($params->get('start-date') && $showStartDate) : ?>
<dt>START DATE</dt>
<dd>
<?php echo $myCustomFields['start-date']; ?>
</dd>
<?php endif; ?>
<?php if ($params->get('end-date') && $showEndDate) : ?>
<dt>END DATE</dt>
<dd>
<?php echo $myCustomFields['end-date']; ?>
</dd>
<?php endif; ?>
</dl>
</div>
<?php } ?>
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
Grazie davvero mille a chiunque voglia darmi una mano, un saluto al forum.