it-swarm-id.com

Joomla 2.5 SEF dan JRequest

(Memigrasikan pertanyaan ini dari Stack Overflow)

Saya bekerja di situs web klien yang didasarkan pada kerangka kerja Joomla 2.5. Dengan SEF dimatikan (versi Joomla bawaan) URL adalah ini

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

Pengguna memiliki plugin, saya telah membuat plugin untuk memastikan bahwa plugin ini hanya menyala ketika komponen CMGroupbuying sedang digunakan

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

Dengan SEF dimatikan, ini bekerja dengan indah. Namun ketika saya mengaktifkan SEF URL berubah menjadi

http://(domain)/the-deals

dan skrip deteksi berhenti berfungsi sebagai joomla tidak lagi melihat Request :: getCmd ('option'); menjadi sama dengan com_cmgroupbuying yang jujur, membuat saya senang karena membuat getCmd sama sekali tidak berguna. Saya telah melihat prople lain menderita dengan ini di bagian tetapi tidak menemukan perbaikan yang pasti

Adakah yang bisa menawarkan solusi untuk menghentikan kegagalan Joomla ini, baik dengan beberapa baris tambahan dalam kesalahan htaccess DEFAULT untuk menyimpan informasi ini agar joomla dapat digunakan.

Solusi alternatif, walaupun saya belum menemukan apa pun yang melakukan hal ini, adalah membatasi plugin hanya untuk item menu tertentu seperti yang dapat Anda lakukan dengan modul.

EDIT

Ini adalah kode lengkap plugin. Saya belum memasukkan pembantu karena ini hanya daftar massa semua agen untuk pencarian.

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

Ini tidak termasuk perubahan saya, yang pada dasarnya memiliki satu fungsi, menghentikan pemuatan plugin pada halaman APA PUN yang TIDAK menggunakan opsi = com_cmgroupbuying karena mengganggu templat seluler semua halaman lainnya. Seperti yang telah dinyatakan, ini berfungsi dengan baik ketika SEF dimatikan.

2
MOLEDesign

Bolehkah saya bertanya acara plugin apa yang Anda gunakan? Karena kode Anda akan berfungsi dengan baik setelah perutean selesai.

Selama perutean, Joomla mem-parsing URL dan memetakannya secara internal kembali ke URL yang bukan SEF. Yang mana akan memberi Anda pilihan, Itemid dan yang lainnya.

1
Bakual