你现在的位置:首页 > PHP网站建设知识库 > Joomla > 正文

如何使joomla“分类博客”成为Section页面中某分类下文章页面的默认呈现方式

Joomla开发中,Joomla 1.5,在类型为Section Layout的菜单项对应的页面里,当你点击该Section中某分类(Category)的标题后,将会进入该分类下的文章列表页面(Category List);但有时我们希望这个页面中的文章能以分类博客(Category Blog)作为默认的呈现方式,而不是系统默认的文章列表(Category List)方式。

针对这个需求,有三种解决方案;我们将分三个部分来分别探讨;每种解决方案均假设当前正在使用默认的rhuk_milkyway模板。

第一部分中,我们来看看如何在默认模板(rhuk_milkyway)中进行模板覆盖(overriding)来解决这个问题。这是最容易的解决方法,但弊端是,这种方法将导致将来再也无法在该站点中使用文章列表(Category List)方式来呈现某分类下的文章。

第二部分中,我们来学习如何复制一份默认模板并进行相应的修改。比起第一种方式,这样做可以保证将来仍然可以在站点中使用文章列表(Category List)方式来呈现某分类下的文章。

第三部分中,我们将在“Section Layout”类型的菜单项的设置中增加一个额外的参数设定,使你可以自由选择某Section下分类页面将以哪种方式呈现。

第一部分:在默认模板(rhuk_milkyway)中进行模板覆盖
关于模板覆盖,可以参见“Joomla文档中文翻译 - 如何通过模板覆盖的方式修改Joomla的系统输出”。
在模板中的html文件夹中创建名为“com_content”的文件夹,然后在“com_content”中创建名为“category”的文 件夹,最终的路径应该是这样的:Joomla根路径/templates/rhuk_milkyway/html/com_content /category
在Joomla根路径/components/com_content/views/category/tmpl中找到下面三个文件:
blog.php
blog_item.php
blog_links.php
将它们复制到我们之前创建的category文件夹中。
将这三个文件依此重命名为:
blog.php → default.php
blog_item.php → default_item.php
blog_links.php → default_links.php
现在,当你在某个类型为Section Layout的菜单项对应的页面里点击某个分类标题后,接下来的页面就会以分类博客的方式呈现了。如果你希望对这个分类博客页面进行进一步的设定,可以参见“Joomla文档中文翻译 - 如何控制Section中的分类列表(Category List)页面的呈现方式 ”。参考着这篇文章,我们就能够在Section Layout类型的菜单项设置里直接为该Section中的分类博客页面进行更具体的设定了。

第二部分:复制默认模板进行修改
正如前面提到的,使用第一种方式(在默认模板中进行模板覆盖)有一个很大的缺点,即会导致将来再也无法在该站点中使用分类文章列表(Category List)方式来呈现某分类下的文章。当然,如果你确定自己并不需要用文章列表的方式呈现页面,那么第一种方式对你来说就是简单可行的;反之,则需要使用下面将要介绍的稍微复杂一些的方式来解决问题了。
模板覆盖方式的一个重要特性就是他们可以只对那些指定的页面起作用,这使得模板覆盖具有很高的灵活性。在我们的示例中,我们可以新建一套模板,只用 于将分类文章列表模式修改为分类博客模式。因为我们仍然保留着原来的模板,那些使用原模板的页面不会被影响,所以我们将来仍可以使用分类文章列表方式来呈现文章页面。
我们可以按照下面的步骤去做:
复制当前正在使用的模板。关于模板复制,可以参见Tutorial:Create a copy of the MilkyWay Template。注意,我们不需要完成这篇教程中的最后三步(模板文件打包),除非你需要分享发布该模板。
将复制的模板重命名(例如“my_template”),按照第一部分中介绍的方式在这套新模板进行相应的模板覆盖操作。
到站点管理后台中,进入“扩展 → 模板管理”(Extensions → Template Manager),在模板列表中应该可以看到我们的新模板了。
点击新模板的名字,页面左侧会显示一个菜单项列表,用来选定将该模板分配绑定给哪些菜单项。
在该列表中选择你想要使用分类博客方式呈现文章的那些类型为Section Layout的菜单项。注意,如果该菜单项有类型为分类博客或分类文章列表的子菜单项,那么同样要将它们选中。
现在,当你在这个类型为Section Layout的菜单项对应的页面里点击某个分类标题后,接下来的页面就会以分类博客的方式呈现了;而且与第一种方式不同的是我们将来仍可以使用分类文章列表方式来呈现文章页面(除了在当前这个Section里)。

第三部分:增加控制呈现方式的参数设置

需要注意的是,最后这种解决方式需要进行“核心修改”,即是说,我们要对Joomla的核心系统文件进行修改,而不是之前使用的模板覆盖方式。“核心修改”方式会导致的问题就是当Joomla系统升级时,这些修改会被新的系统文件覆盖掉;所以要记得将我们修改后的文件进行备份,用于在将来升级之后保持这些修改。
找到下面这个文件并打开:
Joomla根路径/components/com_content/views/section/tmpl/default.xml
将下面这段代码添加到该文件中“spacer”参数的后面:
<param name="category_layout" type="list" default="list" label="Category Layout" 
description="PARAMSCATEGORYLAYOUT">
        <option value="default">Default</option>
        <option value="blog">Blog Layout</option>
</param>
接下来找到这个文件并打开:
Joomla根路径/components/com_content/views/section/view.html.php
找到下面这行代码:
$category->link = JRoute::_(ContentHelperRoute::getCategoryRoute($category->slug, 
$category->section).'&layout=default');
替换为:
$layout = $params->get('category_layout') ;
$category->link = JRoute::_(ContentHelperRoute::getCategoryRoute($category->slug, 
$category->section).'&layout='.$layout);
现在进入站点管理后台,在类型为Section Layout的菜单项设置中,会发现多出一个名为“Category Layout”的参数,你可以自由选择使用分类博客或分类文章列表的形式来展现该Section下的分类文章页面。搞定。