it-swarm.it

Joomla 2.5 SEF e JRequest

(Migrato questa domanda da StackTranslate.it)

Sto lavorando sul sito Web di un cliente basato sul framework Joomla 2.5. Con SEF disattivato (la versione integrata di Joomla) l'URL è questo

http://(domain)/index.php?option=com_cmgroupbuying&view=alldeals&Itemid=424

L'utente ha un plug-in, ho incorporato in un plug-in la riga per assicurarsi che questo plug-in si attivi solo quando il componente CMGroupbuying è in uso

$component = JRequest::getCmd('option'); 
if($component =='com_cmgroupbuying')
               { etc etc }

Con SEF disattivato, funziona perfettamente. Tuttavia, quando abilito SEF l'URL si trasforma in

http://(domain)/the-deals

e lo script di rilevamento smette di funzionare poiché joomla non vede più la richiesta :: getCmd ('opzione'); essendo uguale a com_cmgroupbuying che, a dire il vero, mi lascia senza fiato perché rende getCmd totalmente inutile. Ho visto altri prople soffrire di questo nella parte, ma non ho trovato alcuna soluzione definitiva

Qualcuno può offrire una soluzione per fermare questo fallimento di Joomla, sia con alcune righe extra nell'errore di accesso principale DEFAULT che conservare queste informazioni che Joomla può usare.

Una soluzione alternativa, anche se non ho trovato nulla che lo faccia, è limitare il plugin solo a determinate voci di menu come è possibile fare con un modulo.

MODIFICARE

Questo è il codice completo del plugin. Non ho incluso l'helper in quanto questo è solo un elenco di massa di tutti gli agenti per le ricerche.

<?php /**  * @package     CMMobileDetection plugin  * @copyright   Copyright (C) 2012-2013 CMExtension Team http://www.cmext.vn/  * @license     http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL  */

// No direct access defined('_JEXEC') or die;

jimport('joomla.plugin.plugin');

require_once 'helper.php';

class plgSystemCMMobileDetection extends JPlugin {
    public function onAfterInitialise()
    {
        if(JPATH_BASE != JPATH_ADMINISTRATOR)
        {
            $browser        = new Mobile_Detect();
            $mobileCookie   = JFactory::getApplication()->input->cookie->get('cmmobileRequestDesktop',
-1, 'int');
            $component      = JRequest::getVar('option');

            if(($browser->isMobile() || $browser->isTablet()) && ($mobileCookie == 0 || $mobileCookie == -1) && $component == 'com_cmgroupbuying')
            {
                $configuration  = $this->getConfiguration();
                $db             = JFactory::getDBO();
                $query          = "SELECT params FROM #__template_styles WHERE client_id = 0 AND template = ".$db->Quote($configuration['mobile_template'])." ORDER BY id LIMIT 1";
                $db->setQuery($query);
                $params         = $db->loadResult();

                if(empty($params))
                    $params = '{}';

                JFactory::getApplication()->setTemplate($configuration['mobile_template'], $params);
            }
        }
    }

    public function getConfiguration()
    {
        $db             = JFactory::getDBO();
        $query          = 'SELECT * FROM #__cmgroupbuying_configuration WHERE id = 1';
        $db->setQuery($query);
        $configuration  = $db->loadAssoc();

        if($db->getErrorNum())
        {
            //JError::raiseError(500, implode('<br />', $errors));
            return false;
        }

        return $configuration;
    } } ?>

Ciò include la mia modifica, che sostanzialmente ha una funzione, interrompe il caricamento del plug-in su QUALSIASI pagina che NON utilizza option = com_cmgroupbuying poiché interferisce con il modello mobile di tutte le altre pagine. Come già detto, questo funziona magnificamente quando SEF è spento.

2
MOLEDesign

Posso chiederti quale evento plugin stai usando? Perché il tuo codice dovrebbe funzionare correttamente dopo aver eseguito il routing.

Durante il routing, Joomla analizza l'URL e lo mappa internamente su un URL non SEF. Che ti darà l'opzione, Itemid e quella roba.

1
Bakual