2010-07-17 68 views

回答

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

正如布伦特所说,避免修改核心Joomla代码的诱惑!这样做可能会阻止你做Joomla升级,因为你知道它会打破你所做的核心改变。

除了“隐藏菜单项”技术(这是有用的,但可以打破在某些情况下SEF的网址),一个有用的工具是Chameleon。这使您可以选择特定的文章/类别/部分(加上诸如浏览器类型,用户组,组件等等),并使用它们来触发某个模板。

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的版本,网址参数的处理方式不同。以下是在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

+0

我已创建与您的代码插件,但是当我尝试检查当前组件这样的'''$ APP->输入 - > GET ('option')==“com_content”'''什么也没发生,你能帮我吗? – ivayloc 2016-03-19 15:59:42

+0

尝试检查插件函数是否实际运行,f.ex.用print_r($ app-> input);死();在这里您还将看到$ app-> input对象中定义了哪些参数... – jonasfh 2016-03-22 15:08:00