it-swarm-vi.com

Joomla 2.5 SEF và JRequest

(Đã di chuyển câu hỏi này từ Stack Overflow)

Tôi đang làm việc trên trang web của khách hàng dựa trên khung Joomla 2.5. Khi SEF bị tắt (phiên bản Joomla dựng sẵn), URL là đây

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

Người dùng có một plugin, tôi đã tích hợp sẵn một plugin để đảm bảo plugin này chỉ kích hoạt khi thành phần CMgroupbuying được sử dụng

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

Với SEF đã tắt, điều này hoạt động rất đẹp. Tuy nhiên, khi tôi kích hoạt SEF, URL sẽ biến thành

http://(domain)/the-deals

và tập lệnh phát hiện dừng hoạt động khi j Joomla không còn thấy Request :: getCmd ('tùy chọn'); bằng với com_cmgroupbuying mà thành thật mà nói, thổi tôi đi vì nó làm cho getCmd hoàn toàn vô dụng. Tôi đã thấy các prople khác phải chịu đựng điều này trong phần này nhưng không tìm thấy bất kỳ sửa chữa dứt khoát

Bất cứ ai cũng có thể đưa ra một giải pháp để ngăn chặn sự thất bại này của Joomla, bằng một số dòng bổ sung trong lỗi htaccess DEFAULT để giữ lại thông tin này cho j Joomla sử dụng.

Một giải pháp thay thế, mặc dù tôi không tìm thấy bất cứ điều gì làm điều này, là giới hạn plugin chỉ trong một số mục menu nhất định như bạn có thể làm với một mô-đun.

CHỈNH SỬA

Đây là mã đầy đủ của plugin. Tôi chưa bao gồm người trợ giúp vì đây chỉ là một danh sách đại chúng của tất cả các đại lý để tra cứu.

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

Điều này bao gồm sự thay đổi của tôi, về cơ bản có một chức năng, dừng tải plugin trên bất kỳ trang nào KHÔNG sử dụng tùy chọn = com_cmgroupbuying vì nó can thiệp vào mẫu di động của tất cả các trang khác. Như đã nêu, điều này hoạt động rất tốt khi tắt SEF.

2
MOLEDesign

Tôi có thể hỏi bạn sự kiện plugin nào bạn đang sử dụng không? Bởi vì mã của bạn sẽ hoạt động tốt sau khi định tuyến xong.

Trong quá trình định tuyến, Joomla phân tích cú pháp URL và ánh xạ chúng bên trong trở lại URL không phải SEF. Điều này sẽ giúp bạn có tùy chọn, Itemid và những thứ đó.

1
Bakual