OnAfterRenderイベントのシステムプラグインを作成しましたが、実行できません。私はJoomla 3.9にいます
プラグインのサンプルコードは次のとおりです
<?xml version="1.0" encoding="utf-8"?>
<!--
/**
* @copyright Copyright (c) 2018 myvendorcustomscripts. All rights reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
-->
<extension type="plugin" version="1.0" group="content" method="upgrade">
<name>plg_system_myvendorcustomscripts</name>
<author>myvendor</author>
<creationDate>October 2018</creationDate>
<copyright>Copyright (c) 2018 myvendorcustomscripts. All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<version>1.0.0</version>
<description>
<![CDATA[
]]>
</description>
<files>
<filename plugin="myvendorcustomscripts">myvendorcustomscripts.php</filename>
<filename>index.html</filename>
</files>
<languages>
<language tag="en-GB">en-GB.plg_system_myvendorcustomscripts.ini</language>
<language tag="en-GB">en-GB.plg_system_myvendorcustomscripts.sys.ini</language>
</languages>
<config>
<fields name="params">
<fieldset name="basic">
</fieldset>
</fields>
</config>
</extension>
そして
<?php
/**
* @copyright Copyright (c) 2018 myvendorcustomscripts. All rights reserved.
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
// no direct access
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
/**
* content - MyVendorCustomScripts Plugin
*
* @package Joomla.Plugin
* @subpakage myvendorcustomscripts.MyVendorCustomScripts
* @since
*/
class plgSystemMyVendorCustomScripts extends JPlugin
{
/**
* Constructor.
*
* @param $subject
* @param array $config
* @since
*/
public function __construct(&$subject, $config = array())
{
// call parent constructor
parent::__construct($subject, $config);
}
public function onAfterRender()
{
$app = JFactory::getApplication();
}
public function onBeforeCompileHead()
{
$app = JFactory::getApplication();
$document = $app->getDocument();
foreach ($document->_styleSheets as $index => $value) {
if (strpos($index, 'fonts.googleapis.com')) {
unset($document->_styleSheets[$index]);
}
if (strpos($index, 'simple-line-icons')) {
unset($document->_styleSheets[$index]);
}
// $styleSheet = $styleSheet;
}
}
}
ただし、フロントエンドを参照しているときに関数が実行されることはありませんが、バックエンドを参照しているときには実行されます。それは本当に奇妙で、理由がわかりません。これは常にトリガーする必要があるようにドキュメントにあるようです
あなたが現在持っているコードは動作します。ページキャッシュをクリアして、ページをもう一度表示するだけです。わかるでしょ fonts.googleapis.com
リンクが削除されます。残りのコードによっては、これで問題ない場合もあります。
システム-ページキャッシュプラグインが有効になっている場合、最初の読み込みページ(URLによって決定される)が正常にレンダリングされ、予想されるすべてのプラグインイベントがトリガーされ、onAfterRespond
イベント中にキャッシュに保存されます。次のページをロードすると、プラグインはキャッシュからページをフェッチし、アプリケーションにプッシュして、アプリケーションを閉じます。これはonAfterInitialise
イベント中に発生します。それ以上のイベントはトリガーされません。デバッグが有効になっている場合はonAfterRespond
を除きます。
現在onBeforeCompileHead
にあるコードは、ページがキャッシュに保存される前に変更が適用されるため、実際には問題なく機能します。
ただし、キャッシュセーフではないコードを追加する場合は、たとえば訪問者ごとに変化するコード、またはランダムに生成されたコードの場合、onPageCacheSetCaching
イベントを使用してキャッシュを選択的に無効にすることができます。