Drupal 8.1.7を使用して group モジュールを使用しています。ユーザーがグループまたはグループにリンクされた記事を表示すると(/ group/...またはnode/...)、各グループに特定のCSSを指定したい。
私はトリックを行うモジュールを開発します(グループまたは記事を表示するかどうかを確認し、グループを取得して、ページのCSSスタイルを変更するJSファイルをロードします)。 dev drupalキャッシュなしでうまく機能しますが、キャッシュをアクティブにして本番環境でモジュールをテストすると、JSファイルは1回だけロードされるようです。drush cr
は、ファイルを再度ロードします。
Drupalに毎回ファイルをロードするように指示する方法、またはファイルをキャッシュに入れない方法はありますか?mymodule.libraries.ymlで多分?
color:
js:
js/mymodule.js: {}
dependencies:
- core/jquery
- core/drupalSettings
- core/drupal
現在のアプローチでは、JSファイルをグローバルにロードするため、カスタムモジュールまたはテーマに直接ロードします。
ただし、これは最善の解決策ではありません。必要なのは、ノードを前処理し、ノードがグループに属しているかどうかを確認し、識別クラスを追加することです。これにより、CSSでターゲットを設定できます。
あなたが本当に困難に行きたいなら、#lazy_builder
プレースホルダー。 このブログの投稿 には良い説明があります。
グループごとに1つの異なるJSがあるとは信じられません。だからキャッシングはクールで、あなたの問題はJSの関数のトリガーにあると思います。
Drupal.behaviorsを使用して、ページが読み込まれるたびにJSの関数を呼び出すことができます。
(function ($, Drupal) {
Drupal.behaviors.anyInit = {
attach: function () {
myInitFunction();
}
}
})(jQuery, Drupal);
function myInitFunction() { do something }
次のように、変数をレンダリング配列にアタッチすることで、変数をJS(グループ名など)に渡すことができます。
$build['#attached']['library'][] = 'bootasde/asdejs';
$build['#attached']['drupalSettings']['bootasde']['proreos_server'] = SystemTools::getProreosServer();
$build['#attached']['drupalSettings']['bootasde']['checktyp'] = 'a';
$build['#attached']['drupalSettings']['bootasde']['id'] = $id;
次に、JSでその変数にアクセスします。
var server = drupalSettings.bootasde.proreos_server;
var id = drupalSettings.bootasde.id;
var tp = drupalSettings.bootasde.checktyp;
お役に立てば幸いです。
別の方法は、twigテンプレートのCSSクラスにグループ名を追加し、各グループ名にいくつかの特別なセレクターを持たせることです。