it-swarm-es.tech

Joomla 2.5 SEF y JRequest

(Migró esta pregunta desde Stack Overflow)

Estoy trabajando en el sitio web de un cliente que se basa en el marco Joomla 2.5. Con SEF desactivado (la versión incorporada de Joomla), la URL es esta

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

El usuario tiene un complemento, he incorporado en un complemento la línea para asegurarme de que este complemento solo se active cuando el componente CMGroupbuying esté en uso

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

Con SEF desactivado, esto funciona de maravilla. Sin embargo, cuando habilito SEF, la URL se convierte en

http://(domain)/the-deals

y el script de detección deja de funcionar ya que joomla ya no ve Request :: getCmd ('opción'); ser igual a com_cmgroupbuying, que para ser honesto, me sorprende, ya que hace que getCmd sea totalmente inútil. He visto a otras personas sufrir con esto en la parte, pero no encontré ninguna solución definitiva

¿Alguien puede ofrecer una solución para detener esta falla de Joomla, ya sea por algunas líneas adicionales en la falla htaccess DEFAULT para retener esta información para que joomla la use?.

Una solución alternativa, aunque no he encontrado nada que haga esto, es limitar el complemento solo a ciertos elementos de menú como puede hacer con un módulo.

EDITAR

Este es el código completo del complemento. No he incluido el ayudante, ya que esta es solo una lista masiva de todos los agentes para búsquedas.

<?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;
    } } ?>

Esto incluye mi alteración, que básicamente tiene una función, detener la carga del complemento en CUALQUIER página que NO esté usando la opción = com_cmgroupbuying ya que interfiere con la plantilla móvil de todas las otras páginas. Como ya se dijo, esto funciona maravillosamente cuando SEF está apagado.

2
MOLEDesign

¿Puedo preguntarle qué evento de complemento está utilizando? Porque su código debería funcionar bien después de que se realiza el enrutamiento.

Durante el enrutamiento, Joomla analiza la URL y la asigna internamente a una URL que no sea SEF. Lo que te dará la opción, Itemid y esas cosas.

1
Bakual