Как вы используете JRoute в Joomla для перехода к пункту меню поиска? - PullRequest
4 голосов
/ 27 июля 2011

Я пытаюсь создать коробку в шаблоне в Joomla!это отобразит все ключевые слова и свяжет их с соответствующей страницей поиска.У меня установлен пункт меню, однако я не хочу жестко кодировать этот пункт меню в шаблоне, поэтому я хочу использовать объект JRoute для генерации URL SEF.

Я использую эту функцию:

JRoute::_('index.php?option=com_search&searchword='.$keyword);

или это:

JRoute::_('index.php?option=com_search&view=search&searchword='.$keyword);

однако, это генерирует URL-адрес, подобный следующему:

/component/search/?searchword=africa

, когда необходимо создать URL-адрес для поиска, подобный этому:

/searchmenuitem?searchword=africa

Я много раз искал в Интернете и не нашел решения этой проблемы.Любые идеи будут с благодарностью.

Хорошо, поэтому некоторая дополнительная информация для вас .. Я испытываю проблему только при попытке перенаправить URL-адрес из шаблона в com_content.Если я пытаюсь направить URL из шаблона в com_search, все работает отлично.Итак, что же такого в com_content, который заставляет это работать неправильно?

спасибо!Дэвид

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

На странице администрирования joomla перейдите к пункту меню, выбранному вами для страницы результатов поиска, и получите идентификатор этого элемента меню (itemId).

Чем вы можете попробовать:

JRoute::_('index.php?option=com_search&view=search&Itemid=256&searchword=asdsadasdsa');

или даже

JRoute::_('index.php?Itemid=256&searchword=asdsadasdsa');

оба должны привести к: /searchmenuitem.html?searchword=asdsadasdsa

РЕДАКТИРОВАТЬ: Чтобы сделать его более комфортным, вы можете добавить itemId в качестве параметра кВаш шаблон.

Есть еще один способ, где вы можете получить itemId из базы данных (этот метод требуется на многоязычных веб-сайтах).Дайте мне знать, если хотите.

РЕДАКТИРОВАТЬ2: Вот оно:

$db   =& JFactory::getDBO();
$lang =& JFactory::getLanguage()->getTag();
$uri  = 'index.php?option=com_search&view=search';

$db->setQuery('SELECT id FROM #__menu WHERE link LIKE '. $db->Quote( $uri .'%' ) .' AND language='. $db->Quote($lang) .' LIMIT 1' );

$itemId = ($db->getErrorNum())? 0 : intval($db->loadResult());
1 голос
/ 12 января 2012

Я использую этот метод для получения идентификатора пункта меню определенного компонента и просмотра

 function getSearchItemId() {

        $menu = &JSite::getMenu();
        $component = &JComponentHelper::getComponent('com_search');
        //get only com_search menu items
            $items  = $menu->getItems('componentid', $component->id);

        foreach ($items as $item) {
            if (isset($item->query['view']) && $item->query['view'] === 'search') {
                        return $item->id;

                    }
        }

        return false;

        }

Затем я использую этот метод для получения функции sef url

getRouteUrl ($ route) {

    jimport('joomla.application.router');

    // Get the global site router.
    $config = &JFactory::getConfig();
    $router = JRouter::getInstance('site');
    $router->setMode($config->getValue('sef', 1));

    $uri    = &$router->build($url);
    $path   = $uri->toString(array('path', 'query', 'fragment'));

    return $path;
}

Это просто работает в любом шаблоне.

используйте вот так

$itemid = getSearchItemId();

//returns valid sef url
$url = getRouteUrl('index.php?Itemid='.$itemid);

Вам действительно не нужно выполнять sql в таблице меню, чтобы получитьидентификаторы.Просто найдите объект меню.

0 голосов
/ 27 июля 2011

Попробуйте создать новое меню в бэкэнде joomla, которое называется, например, «скрытое меню».Это никогда не будет показано спереди.Но он будет использоваться JRoute Затем добавьте в это меню новый пункт меню под названием 'searchmenuitem' со ссылкой на com_search.Это все.Теперь вы можете позвонить

JRoute::_('index.php?option=com_search&view=search&searchword=asdsadasdsa');

, и он будет переведен в этот

/searchmenuitem.html?searchword=asdsadasdsa
...