web-dev-qa-db-ja.com

カスタムプラグインによるクラスのオーバーライド

Joomlaクラスをオーバーライドするプラグインを作成しようとしています。それ以外の場合はオーバーライドできません。これが私のコードです:

comoverride.xml

  <files>
    <filename plugin="comoverride">comoverride.php</filename>
    <filename>comoverride.xml</filename>
    <filename>index.html</filename>
  </files>
  <config>
  </config>
</extension>

(もちろん、私のタグに私の情報と他の必要な情報があります)

comoverride.php

<?php



defined( '_JEXEC' ) or die( 'Restricted access' );
if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
jimport('joomla.application.component.helper');
class comcontent extends JPlugin{

    public function __construct(&$subject, $config = array()) {

         parent::__construct($subject, $config);
     }

     public function  onAfterRoute () {

        $app = JFactory::getApplication();
        if('com_content' == JRequest::getCMD('option')  && !$app->isAdmin()) {
            $template = $app->getTemplate();

             require_once(JPATH_SITE.'/templates/'.$template.'/code/com_content/models/articles.php');

        }
    }  

「ContentModelArticles」クラスが含まれているarticles.phpファイルをオーバーライドしようとしています。しかし、残念ながらまったく機能しないようです。

誰か私に試して頂けますか?

1
Peter

次のスニペットをご覧ください。それは明確に機能します

plugins/system/comoverride/comoverride.xml

<?xml version="1.0" encoding="utf-8"?>
<extension  version="3.4" type="plugin" group="system" method="upgrade">
<name>plg_system_comoverride</name>
<author>JProof</author>
<creationDate>Februar 2009</creationDate>
<copyright>(C) 2010 Romacron. All rights reserved.</copyright>
<license>GNU/GPL</license>
<version>3.0.0</version>
<files>
    <filename plugin="comoverride">comoverride.php</filename>
    <filename>comoverride.xml</filename>
    <filename>index.html</filename>
</files>
<config>
</config>
</extension>

/plugins/system/comoverride/comoverride.php

defined('_JEXEC') or die('Restricted access');
if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
jimport('joomla.application.component.helper');

class PlgSystemComOverride extends JPlugin
{

    public function __construct(&$subject, $config = array())
    {
        parent::__construct($subject, $config);
    }

    public function  onAfterRoute()
    {
        $app = JFactory::getApplication();
        if ('com_content' === $app->input->getCmd('option') && !$app->isAdmin()) {
            $template = $app->getTemplate();

            require_once(JPATH_SITE . '/templates/' . $template . '/code/com_content/models/articles.php');

        }
    }
}

お役に立てば幸いです

2
JProof