1

Joomla でHeadJSを使用しようとしています。テンプレートにコードを追加しました - head 出力で javascript ファイルを取得し、head.js コード間でそれらを出力するための文字列を準備し、joomla の head 出力タグからすべての javascript ファイルを削除します。

問題は、一部のスクリプトがテンプレートの後に読み込まれることです。たとえば、モジュールはテンプレートがロードされた後にいくつかのスクリプト ファイルをキューに入れるため、そのファイルは私の head.js コードの外に表示されます。これを制御する方法はありますか?

$data = $this->getHeadData();

if( $data['scripts'] ){
    foreach ($data['scripts'] as $url=>$type){
        if( !strstr($url, 'ajax.googleapis.com/ajax/libs/jquery') )
        $headjs[] = $url;
    }
    unset( $data['scripts'] );
    $data['scripts'][$template . '/js/head.js'] = array(
        'mime' => 'text/javascript',
        'defer' => false,
        'async' => false);
    $this->setHeadData($data);
}

その後...

 <script>
        head.js(
        <? foreach($headjs as $script): ?>
            '<?=$script?>',
        <? endforeach; ?>
            function(){
            }
        );
    </script>
4

1 に答える 1

2

さまざまな拡張機能が、出力の処理中にトリガーされるさまざまなイベントに接続できます (したがって、テンプレートがレンダリングされた後でも)。

これまでに見つけた最良のオプションは、システム プラグインを作成し、その順序を利用可能なシステム プラグインの最後に移動することです。

次の 2 つのオプションがあります。

  1. onBeforeCompileHeadイベント (Joomla 1.5.23 が導入されたと思います) を使用して、スクリプトを headjs に移動します。
  2. onAfterRenderイベントを使用し、head html コードを解析して、headjs を使用してロードされるようにします。

これは、Web サイトを完全に制御できる非同期スクリプトの読み込みをいじる場合には問題ありませんが、Joomla のユニバーサル拡張機能として実装することはほとんど不可能です。一部の拡張機能はヘッドでインライン スクリプトを使用し、一部は html ボディで使用し、実行順序を保持する必要があります (単純な例: Mootools を最初にロードする必要があります)。

自分で (テンプレートまたは拡張機能に) 含めたスクリプトのみを非同期にロードするために使用します。Joomlaコア(Mootools、core.jsなど)またはその他の拡張機能で追加されたスクリプト。

于 2011-10-25T12:01:04.177 に答える