我正在尝试在Joomla的模板中创建一个框!这将显示所有关键字并将其链接到相应的搜索页面。我有一个菜单项集,但是,我不想将菜单项硬编码到模板中,所以我想使用JRoute对象来生成SEF网址。
我正在使用此功能:
JRoute::_('index.php?option=com_search&searchword='.$keyword);
或者这个:
JRoute::_('index.php?option=com_search&view=search&searchword='.$keyword);
然而,这会产生这样的网址:
/component/search/?searchword=africa
什么时候应该创建一个这样的搜索网址:
/searchmenuitem?searchword=africa
我在网上搜索过,并没有找到解决这个问题的方法。任何想法都将不胜感激。
好的,所以有一些额外的信息。我只是在尝试从com_content中的模板路由URL时遇到问题。如果我尝试从com_search中的模板路由url,一切都很完美。那么,com_content是什么导致它无法正常工作?
谢谢! 大卫
答案 0 :(得分:4)
在joomla管理页面中,转到您为搜索结果页面选择的菜单项,并获取该菜单项(itemId)的ID。
比你可以尝试使用:
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(多语言网站需要这种方法)。如果你想要它,请告诉我。
<强> EDIT2:强> 这是:
$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 :(得分:1)
我使用这种方法获取特定组件和视图的菜单项ID
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
function 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来获取id。只需搜索菜单对象。
答案 2 :(得分:0)
尝试在joomla后端创建新菜单,例如“hidden-menu&#39;”。它永远不会出现在前面。但它会被JRoute
使用然后在此菜单中添加名为&#39; searchmenuitem&#39;的新菜单项。链接到com_search
。就这些。现在你可以打电话了
JRoute::_('index.php?option=com_search&view=search&searchword=asdsadasdsa');
它将被转换为此
/searchmenuitem.html?searchword=asdsadasdsa