Joomla.it Forum

Non solo Joomla... => Sviluppo => : .Andrea S. 06 Oct 2008, 16:57:21

: [Risolto] Richiamare plug-in da moduli [joomla 1.5]
: .Andrea S. 06 Oct 2008, 16:57:21
Ciao,

Sto svliluppando un modulo per 1.5 ma sto impazzendo perchè vorrei far si che il plug-in loadmodule funzionasse anche nel mio modulo.
Ho trovato questa (http://docs.joomla.org/Tutorial:Using_plugins_in_your_own_extension) pagina in docs.joomla.org che recita:
To activate the plugins for your addon, you just have to use the following line of code:
:
$result = $mainframe->triggerEvent( 'onSomething', $param );
Ma non riesco proprio a farlo funzionare.
Mi potete dare una mano per favore?
Grazie mille
: Re: Richiamare plug-in da moduli [joomla 1.5]
: copesc 06 Oct 2008, 20:34:16


Usi MVC, giusto?

Nella View, nel file view.html.php metti, oltre al resto,

// carica il plugin
$import = JPluginHelper::importPlugin( 'categoria-del-plugin', $row->element );
$dispatcher =& JDispatcher::getInstance();
$title = $dispatcher->trigger( 'onRenderTitle', array() );
$this->assignRef('title', $title);
parent::display($tpl);


Sempre nella view, in tmpl/default.php, hai a disposizione il valore che hai in $title e vi accedi così:

$this->title[$i]

Il plugin deve avere una funzione

function onRenderTitle() {
   return "titolo";
}

So che non sono stato chiaro  ::)
: Re: Richiamare plug-in da moduli [joomla 1.5]
: .Andrea S. 06 Oct 2008, 21:05:35
intanto grazie per la risposta!

no non uso MVC, pensavo fosse per i componenti, ad ogni modo non sono a quei livelli di sviluppo  :(

domanda:
loadmodule -> categoria "content" -> giusto?

title -> devo sostiturlo con il nome del plug-in?
Mi sa che non ho capito molto  :'(
 :)
: Re: Richiamare plug-in da moduli [joomla 1.5]
: copesc 06 Oct 2008, 21:45:42
Scusa Andrea mi è sfuggito il fatto che è un modulo.. e tra le altre cose ho pure mal capito la domanda  ::)

La linea 17 del plugin loadmodule dice

$mainframe->registerEvent( 'onPrepareContent', 'plgContentLoadModule' );

In pratica la funzione plgContentLoadModule, che effettivamente carica il modulo, viene richiamata quando è generato l'evento onPrepareContent, ovvero prima ancora che venga generato alcun output.

Premetto che non ho mai provato a fare quello che ti dico ora, ma potresti creare un plugin duplicando loadmodule, ed al posto di

$mainframe->registerEvent( 'onPrepareContent', 'plgContentLoadModule' );

inserisci

$mainframe->registerEvent( 'onQuandoVoglioIo', 'plgContentLoadModule' );

In questo modo il plugin viene richiamato quando tu emetto l'evento onQuandoVoglioIo:

/*
 * Process the prepare content plugins
 */
JPluginHelper::importPlugin('content');
      $results = $dispatcher->trigger('onQuandoVoglioIo', array ());


Dovresti però controllare i parametri che passi.. in modo da caricare la posizione che vuoi tu. Oppure settare la posizione da caricare direttamente nel tuo plugin "copia di loadmodule"

..come al solito spiegarlo è complicato!
: Re: Richiamare plug-in da moduli [joomla 1.5]
: .Andrea S. 07 Oct 2008, 09:53:24
Flavio grazie per la pazienza, ho capito qualcosa di più ma mi sa che ti sto facendo impazzire perchè mi sono spiegato male.

il modulo al quale sto lavorando permette di inserire del testo e visualizzarlo.

Io vorrei far in modo che se si inserisce il classico
:
{loadposition user1} venissero visualizzati i moduli in quella posizione. Ovvero vorrei far in modo che il/i plug-in fosse disponibili anche nel mio modulo.

Dalla pagina che ho linkato nel primo post mi sembrava estremamente facile, ma evidentemente mi sfugge qualcosa.

Avevo visto che il plug-in per il richiamo dei moduli conteneva
:
$mainframe->registerEvent( 'onPrepareContent', 'plgContentLoadModule' ); e infatti avevo provato a usare
:
$result = $mainframe->triggerEvent( 'onPrepareContent');nel codice del mio modulo, (ho levato $param in quanto diceva che era opzionale), ma il massimo che sono riuscito ad ottenere è un "array".
Spero di essere stato un po più chiaro e scusa ancora per l'incomprensione.  ;)

: Re: Richiamare plug-in da moduli [joomla 1.5]
: copesc 07 Oct 2008, 10:50:54
Se guardi il codice del plugin loadmodule, vedi che alla linea 34 c'è

$regex = '/{loadposition\s*.*?}/i';

e poi

preg_match_all( $regex, $row->text, $matches );

Ovvero in $row->text dovresti inserire il testo pubblicato dal tuo modulo, così che il plugin loadmodule lo analizzi ed
inserisca i moduli che vuoi visualizzare.

Prova a fare così, nel modulo inserisci il codice

$row->text = $testoGeneratoNelTuoModulo;
$result = $mainframe->triggerEvent( 'onPrepareContent', $row);

Il risultato dovrebbe essere il nuovo testo, comprensivo dei moduli presenti nella posizione user1 che hai indicato di caricare.
: Re: Richiamare plug-in da moduli [joomla 1.5]
: .Andrea S. 07 Oct 2008, 11:40:00
ottengo un "Array"

Il codice è questo:
:
// carica il plugin
$row->text = $modulepos;
$result = $mainframe->triggerEvent( 'onPrepareContent', $row);
echo "$result";
dove $modulepos è semplicemente
:
{loadposition user8}
: Re: Richiamare plug-in da moduli [joomla 1.5]
: copesc 07 Oct 2008, 12:50:53

prova

$row->text = $output_modulo; //comprensivo di {load ecc}
$result = $mainframe->triggerEvent('onPrepareContent', $row);


L'array dovrebbe contenere l'output del plugin..

$result[0]
: Re: [Risolto] Richiamare plug-in da moduli [joomla 1.5]
: .Andrea S. 07 Oct 2008, 15:03:52
Preso dalla disperazione ho preso un modulo che faceva questo e ho copiato!
Non chiedetemi quindi come sia esattamente la soluzione  ;D

Flavio Grazie grazie grazie per la pazienza  :)
: Re: [Risolto] Richiamare plug-in da moduli [joomla 1.5]
: copesc 07 Oct 2008, 18:58:52
Preso dalla disperazione ho preso un modulo che faceva questo e ho copiato!

Bene, hai risolto!