Select radiolistの出力を上書きしたい。コアをハックすることはできますが、更新に関してそれを行うことはあまり好きではありません。
そこで、システムプラグインをチェックアウトして、JHTMLselectクラスをオーバーライドしました。しかし、それを実装する方法にこだわっています。
私はこのトピックを見つけました: コアクラスをオーバーライドする方法?
しかし、それはもはや適切に機能していないようです。また、プラグインをアップロードできません。エラーが発生します。上記のプラグインと同じコードを持っています。
これはオーバーライドのための私のコードです:
<?php
/**
* @package Joomla.Plugin
* @subpackage System.Overrides
*
* @copyright Copyright (C) 2012 Don Gilbert. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_BASE') or die;
/**
* System plugin to override core classes terms.
*
* @package Joomla.Plugin
* @subpackage System.Overrides
* @since 2.5
*/
class PlgSystemOverrides extends JPlugin
{
/* We do our thing in the __construct method
* so that our overridden classes will be
* available everywhere
*/
public function __construct(&$subject, $config)
{
parent::__construct($subject, $config);
include_once 'config.php';
}
}
それが私のメインのphpファイルです。これは私の設定ファイルです
<?php
/**
* @package Joomla.Plugin
* @subpackage System.Overrides
*
* @copyright Copyright (C) 2012 Don Gilbert. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
define('OVERRIDES', dirname(__FILE__).'/overrides');
// Use JLoader to register all the classes you want to override
JLoader::register('JHtmlSelect', OVERRIDES.'/select.php', true);
私のselect.phpファイルは基本的に/libraries/cms/html/select.phpにあるselect.phpファイル全体であり、ラジオリストが少し変更されています
私はあなたが上に持っているものからほんの少しの変更でこれは大丈夫です。プラグインをインストールできない場合は、ファイル名またはフォルダが正しくない可能性があります。 Joomlaはそれらについて非常にうるさいです!
すべてをplg_system_overrides
という名前のフォルダーに入れ、ここにファイルがあります。
overrides.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.2" type="plugin" group="system" method="upgrade">
<name>plg_system_overrides</name>
<description>Plugin to override html radio select</description>
<files>
<filename plugin="overrides">overrides.php</filename>
<filename>config.php</filename>
<folder>overrides</folder>
</files>
</extension>
overrides.php
-他の回答で説明されているように、ここではonAfterInitialiseを使用するのが最適だと思います
<?php
defined('JPATH_BASE') or die;
class PlgSystemOverrides extends JPlugin
{
public function onAfterInitialise()
{
include_once 'config.php';
}
}
私のconfig.php
はあなたのものとまったく同じです。joomlaライブラリselect.php
をoverrides
フォルダーにコピーし、genericlist関数のhtml出力に小さな変更を加えました。
plg_system_overrides
フォルダをplg_system_overrides.Zip
に圧縮してインストールしました。プラグインをインストールした後、表示されるはずのすべてのファイルがJoomla plugins/system
フォルダーにあることを確認することは価値があります。
Admin/pluginsページからプラグインを有効にすることを忘れないでください!
ランダムなサイトコンポーネントレイアウトファイルに挿入してテストしました
<?php echo JHtml::_('select.genericlist', array('a', 'b', 'c'), 'testselect'); ?>
また、ブラウザーのdevtoolsを使用してhtmlを検査すると、変化がわかりました。
JHtml::register()
を使用して、特定のメソッドをオーバーライドできます。
defined('_JEXEC') or die;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Plugin\CMSPlugin;
class PlgSystemOverrides extends CMSPlugin
{
public function onAfterInitialise()
{
if (!HTMLHelper::isRegistered('select.radiolist'))
{
HTMLHelper::register('select.radiolist', array(__CLASS__, 'radiolist'));
}
}
public static function radiolist()
{
// Your custom function here.
}
}