(Migration de cette question depuis Stack Overflow)
Je travaille sur le site Web d'un client basé sur le framework Joomla 2.5. Lorsque SEF est désactivé (la version intégrée de Joomla), l’URL est la suivante:
http://(domain)/index.php?option=com_cmgroupbuying&view=alldeals&Itemid=424
L'utilisateur a un plugin, j'ai intégré la ligne dans un plugin pour s'assurer que ce plugin ne se déclenche que lorsque le composant CMGroupbuying est en cours d'utilisation
$component = JRequest::getCmd('option');
if($component =='com_cmgroupbuying')
{ etc etc }
Si SEF est désactivé, cela fonctionne à merveille. Cependant, lorsque j'active SEF, l'URL se transforme en
http://(domain)/the-deals
et le script de détection cesse de fonctionner car joomla ne voit plus plus Request :: getCmd ('option'); être honnête avec com_cmgroupbuying, ce qui, pour être honnête, m'emporte car cela rend getCmd totalement inutile. J'ai vu d'autres personnes en souffrir dans la pièce, mais je n'ai trouvé aucune solution définitive
Quelqu'un peut-il proposer une solution pour mettre fin à cet échec de Joomla, soit en intégrant des lignes supplémentaires dans l'erreur DEFAULT htaccess afin de conserver ces informations pour que joomla puisse les utiliser?.
Une solution alternative, bien que je n’aie rien trouvé de tel, consiste à limiter le plug-in à certains éléments de menu, comme vous pouvez le faire avec un module.
MODIFIER
C'est le code complet du plugin. Je n'ai pas inclus l'aide, car il ne s'agit que d'une liste de masse de tous les agents de recherche.
<?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;
} } ?>
Cela inclut mon altération, qui a essentiellement une fonction, arrête le chargement du plug-in sur TOUTE page qui n'utilise PAS l'option = com_cmgroupbuying car elle interfère avec le modèle de mobile de toutes les autres pages. Comme déjà indiqué, cela fonctionne à merveille lorsque SEF est désactivé.
Puis-je vous demander quel événement de plugin vous utilisez? Parce que votre code devrait fonctionner correctement une fois le routage terminé.
Pendant le routage, Joomla analyse l'URL et les mappe de manière interne vers une URL non SEF. Ce qui vous donnera l'option, Itemid et ce genre de choses.