web-dev-qa-db-ja.com

</ body>の前にjsスクリプトを挿入するにはどうすればよいですか

私はこの質問が再度尋ねられることを知っています、しかし私は彼らの解決策を試みました、そしてそれは働かないのでそれを評価しないでください。タグの前に配置する必要がある認証スクリプト(auth.js)がありますが、トピックで提供されているソリューションを適用した場合でも、ボディファイルではなくヘッダーファイルに追加されます。これが既存のコードです。私はGantry5を使用しています:

$document=JFactory::getDocument();
$document->addScript('/templates/rt_kraken/js/auth.js', 'text/javascript',false,true);

私はまだ初心者なので、ここにはコメントする評判がまだないので、徹底的に説明してください。

これも前の投稿のリンクです。私はそれらとまったく同じことを達成しようとしています: </ body>終了タグの前にJavaScriptスクリプトをロードする

2
Fotis Emery

ガントリー5の場合、拡張機能>テンプレート>スタイル>ページ設定

次に、たとえば私に必要なスクリプトを入力します。

<script type="text/javascript" src="/templates/rt_kraken/js/auth.js"></script>

@jamesgarrettさん、ありがとうございました。私は間違いなくより高度なトピックであなたのアプローチを適用します。

0
Fotis Emery

少なくとも4つの選択肢があると思います。

  • Gantry5テンプレートでは、extension> templatesに移動し、テンプレートを選択して、ページ設定タブに「Before </ body>」というラベルの付いたテキストボックスがあります。これはすべてのフロントエンドページに含まれるため、一部の場所でのみ必要な場合は、テンプレートアウトラインの割り当てを使用できます。
  • JavaScriptを使用して、ページの読み込み時にスクリプトタグを挿入します。あなたのauthスクリプトによっては機能するかもしれません。
  • テンプレートに直接挿入します。これは、独自のテンプレートを実行しているユーザーには問題ありませんが、これは当てはまりませんが、徹底的に説明したいと思います。
  • システムプラグインのレンダリングされたHTMLで文字列置換を実行します。以下のコードを参照してください。私はあなたがJoomla 3.8を使用していて、すべてのフロントエンドhtmlページに認証コードを挿入することを想定しています。後者が当てはまらない場合は、必要に応じてプラグインに条件を追加してください。

ガチャ

プラグインは、プラグインが注文された順序で実行されるため、別のプラグインが同じ手法を使用している場合は、プラグインの後にコードが挿入されることがあります。また、システムページキャッシュを使用している場合は、HTMLがキャッシュされる前にスクリプトが挿入されるように、プラグインをその前に置く必要があります。うまくいけば、どちらも意味があり、あなたの状況には当てはまりません。

システムプラグインのコード

適切なシステムプラグインのphpコードは、たとえば次のようになります。 /plugins/system/scriptbeforebody/scriptbeforebody.php

<?php 
defined('_JEXEC') or die('Restricted access');

class plgSystemScriptbeforebody extends JPlugin {

  public function onAfterRender()
  {
      $app = JFactory::getApplication();

      // only insert the script in the frontend
      if ($app->isClient('site')) {

          // retrieve all the response as an html string
          $html = $app->getBody();

          // replace the closing body tag with your scripts appending to the closing body tag
          $scripts = [
              '/templates/rt_kraken/js/auth.js',
              '/templates/rt_kraken/js/something-else.js',
          ];

          $tags = "";
          foreach($scripts as $s){
              $tags .= '<script src="' . $s . '"></script>';
          }

          $html = str_replace('</body>',$tags . '</body>',$html);

          // override the original response
          $app->setBody($html);
        }
    }
}

付随するマニフェストは、たとえば次のようになります。 /plugins/system/scriptbeforebody/scriptbeforebody.php

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.8" type="plugin" group="system">
    <name>Script Before Closing Body Tag</name>
    <creationDate>Dec 2017</creationDate>
    <version>1.0</version>
    <description>Hardcoded insertion of script tag into html response</description>
    <files>
        <filename plugin="scriptbeforebody">scriptbeforebody.php</filename>
    </files>
</extension>

両方のファイルをZipでインストールし、通常のjoomla拡張インストーラーを使用するか、指定したパスにアップロードして、アドミニストレーション>エクステンション>管理>検出ツールを使用してインストールします。

4
jamesgarrett

新しいカスタムHTMLモジュールを作成し、コードエディターを使用してテキストを追加できます。

<script src="/templates/rt_kraken/js/auth.js"></script>

次に、それをモジュールの位置に置き、タイトルを無効にします。コードは、モジュールが表示される位置に配置されます。一部のテンプレートには、Googleアナリティクスなどの非コンテンツデータ用に予約された位置があるため、このモジュールに適しています。

0
Dan Cogliano

1つ(または複数)の記事のみのスクリプトが必要で、Gantry5 Frameworkを使用している場合は、コンポーネント、アウトラインに移動し、デフォルトのアウトラインを使用して新しいアウトラインを作成し、ページ設定に移動し、ボディ属性にJavaScriptを追加します。 「前」ウィンドウで、アサインメントの新しいアウトラインを記事に割り当てました。

0
Vast