Joomla:如何更改特定文章的模板

时间:2010-07-17 01:43:47

标签: joomla joomla-template

有没有办法只更改特定文章的模板? 请注意,它应该无需将文章链接到任何菜单。

4 个答案:

答案 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

编写插件的内容