对于Joomla开发来说,还是小学生,最近做了几个相关程序,在文章列表里遇到点问题。就是文章列表中的文章需要点击标题找开详情页面,在如何生成url的问题上,费了点劲。目前所知道的解决办法如下:
我的程序是一个模块,用来查询指定分类下的文章,生成一个列表,显示在首页上。列表中记录数是可以指定的。
首先,要能获得文章的ID。这个通过指定的文章分类来查询。
然后,通过得到的文章的信息,来生成正确的URL。
这一步,网上搜出来的答案都是这样的:
JRoute::_('index.php?option=com_content&view=article&id='.$article->id)
下面无数个评论说问题解决了,非常圆满。
可问题是,在我这里没有解决,具体表现是,某些文章正常,部分文章提示500,或是文章能打开,但是程序里提示找不到菜单,也就是没办法指定这个文章所关系的菜单。
500这个问题肯定得解决,疯狂搜索了一翻,没用,网上只有这一个结果。
好吧,自己研究。
现在研究出来,代码要这样写:
JRoute::_('index.php?option=com_content&view=article&id='.$article->id.":".$article->alias."&catid=".$article->catid."&Itemid=".$mid)
这里解释一下,文章的url需要传4个参数:文章ID,文章别名,文章分类ID,对应的菜单的ID ($mid)。
先说option,这是说显示文章需要用的“组件” com_content,指定view为article。com_content 组件能做很多事,显示文章列表 和显示单篇文章它都能做,所以这里指定为显示文章。
参数里,文章ID好理解,文章别名是用来在友好的的URL里显示用的。文章分类ID和 对应的菜单的ID这两个,500错误就是这两个参数引起的。具体是哪个还没研究出来,因为根据环境不同,结果也不同,有时候在二级目录里会500,有时候在首页就500了,非常郁闷。
获取对应菜单ID这个自己出个办法,代码如下:
public function getArticleItemid($catid, $language){
$id = false;
$db = JFactory::getDbo();
$query='SELECT * FROM #__menu WHERE published=1 AND link LIKE "%id='.$catid.'" AND language="'.$language.'" ';
$db->setQuery($query);
$rows = $db->loadObjectList();
if(count($rows)>0){
$row = $rows[0];
$id = $row->id;
}
return $id;
}
根据不同环境做对应修改就行了。起码我的joomla里用这个方法能很方便查出文章对应的 Itemid。
最后说下我的模块。
需求是在首页,显示不同的小豆腐块,每个豆腐块里显示不同的分类下面的文章。个数自己指定,根据区域的大小。
那么我的模块就需要能选择指定的分类,这样这个分类下的文章就好查出来了。
然后要指定一个菜单项,这个用在区块上的“more”链接。
列表可以指定排序规则。
功能就这么多。