有没有办法只更改特定文章的模板? 请注意,它应该无需将文章链接到任何菜单。
答案 0 :(得分:5)
如果您希望模板覆盖不依赖于菜单位置,则将标准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';
}
答案 1 :(得分:1)
如果可以避免,你应该尽量避免将任何内容硬编码到模板中。不确定为什么要指定文章没有从菜单链接。无需编写代码即可实现此目的的最简单方法是创建新菜单,然后添加链接到要为其指定模板的文章的菜单项。您不必将菜单放在任何地方的模块中,因此它永远不会显示在网站上,但它会显示在模板管理器的菜单分配中。
您可以使用单篇文章,类别,部分甚至组件来执行此操作。只要您有一个菜单链接将模板关联到。我总是创建一个仅限管理员菜单来放置运行网站所需的链接,但不需要用户访问。
答案 2 :(得分:1)
正如布伦特所说,避免修改核心Joomla代码的诱惑!这样做可能会阻止你进行Joomla升级,因为你知道它会打破你所做的核心变化。
除了“隐藏菜单项”技术(有用但在某些情况下可以破坏SEF URL),一个有用的工具是Chameleon。这允许您选择特定的文章/类别/部分(以及浏览器类型,用户组,组件等),并使用它们来触发某个模板。
答案 3 :(得分:1)
虽然这是一篇老帖子,但我想我会分享我的想法:通过在系统插件中实现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-parameters的处理方式不同。以下是在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 here
编写插件的内容