Joomla 3:如何覆盖K2管理模板?

时间:2014-01-16 22:40:32

标签: php templates joomla joomla-k2

在Joomla 3中,我需要根据类别为K2文章指定不同的管理模板,以便能够指定不同的额外字段,并使内容提供者更容易添加项目。

我以为我找到了完美的解决方案,但它是几年前为旧版Joomla写的。我确实联系了作者,他承认几年前写过它,从那以后就放弃使用Joomla并且无法告诉我。

它与覆盖前端k2模板非常相似。以下是描述它的文章:

http://getk2.org/documentation/tips-a-tricks/221-custom-admin-templates-and-calling-specific-extra-field-data

但是当我这样做并修改类别的管理模板时,默认情况下没有变化。我的想法是,此代码中修改文件administrator / components / com_k2 / views / item / view.html.php的内容与Joomla v.3不兼容:

//Look for specific admin template file  
jimport('joomla.filesystem.folder'); 
$componentPath = JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'templates'; 
$componentFolders = JFolder::folders($componentPath); 
$db =& JFactory::getDBO(); 
$query = "SELECT template FROM #__templates_menu WHERE client_id = 0 AND menuid = 0"; 
$db->setQuery($query); 
$defaultemplate = $db->loadResult(); 

if (JFolder::exists(JPATH_SITE.DS.'templates'.DS.$defaultemplate.DS.'html'.DS.'com_k2'.DS.'templates'.DS.'admin'.DS.$item->catid)) 
{  
$this->_addPath('template', 
JPATH_SITE.DS.'templates'.DS.$defaultemplate.DS.'html'.DS.'com_k2'.DS.'templates'.DS.'admin'.DS.$item->catid);  
}

我已经知道我的数据库中没有名为“templates_menu”的表。这立即引发了错误。我认为它应该是template_styles“,并且很可能列应该是client_id和id。使这些更改至少消除了错误。

此外,我认为“if”语句中的路径不正确。不需要第二个“模板”目录。

然而,即使进行了这些更改,我似乎也没有在管理员方面提取我的新模板。

我希望Joomla / PHP专家(我不是)可以在这里权衡。我对路径和表名的假设完全错了。

编辑:在进一步研究中,我决定继续创建原始海报代码中指出的表格。我现在在我的数据库中有一个名为e758z_templates_menu的表。

但是,在尝试让Joomla使用连接到类别ID的自定义管理模板时,我仍然一无所获。它继续使用默认值。

1 个答案:

答案 0 :(得分:0)

您是否可以创建不同的额外字段组,然后将正确的组分配到正确的类别?

如果你修改了k2核心文件,那么任何更改都将在更新中被删除,更新很可能会发生新的1次点击更新。

您应该能够使用标准模板覆盖覆盖标准管理视图,即 复制

/administrator/components/com_k2/views/category/default.php

/administrator/templates/YOUR_ADMIN_TEMPLATE/html/com_k2/category/default.php

如果您希望它们针对不同的类别有所不同,那么为什么不创建前端登录,然后为不同的类别使用不同的模板,并以标准方式覆盖它们。