web-dev-qa-db-ja.com

Joomla 2.5 SEFおよびJRequest

(この質問をStack Overflowから移行しました)

私はJoomla 2.5フレームワークに基づくクライアントのウェブサイトに取り組んでいます。 SEFがオフの場合(組み込みのJoomlaバージョン)、URLは次のとおりです

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

ユーザーがプラグインを持っている、コンポーネントCMGroupbuyingが使用されているときにのみこのプラグインが起動することを確認するために、プラグインにラインを組み込んだ

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

SEFをオフにすると、これは美しく機能します。ただし、SEFを有効にすると、URLは次のようになります

http://(domain)/the-deals

そして、検出スクリプトはjoomlaがRequest :: getCmd( 'option');を見なくなったため、動作を停止します。正直なところ、com_cmgroupbuyingに等しいので、getCmdがまったく役に立たなくなるので、私を驚かせます。他のプロパティが一部でこれに苦しんでいるのを見ましたが、決定的な修正は見つかりませんでした

Joomlaが使用するためにこの情報を保持するために、DEFAULT htaccessフォールトの追加の行のいずれかによって、Joomlaのこの障害を停止するための解決策を誰かが提供できますか?.

別の解決策は、これを行うものは何も見つかりませんでしたが、モジュールで実行できるように、プラグインを特定のメニュー項目のみに制限することです。

編集

これはプラグインの完全なコードです。これはルックアップ用のすべてのエージェントの単なるリストであるため、ヘルパーは含めていません。

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

これには、基本的に1つの機能を持つ他のすべてのページのモバイルテンプレートに干渉するため、option = com_cmgroupbuyingを使用していないページでプラグインのロードを停止する変更が含まれます。すでに述べたように、これはSEFがオフになっているときに美しく機能します。

2
MOLEDesign

使用しているプラ​​グインイベントを聞いてもいいですか。ルーティングが完了した後、コードは正常に動作するはずだからです。

ルーティング中に、JoomlaはURLを解析し、それらを内部的に非SEF URLにマップします。これにより、オプション、Itemidなどが表示されます。

1
Bakual