关于模块只在文章列表页面显示的问题

我觉得所有玩Joomla的人都碰到过这个问题:一个模块,你只想让它在文章列表页面显示,但是因为文章页面继承了文章列表页面的itemid,结果这个模块在文章页面也显示了。Joomla的文档说我们可以为每篇文章创建一个隐藏的菜单项,这样模块就不会显示在文章页面了。我想说这是bullshit。如果我有几百篇文章,难道我还要一个一个去创建隐藏菜单项吗?而且,用这种方法的话,导航就只会显示成“首页>文章标题”,而不是理想中的”首页>分类>文章“。
 
现在3.8.2已经出来了,我想问一下Joomla对于这个问题有没有什么好的解决办法没有?我知道Module anywhere可以用,但是难道这么普遍的问题Joomla自己就没有一个好的解决办法吗?
已邀请:

admin - Joomla发烧友,灌篮高手粉丝

赞同来自:

你好,首先我很吃惊你能提出如此深刻的问题。这个问题的确是存在的,并且和你描述的一样,给文章创建隐藏菜单是不切实际的。
 
我们可以讨论一下这个问题的实质:
 
在joomla系统中,菜单项是唯一能够确定页面的标志,并且页面必须有这个标志,也就是说每一个页面必须有一个菜单项,如果没有,系统会依据路由规则计算一个最可能的菜单项。比如:单篇文章如果没有关联菜单项,那么最理想的应该与之关联的就是其分类的菜单项了。这就是为什么文章详情页面会继承分类页面的菜单项的原因了。
 
当菜单项确定了,那么几乎我们可以对这个页面为所欲为了,菜单项 可以分配模板风格(控制页面外观),菜单项可以关联模块(控制页面内容),菜单项可以决定URL(控制页面URL),最理想情况下就是每一个页面都有一个独立的菜单项,这样你可以完全控制网站的每一个页面。但实际上,很少有人傻到给每一个页面创建一个菜单项,因为菜单项关联的内容太多了,最终会导致维护的噩梦。
 
那么问题来了,如何解决这个问题?
 
这个问题的根治需要joomla改进核心,增加更多模块的显示选项,而不仅仅是和菜单项关联。(最近官方似乎已经有所动作了)
另外,模板的设计者是可以解决问题的。在设计模板的时候,开发者应该提供一些位置只在某一些视图上显示。比如在(category视图:文章列表,article视图 文章详情),这在模板的开发中是可以轻松实现的。但很遗憾,市面上很少有模板支持这种功能。
 
如果你懂PHP代码,那么解决起来就很简单了。找到定义位置的地方,增加如下的判断
$app = JFactory::getApplication();
$view = $app->input->get("view",'','CMD');
if($view=="article") { 当然这里依据具体的需求
//定义模块 <jdoc:include type="modules" name="banner" style="xhtml" />
}
这种解决方案我感觉是最干净。我们经常在项目中使用。
 
另外从使用者的方面也是可以解决这个问题的。使用CSS来进行显示控制,这个Joomla可以方便的做到。
核心的思想就是在文章列表页面 display:block  。在文章详情页面 display:none
 
那么如何确定文章列表页面和文章详情页面呢?在模板的设计中,我们一般会将当前的视图 作为一个类放到body标签上,通过body标签上不同的类就可以搞定了。具体请在chrome或者firefox浏览器下审查元素即可看到

joomer8years

赞同来自:

这些方法我也都在用。CSS方法会使页面有冗余加载,改模板的Index.php也有点不爽。我就是对Joomla有点怒气,这么简单而且普遍的问题都不想办法为用户解决,难怪很多人都转投wordpress。
 
事实上,我面对的问题还有点更加复杂:我用的是RocketTheme的Gantry5框架的模板,在分类页面用rokSprocket模块显示文章列表,然后我希望进入这些文章的内容页面后,面包屑导航栏能正确显示“首页>分类>文章”。 我发现就是这么个简单的需求即使用上Module anywhere都很难实现,好像不用CSS/JAVASCRIPT就不行,必须得用CSS隐藏某个区块,或者得用javascript动态修改导航栏。不知道楼上有没有什么好办法(最好不用写code)。

admin - Joomla发烧友,灌篮高手粉丝

赞同来自:

更加客观的来说,这个问题应该由模板的设计者来解决。
 
如果你不想写代码,那么你可以尝试使用模板风格来解决。首先为列表页创建一个风格,这个风格存在sidebar这个模块位置,然后将上面的风格复制一份作为文章详情页风格,然后将sidebar这个模块位置在本风格中去掉。这样你就可以在文章列表页出现sidebar,在文章详情页不出现了。
 
那么这样一来,就又有问题出现了,如何将两种风格应用上去。首先列表页面的风格是很容易的,因为你肯定会为列表页新建一个菜单项,在这里就可以指派风格了。 文章详情页的风格该如何分配。因为我是程序员,习惯用代码来搞定,不过似乎没有更好的折中方案了
 
有时间的话,我可以为这个需求开发一个插件,看看能否解决。

joomer8years

赞同来自:

对啊,重点就是文章详情页默认是继承列表页的风格的。

joomer8years

赞同来自:

我决定创建一个分类的隐藏菜单项,然后在文章页面用javascript 修改面包屑导航的链接

要回复问题请先登录注册