4

基本的に私がやろうとしているのは、ビュー内の各行の反復に JavaScript コードの行を追加することです。

Drupal 6 では、Drupal 7 に統合された Views Custom Field を使用してこれを実現していました。

「Global: Custom text」フィールドを使用しようとすると、スクリプト タグが取り除かれます。

何か案は?

注意: drupal_add_js は動的に挿入する必要があり、インライン (乱雑) で使用したくないため、使用したくありません。提供された JS に基づいて固有のツールチップがポップアップし、実際の行 ID が必要です。

前もって感謝します!!

4

2 に答える 2

4

Twitterで返信しましたが、同じ状況に遭遇した他の人のために(そして明確にするために)、ここに再投稿すると思いました.

通常、views_php はお勧めしません。PHP フィルターを有効にする/使用することには多くの欠点がありますが、これについては既に詳しく説明しています。この場合でも、前処理関数で使用drupal_add_js()して、物事を十分に動的に保つことができます。

つまり、同じイベントをバインドする必要がある要素のリストがあります。イベント委任は、考えられる解決策としてすぐに頭に浮かびます。n 個のイベント ハンドラーの代わりに、親コンテナー用のイベント ハンドラーが 1 つになり、ページの応答性が向上します。これにはjQueryは必要ありませんが、使用したい場合はjQueryを使用してください.delegate()

この外部 JS ファイルから ID を取得する方法は簡単です。取得しているソース マークアップに ID が含まれていることを確認してください。IDを探していると仮定すると、通常、各行のクラス "views-row-N" で見つけることができます。それ以外の場合は、他の方法でクラス ID をテンプレートに追加する必要があります。ターゲット要素 (行、親要素内の .views-row に一致する要素) のイベント ハンドラー内で、使用する予定のクラスから ID を解析し、そこから見つけた値に基づいて残りのスクリプトを実行します。 .

このアプローチには多くの利点があります。モジュールが 1 つ少ない、セキュリティ上の問題の原因が 1 つ少ない、JS がすべて 1 か所にある、バインドするイベント ハンドラーの数が少ない、マークアップが軽くて読みやすい、イベントの委任により、この手法は、後で何らかの理由で要素が DOM に動的に追加された場合でも機能します。詳細については、ポップアップで何をしようとしているのかを正確に知ることが役に立ちます。別のノードへの AJAX 呼び出しを行っていますか? リスト内の位置に基づいて何かをしていますか? そこから私の答えを明確にしていただければ幸いです。

于 2012-10-11T17:34:49.980 に答える
0

おそらく、これらのいずれかを探しているだけです。少しやり過ぎかもしれませんが、仕事は完了します: http://drupal.org/project/views_php

モジュールをインストールすると、global: php フィールドのオプションが表示されます。フィールド出力に JavaScript のみを投稿できますが、フィルターで除外されることはありません。

于 2012-10-11T16:24:46.733 に答える