有没有办法只更改特定文章的模板?请注意,它应该可以在不将文章链接到任何菜单的情况下工作。
4 回答
如果您希望模板覆盖不依赖于菜单位置,那么将不同模板分配给菜单的标准 joomla 方式将不起作用。您将需要亲自动手并编写一些自定义代码。您需要使用 article_id 作为模板切换的触发器。
我在工作中做过类似的事情,但现在不记得这是如何实现的。找到代码后,我会在此处发布代码。
编辑:找到代码:)
您需要编辑文件 /includes/application.php,特别是 getTemplate() 方法。在此方法结束时,就在之前:
// Fallback template
if (!file_exists(JPATH_THEMES.DS.$template.DS.'index.php')) {
$template = 'rhuk_milkyway';
}
您可以添加应用自定义模板的条件,如下所示:
//CUSTOM TEMPLATE FOR THE ARTICLE 13
if (JRequest::getVar('id')=='13' && JRequest::getVar('option')=='com_content') {
$template = $custom_template_name;
}
这会将名称在 $custom_template_name 内的自定义模板应用于 id=13 的文章。您还可以使用它为组件应用不同的模板,就像我对 simplecaddy 所做的那样:
//TEMPLATE FOR SIMPLECADDY
if (JRequest::getVar('option')=='com_caddy'){
$template = 'shop';
}
正如布伦特所说,避免修改核心 Joomla 代码的诱惑!这样做可能会阻止您进行 Joomla 升级,因为您知道它会破坏您所做的核心更改。
除了“隐藏菜单项”技术(这很有用,但在某些情况下会破坏 SEF URL),一个有用的工具是Chameleon。这允许您选择特定的文章/类别/部分(加上浏览器类型、用户组、组件等)并使用它们来触发某个模板。
如果可以避免的话,你真的应该尽量避免将任何东西硬编码到模板中。不知道为什么要指定文章不从菜单链接。无需编写代码即可完成此操作的最简单方法是创建一个新菜单,然后添加一个菜单项,该菜单项链接到您要为其指定模板的文章。您不必将菜单放在模块中的任何位置,因此它永远不会出现在网站上,但它会显示在模板管理器的菜单分配中。
您可以使用单个文章、类别、部分甚至组件来执行此操作。只要您有一个菜单链接来关联模板。我总是创建一个仅限管理员的菜单来放置运行站点所需但用户不需要访问的链接。
虽然这是一篇旧文章,但我想我会分享我的想法:通过在系统插件中实现 onAfterInitialize() 函数,您可以轻松地更改一篇文章的模板。无需修改 Joomla 核心。
这适用于 Joomla 1.5,但也适用于 2.5:
function onAfterInitialise(){
if(true){ // f.ex. test for article ID or whatever
JRequest::setVar('template', 'beez'); // change template
}
}
在 joomla 3.x 版本中,url 参数的处理方式不同。以下是在 joomla 3.4.8 中测试的:
public function onAfterInitialise()
{
$app=JFactory::getApplication();
if(true){ // f.ex. test for article ID or whatever
$app->input->set('template', 'beez3');
}
}
更多关于在此处为 Joomla 编写插件的信息