Joomla.it Forum

Non solo Joomla... => Sviluppo => : daniele.nyx 27 Aug 2013, 18:36:00

: Trigger delle azioni in batch su più articoli
: daniele.nyx 27 Aug 2013, 18:36:00
Ciao a tutti :)
Sono uno sviluppatore junior su piattaforme joomla e ho un problema con la creazione di un plugin su piattaforma Joomla 2.5.


Il mio intento è quello di creare un plugin di tipo "content" per monitorare una specifica categoria di articoli (specificata nei settings del plugin), ove per monitorare intendo intercettare la creazione (o l'aggiunta a seguito di spostamento) di articoli nella suddetta categoria. Inoltre sono sotto esame i cambi di stato da "non pubblicato" a "pubblicato".


Al momento riesco correttamente a intercettare:
- tramite l'evento "onContentAfterSave" il salvataggio di nuovi articoli o lo spostamento di un singolo articolo nella categoria monitorata tramite maschera di modifica articolo
- tramite l'evento "onContentChangeState" il cambio di stato a pubblicato di articoli dalla schermata di elenco articoli


PROBLEMA: Sorge un problema però se l'utenza cambia la categoria di uno o più articoli dalla lista degli articoli attraverso la selezione con le checkbox e azione "Seleziona una categoria da spostare/copiare" posta a fondo pagina, perché non ho evento che posso intercettare!


Come posso quindi porre un trigger a seguito di questa azione ed intervenire anche in quel caso?
Ringrazio in anticipo!
: Re:Trigger delle azioni in batch su più articoli
: mau_develop 27 Aug 2013, 21:42:02
ma da dove? lato admin?
: Re:Trigger delle azioni in batch su più articoli
: daniele.nyx 28 Aug 2013, 14:22:46
Yess, dalla gestione articoli:


(http://img5.imageshack.us/img5/5967/0mrq.png)
: Re:Trigger delle azioni in batch su più articoli
: mau_develop 28 Aug 2013, 15:49:18
credo che tu debba scrivere un trigger custom
http://techjoomla.com/joomla-development/adding-plugin-triggers-in-your-extensions-how-a-why.html

il metodo che usi dovrebbe essere in qs api
http://api.joomla.org/Joomla-Platform/Application/JModelAdmin.html
: Re:Trigger delle azioni in batch su più articoli
: daniele.nyx 28 Aug 2013, 17:36:31
Grazie M_W_C della risposta,

credi che io debba scatenare a mano un nuovo evento mettendo mano nel componente nativo di joomla (che in questo caso è com_content)? Non c'è nessun evento già predisposto?

Qualcuno sa dove posso trovare il codice relativo a quel form? Forse in questo modo posso vedere dal codice se qualche trigger viene scatenato già nativamente..

Grazie!
: Re:Trigger delle azioni in batch su più articoli
: mau_develop 28 Aug 2013, 18:24:53
Nelle api che ti ho linkato trovi la funzione che appartiene alla classe model admin quindi basta guardare li che cosa fa
: Re:Trigger delle azioni in batch su più articoli
: daniele.nyx 29 Aug 2013, 14:58:19
"batchMove" sembra essere la funzione di mio interesse e quella a cui dovrei "attaccarmi" per intercettare le cosa, solo che ho scoperto mio malgrado che questa viene chiamata nei componenti "modules", "banners", "contact", "menus" e "categories", niente componente "content"..

.. qualche suggerimento?
: Re:Trigger delle azioni in batch su più articoli
: mau_develop 29 Aug 2013, 15:34:17
è mvc per cui non c'è molto da cercare basta andare dove per definizione dovrebbero essere ovvero controller e model.
infatti se vai nel controller trovi il metodo per le operazioni batch che usa un metodo statico batch
: Re:Trigger delle azioni in batch su più articoli
: daniele.nyx 29 Aug 2013, 16:18:26
Ok, ho trovato tutto e seguito il giro.

La classe "ContentControllerArticle" recupera il model degli articoli tramite "getModel" (model che è di tipo "ContentModelArticle") e lo passa al metodo batch della classe parent (ovvero "JControllerForm"). Il metodo batch del parent altro non fa che chiamare il metodo batch del model con "$model->batch".

"ContentModelArticle" non contiene metodo batch e questo viene chiamato sul diretto parente, ovvero "JModelAdmin". In "JModelAdmin", all'interno del metodo "batch", si ha infine la chiamata a "batchMove" .

In tutto questo però non ho trovato la soluzione: non vi è trigger che viene scatenato durante il percorso!!
Gli unici trigger vengono chiamati da JModelAdmin in altri eventi, ovvero "event_before_delete", "event_after_delete", "event_change_state", "event_before_save" e "event_after_save".
Aiuto!