所以我已经找到了如何破解k2以允许基于项目类别的多个后端模板。它实际上非常简单,但需要k2核心的黑客攻击。
在第305行的administrator / components / com_k2 / views / item / view.html.php中,紧接着:
$this->assignRef('form', $form);
我补充说:
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);
}
这使我能够复制/ administrator / components / com_k2 / views / item / tmpl的文件夹和内容,将其移动到templates / MY_TEMPLATE / html / com_k2 / admin并使用我想要的类别ID重命名新文件夹覆盖。
这很好用,我可以按类别完全自定义我的后端K2模板,让客户更轻松,让K2更像是一个完整的CCK。
所以我想要做的是创建一个可安装的插件,基本上在呈现管理模板之前插入此代码。不知道如何解决这个问题......任何想法?
谢谢!
答案 0 :(得分:0)
这应该很简单:
此外,Joomla在/plugins/user/example.php
中有一个Sample插件(这不是你想要的插件,但是一个很好的起点)。
您应该创建在onAfterDispatch
或onAfterRender
上触发的系统插件,您可能必须使用事件才能使其正确...
这是草稿:
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );
jimport('joomla.filesystem.folder');
/**
* K2 Template Overload Plug-in
*
* @package Joomla
* @subpackage System
*/
class plgSystemK2template extends JPlugin
{
function plgSystemCache(& $subject, $config)
{
parent::__construct($subject, $config);
}
public function onAfterDispatch()
{
// WHAT IS THE PURPOSE OF THESE 2 VARS??
$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);
}
}
}