web-dev-qa-db-ja.com

特定のパネルページにJavaScriptを追加する方法

パネルページを作成しました(つまり、パネルを使用しています)。コンテンツの追加->新しいカスタムコンテンツを使用して、パネル自体からHTMLコンテンツを追加できます。 cssクラスを追加することもできます(本文のcssクラスを追加)。

次に、そのパネルページにjqueryボタンを追加します。私のテーマにJavaScriptを追加することもできますが、この特定のパネルページだけでなく、すべてのページのロード時に呼び出されます。だから私は私のモジュールを通して私のJavaScriptを追加したいと思います。

しかし、表示されている現在のページがその特定のページパネルであることをプログラムで確認するにはどうすればよいですか?それを確認できるフックはありますか?

おかげで、

ババ

5
Baba

パネルをノードに「ラップ」できるパネルノードを使用してそれを実行しました。次に、hook_node_viewを使用してノードにアクセスします

function mymodule_node_view($node, $view_mode, $langcode)
{
 if( $node->nid == 49 )  /* 49 is the nid */
  {                                                                                                                                                     
   drupal_add_js(drupal_get_path('module', 'mymodule') . '/myJS.js', 'file');
  }
}
0
Baba

私はおそらくこれをtemplate_preprocess_panels_pane()のテーマで行います http://drupalcontrib.org/api/drupal/contributions!panels!panels.module/function/template_preprocess_panels_pane/7

あなたがすることができます(最初にdevel.moduleがインストールされていることを確認してください)

MYTHEME_preprocess_panels_pane(&$vars) {
  dpm($vars);
}

すべてのパネルペインで行われているすべてを完全に印刷します。十分に掘り下げると、フックする$vars['_something_']['#attached']['js'] = YOUR_FILE;を見つけることができるはずです。必要な場合は、モジュールでもこれを実行できると思います。

編集:実際にそれについて考えた後でも..

私はおそらくこれに対して助言し、あなたのテーマのjsに入れます。それが膨大な量のjsでない限り、これをnotすることで、Drupalのjs集約の利点を活用することになります。 jsをテーマに入れると、メインサイトのjsファイルに自動的にコンパイルされますが、このパネルペインのみが表示されているときに何か違うことをする場合は、まったく異なるjsファイルを集約してダウンロードする必要があります。表示されたときのページ。

これがパフォーマンスの週であると仮定すると、ブラウザーはこのファイルを最初にダウンロードした後にキャッシュする必要があるため、実際にはこれとは間違った方向に進んでいる可能性があります。

編集:フック名のタイプミス

2
JGrubb

パネルのテーマテンプレートは次のようになります。

panels-pane--[pane type]--[pane subtype].tpl.php

また、特定のニーズに合わせてテンプレートを変更することもできます。このページでは、さらに詳しく説明しています。

https://drupal.org/node/167881

panel3のドキュメントのホームページを忘れないでください。

https://drupal.org/node/496278

パネルに関連するすべてのものを始めるのに良い場所です。テーマのオーバーライドはそこからリンクされています。

0
thoth

JSインジェクターモジュールを見たことはありますか?それは基本的にあなたが探しているものを正確に行います。特定のページにJavaScriptを挿入します。また、JavaScriptをロードする場所(つまり、ヘッダーまたはフッター)を指定することもできます。とても便利な。

https://drupal.org/project/js_injector

0
Andrew Dunkle