Joomla.it Forum
Non solo Joomla... => Sviluppo => : alexdi 05 Feb 2012, 00:05:36
-
Volevo realizzare un Plugin che intervenisse nel caso si verificassero gli eventi in oggetto (joomla 1.7.2 e virtuemart 2.0).
Ho dato un' occhiata in giro ed in particolare su http://dev.virtuemart.net/projects/virtuemart/wiki/Plugin_system (http://dev.virtuemart.net/projects/virtuemart/wiki/Plugin_system) con scarsissimi risultati.
Allora, all' interno di un evento di sistema di joomla, ho inserito il seguente codice di prova :
.....
$option = JRequest::getVar('option');
$virtuemart_product_id = JRequest::getVar('virtuemart_product_id',null);
$session = JFactory::getSession();
$appqueue = $session->get('application.queue');
$action = $appqueue[0]['type'];
.......
Sembrava funzionare , nel senso che, $virtuemart_product_id contiene l' id prodotto, $option contiene "com_virtuemart" ed $action contiene "save". Utilizzo quindi questa combinazione per dire che si sta salvando o modificando un prodotto virtuemart.
La cosa stranissima però e che, se dalla videata del prodotto si preme il bottone "salva" tutto ok, viceversa se si preme il bottone "salva e chiudi", $virtuemart_product_id è null , nonostante sia comunque presente nel link relativo al bottone salva e chiudi.
Non lo trovo neanche nelle variabili globali ne con le api JURI.
Boh, forse non sto percorrendo nemmeno la strada giusta ....
-
...non mi ispira molto però , facendo un pò di prove, sembra funzionare.......
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );
class plgSystemExample extends JPlugin
{
/**
* Constructor.
*
* @access protected
* @param object $subject The object to observe
* @param array $config An array that holds the plugin configuration
* @since 1.0
*/
public function __construct( &$subject, $config )
{
parent::__construct( $subject, $config );
// Do some extra initialisation in this constructor if required
}
/**
* Do something onAfterRoute
*/
function onAfterRoute()
{
//ricavo id prodotto che si sta modificando/cancellando
$session =& JFactory::getSession();
$id = JRequest::getVar('virtuemart_product_id');
if($id || $id == '0'){//se id=0 si sta creando un nuovo prodotto...
$session->set('my_product_id', $id);
}
}
function onBeforeRender()
{
$session =& JFactory::getSession();
$data = $session->get('application.queue');
$type = $data[0][type];
$option = JRequest::getVar('option');
$view = JRequest::getVar('view');
$id = $session->get('my_product_id');//ricavo id dalla variabile di sessione
$session->clear('my_product_id/');//rimuovo la variabile di sessione
if ($type == 'save' && $option == 'com_virtuemart' && $view == 'product')
{
if(!$id)//prodotto appena creato, ricava id dalla tabella
{
$db = JFactory::getDbo();
$db->setQuery('SELECT MAX(virtuemart_product_id) FROM #__virtuemart_products');
$id = $db->loadResult();
}
//todo: elaboro l' id dell' ultimo prodotto virtuemart modificato/inserito
echo '';
return;
}
//caso richiesta rimozione prodotto
if ($type == 'remove' && $option == 'com_virtuemart' && $view == 'product')
{
foreach ($id as $value) {
//todo: elaboro il/gli id del/dei prodotto/i virtuemart romosso/i
}
}
}
}
?>