ti-enxame.com

Joomla 2.5 SEF e JRequest

(Migrou esta pergunta do Stack Overflow)

Estou trabalhando no site de um cliente, que se baseia na estrutura do Joomla 2.5. Com o SEF desativado (a versão interna do Joomla), o URL é este

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

O usuário possui um plug-in, integrei a linha em um plug-in para garantir que esse plug-in seja acionado apenas quando o componente CMGroupbuying estiver em uso

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

Com o SEF desativado, isso funciona perfeitamente. No entanto, quando eu ativo o SEF, o URL se transforma em

http://(domain)/the-deals

e o script de detecção para de funcionar, já que o joomla não vê mais a Request :: getCmd ('option'); ser igual a com_cmgroupbuying que, para ser honesto, me impressiona, pois torna o getCmd totalmente inútil. Já vi outro prople sofrer com isso na parte, mas não encontrei nenhuma correção definitiva

Alguém pode oferecer uma solução para interromper essa falha do Joomla, seja por algumas linhas extras na falha DEFAULT htaccess, para reter essas informações para o joomla usar.

Uma solução alternativa, embora eu não tenha encontrado nada que faça isso, é limitar o plug-in a apenas determinados itens de menu, como você pode fazer com um módulo.

EDITAR

Este é o código completo do plug-in. Não incluí o ajudante, pois esta é apenas uma lista em massa de todos os agentes para pesquisas.

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

Isso inclui minha alteração, que basicamente tem uma função, interrompe o carregamento do plug-in em QUALQUER página que NÃO esteja usando a opção = com_cmgroupbuying, pois interfere no modelo móvel de todas as outras páginas. Como já foi dito, isso funciona perfeitamente quando o SEF está desativado.

2
MOLEDesign

Posso perguntar qual evento de plug-in você está usando? Porque seu código deve funcionar bem após a conclusão do roteamento.

Durante o roteamento, o Joomla analisa a URL e as mapeia internamente de volta para uma URL não SEF. O que lhe dará a opção, Itemid e essas coisas.

1
Bakual