質問: jfactory::getdocument(); var_dump($doc->_script['text/javascript']); 次に、コアjavascriptのみが表示されます。例:string(79) "jquery(window).on('load', function() { new jcaption('img.caption'); });" サードパーティの拡張機能によって追加されたものは含まれず、ヘッドに出力されます。テンプレートでサードパーティのスクリプトを傍受することは可能ですか、それとも後日追加され、特定のイベントでプラグインによってのみ実行できますか?
回答: この回答は非常に長く、多くの方法がありますが、一番下にあるのが最適ですunset($doc->_scripts[juri::base(true)'/path/to/file.js'])主にそれを行う方法ですが、スクリプトによっては完全なurlを追加するものとそうでないものがあります。したがって、すべてを削除したい場合は、これを回避するためのより良い方法があります。$doc->_scripts = array(); //if you need to re include libraries jhtml::_('jquery.framework'); jhtml::_('behavior.framework'); //if the array trick does not work you could do for($i=0;$i<count($doc->_scripts);$i++){ //in here you could stop it from removing specific files by looking for specific file names $get_file = explode('/',$doc->_scripts[$i]); $get_file = end($get_file); //many more ways to do this, chains of if statements can get messy switch($get_file){ case 'jquery.js': case 'boostrap.js'; break; default: unset($doc->_scripts[$i]); break; } } 編集:スクリプト宣言の場合、ほとんどのスクリプトを1つに結合するのではなく分離します。また、テンプレートは、ページがレンダリングされる前に実行する最後の場所ではないため、スクリプト配列にさらに追加することができます。私はこれについて100%ではありませんが、モジュールはテンプレートの後にレンダリングされてから挿入され、コンポーネントはメニュー項目に基づいて読み込まれるため、前に読み込まれると思います。また、プラグインはスクリプトにあとがきを追加できます。したがって、必要に応じてスクリプトを完全に調整できることを保証する唯一の方法は、プラグインを使用することです。それを行うことができるonbeforecompileheadというシステムイベントがあります。 http://docs.joomla.org/plugin/events/system#onbeforecompilehead プラグインを作成する必要がありますが、プラグインはすべての拡張機能の中で最も簡単です。ここに参考資料を示します。 http://docs.joomla.org/j3.x:creating_a_plugin_for_joomla 要約では、それが追加された場所によっては、テンプレートで使用できない場合があります。プラグインが唯一の方法である可能性があります。更新私が言ったように、それはテンプレートだけで行うことはできませんが、私はそれをあらゆるサイトで許可するために使用できるシンプルなシステムプラグインでそれを回避する方法を見つけました。これはコアで役立つものであり、プルリクエストを実行して追加することもできますが、どなたでも大歓迎です。ただし、「次のリリース」に追加される可能性は低いclass plgsystemhooks extends jplugin { public function onafterdispatch(){ $app = jfactory::getapplication(); $template = $app->gettemplate(); if ($app->issite()) { if (file_exists(jpath_themes.directory_separator.$template.directory_separator.'functions.php')) { $dispatcher = jdispatcher::getinstance(); require_once jpath_themes.directory_separator.$template.directory_separator.'functions.php'; } } } } これはwordpressに触発されたものですが、ソースコードを見ると、基本的にコアで完全にサポートされていることがわかり、テンプレートでファイルを定義する最後のステップがこんな便利な機能!使い方は次のとおりです。まず、テンプレートにfunctions.phpファイルを作成します。次に、そのファイルで次のようなものを使用します。$dispatcher->register('onbeforecompilehead',function(){ //your code to remove the unneeded scripts. }); 注:これはメモリから実行したため、100%正確ではない可能性があります。jdispatcherクラスを調べても機能しない場合は、良い考えかもしれません。これは非常に便利です。そのサイト専用の単純なプラグイン機能を必要とする多くのプロジェクトでは、カスタムプラグインを作成することは、必要な作業よりもはるかに多くの作業が必要です。