Joomla.it Forum
Non solo Joomla... => Sviluppo => : virtual 06 Dec 2014, 00:17:54
-
Ciao a tutti,
ho un problema relativo al passaggio del valore di un parametro di un modulo al template che utilizzo.
Mi spiego meglio.
Ho un modulo formato da soli due files:
pippo.xml
pippo.php
Nel file pippo.xml c’è una serie di parametri del modulo:
--------------------
<fields name="params">
<fieldset name="basic">
<field name="bgid" type="text" default="body" label="ID" description="description." ></field>
<field name="bglink2" type="text" default="" label="Link" description="type the link URL" ></field>
</field>
----------------------------
Quelllo che mi interessa è il secondo parametro: “bglink2”, che è un campo di testo.
Nel file pippo.php questo parametro viene richiamato da una variabile:
--------------------
// no direct access
defined('_JEXEC') or die('Restricted access');
//get the params
$hdbg_id = $params->get("bgid", "body");
$hdbg_bglink2 = $params->get("bglink2", "");
----------------------
Fin qui tutto bene.
Ora però io vorrrei utilizzare il valore di questo parametro “bglink2” nel file index.php del mio template, e precisamente qui:
-----------------
<div id="sfondocliccabile">
<a href="<?php echo $this->params->get( 'bglink2' ); ?>" target="_blank"><img src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/images/transparent.png" />[/url]
</div>
-------------------
Purtroppo così non funziona.
C’è un modo per passare i valori dei parametri presenti in un modulo al file index.php del template?
Grazie mille!
-
puoi usare JModuleHelper::getModule per ottenere l'oggetto modulo e poi accedere alla proprietà params dello stesso, ma secondo me stai sbagliando l'approccio: sevi usare i parametri del template o al limite le informazioni di menù per gestire il template. il template gestisce i moduli e non viceversa!
ciao,
marco
-
Ciao Marco, grazie per la risposta e anche per il consiglio, proverò poi ti farò sapere.
E' una situazione un po' al limite, mi servirebbe di accedere solo ad un parametro del modulo in questione, quindi ho cercato una scorciatoia :-)) anche se a volte, come si sa, le scorciatoie finiscono per portarti più lontano.
Potrei anche fare una query e recuperare il valore dal db volendo, ma mi sembra una soluzione poco elegante.
Comunque grazie e buon lavoro!
Marco.
-
Ciao Marco,
in Joomla! 3 puoi provare così:
<?php
$module = JModuleHelper::getModule('mod_tuomodulo', 'nome_tuomodulo');
$params = new JRegistry($module->params);
$tuoparametro = $params['tuoparametro'];
?>
cioè una cosa di questo tipo:
<?php
$module = JModuleHelper::getModule('mod_pippo', 'Pippo1');
$params = new JRegistry($module->params);
$bglink2= $params['bglink2'];
?>
Ci sono alcune criticità, sono d'accordo con mmleoni.
Nell'esempio sopra devi specificare anche il secondo argomento in getModule, cioè il nome dello specifico modulo, perché potrebbero esserci più moduli dello stesso tipo; se ometti il secondo argomento allora prende il primo tra tutti i moduli mod_pippo.
Attenzione: se il modulo selezionato è disattivato la cosa non funziona.
Spero di esserti stato utile. :)
Francesco
-
Ciao FDA,
grazie per il suggerimento!
-
@FDA ... hai passato un parametro al modulo
-
@steganova: giusto, grazie dell'osservazione. ;)
@virtual: piccola correzione. Non mi viene in mente niente se non estrarre il valore dalla stringa, ma dovrebbe esistere un modo più elegante. Ho provato così, un po' macchinoso ma va':
<?php
$module = JModuleHelper::getModule('mod_tuomodulo', 'nome_tuomodulo');
$params = $module->params;
$param = 'tuoparametro';
$textparam = '"' . $param . '":"';
$inizio = strpos($params,$textparam) + strlen($textparam);
$fine = strpos($params,'"',$inizio);
$valoreparam = substr($params,$inizio,$fine - $inizio);
?>
Devo sostituire i tuoi dati in mod_tuomodulo, nome_tuomodulo, tuoparametro (questo è bglink2).
In $params ti trovi la stringa con tutti i parametri e i valori. Ho ipotizzato che a te servisse un parametro con valore singolo, altrimenti i valori multipli li ritrovi all'interno di parentesi quadre e devi modificare l'estrazione dalla stringa includendo questo caso.
Fatemi sapere se ce l'abbiamo fatta e/o se esiste un modo più pratico per accedere al parametro non dal modulo. :)
-
dunque, io ho risolto così:
<?php $module = JModuleHelper::getModule('mod_tuomodulo');
$moduleParams = new JRegistry();
$moduleParams->loadString($module->params);
$param = $moduleParams->get('tuoparametro', 'defaultValue');
?>
poi basta richiamare $param dove serve:
<?php echo $param; ?>
anche il tuo @francesco funziona, grazie per la disponibilità.
-
Mi hai tolto le parole da bocca, stavo postando questo:
<?php
$module = JModuleHelper::getModule('mod_tuomodulo', 'nome_tuomodulo');
$params = new JRegistry();
$params->loadString($module->params);
$param = $params->get('tuoparametro');
?>
P.S. Quella della stringa oggettivamente non si poteva guardare. :D
-
è il bello della diretta!! :D