Joomla.it Forum
Non solo Joomla... => Sviluppo => : 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!
-
ma da dove? lato admin?
-
Yess, dalla gestione articoli:
(http://img5.imageshack.us/img5/5967/0mrq.png)
-
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
-
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!
-
Nelle api che ti ho linkato trovi la funzione che appartiene alla classe model admin quindi basta guardare li che cosa fa
-
"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?
-
è 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
-
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!