希望创建Joomla插件以允许在K2中使用自定义管理模板

时间:2011-11-04 20:21:46

标签: php joomla

所以我已经找到了如何破解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。

所以我想要做的是创建一个可安装的插件,基本上在呈现管理模板之前插入此代码。不知道如何解决这个问题......任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该很简单:

  1. 了解如何创建Joomla插件。这是Joomla create plug-in tutorial
  2. 详细了解插件行为,此处为plug-in documentation and events
  3. 编写代码: - )
  4. 此外,Joomla在/plugins/user/example.php中有一个Sample插件(这不是你想要的插件,但是一个很好的起点)。 您应该创建在onAfterDispatchonAfterRender上触发的系统插件,您可能必须使用事件才能使其正确...

    这是草稿:

    <?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); 
            }
        }
    }