it-swarm-tr.com

Joomla 2.5 SEF ve JRequest

(Bu soruyu Yığın Taşması'ndan taşıdı)

Joomla 2.5 çerçevesine dayanan bir müşterinin web sitesinde çalışıyorum. SEF kapalıyken (yerleşik Joomla sürümünde) URL şudur

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

Kullanıcının bir eklentisi var, bu eklentinin yalnızca CMGroupbuying bileşeni kullanımdayken tetiklendiğinden emin olmak için bir eklenti oluşturdum

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

SEF kapalıyken, bu güzel çalışıyor. Ancak SEF'yi etkinleştirdiğimde URL

http://(domain)/the-deals

ve algılama komut dosyası artık joomla artık Request :: getCmd ('option') görmediği için çalışmayı durdurur; Dürüst olmak gerekirse com_cmgroupbuying eşit olmak, getCmd tamamen işe yaramaz hale getirir gibi beni uçuruyor. Diğer prople'ın bu kısımda acı çektiğini gördüm ama kesin bir düzeltme bulamadım

Herkes joomla kullanmak için bu bilgileri tutmak için DEFAULT htaccess hatası bazı ekstra satırları tarafından, Joomla bu başarısızlığı durdurmak için bir çözüm sunabilir.

Alternatif bir çözüm, bunu yapan bir şey bulamadım, ancak eklentiyi sadece bir modülle yapabileceğiniz gibi belirli menü öğeleriyle sınırlamaktır.

DÜZENLE

Bu eklentinin tam kodudur. Bu, aramalar için tüm ajanların toplu bir listesi olduğu için yardımcıyı dahil etmedim.

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

Bu, temelde bir işlevi olan değişikliğim, diğer tüm sayfaların mobil şablonuna müdahale ettiği için seçenek = com_cmgroupbuying KULLANMAYAN HERHANGİ bir sayfada eklenti yüklemesini durdurur. Daha önce de belirtildiği gibi, SEF kapatıldığında güzel çalışıyor.

2
MOLEDesign

Hangi eklenti etkinliğini kullandığınızı sorabilir miyim? Çünkü yönlendirme tamamlandıktan sonra kodunuz iyi çalışmalıdır.

Yönlendirme sırasında Joomla URL'yi ayrıştırır ve bunları dahili olarak SEF olmayan bir URL ile eşleştirir. Hangi size seçenek, Itemid ve bu şeyler alacak.

1
Bakual