1

でカスタム フィルターを作成しようとしたときに問題が発生しましたhook_filter_info()。現在表示されているノードのフィールドに基づいて、いくつかの置換を行う必要があります。私は単に次のコードを使用しています。

return str_replace('%people1%', 'REPLACING WORKING', $text);

menu_get_item()プロセス コールバックでは、そのコードは正常に動作しますが、現在のノード ID (または)を取得できませんarg()。また、変更を加えるたびにキャッシュをクリアする必要があります ( 'cache' => FALSE)。

プロセス コールバックでのデータ処理について知っておくべきことはありますか?

4

1 に答える 1

1

menu_get_item()またarg()、入力フィルターのプロセス コールバックから呼び出されたときに異なる値を返さないでください。おそらく、入力フィルターがあなたが考えているものとは異なるコンテキストで呼び出されているため、期待する値が返されていません。

入力フィルタは次の場合に呼び出されます。

  • ノード本体をレンダリングする必要があります
  • コメント本文をレンダリングする必要があります
  • 入力形式を使用しているエンティティ フィールドをレンダリングする必要がある
  • Views モジュールで作成されたビューは、ユーザーから入力されたテキストをレンダリングするために入力形式を使用しています
  • モジュールは入力形式を使用して、ユーザーから入力されたテキストをレンダリングしています

入力フィルターを使用してノードの本体をレンダリングする場合でも、次の 2 つのケースが考えられます。

  • ノードはページ内で単独でレンダリングされます (例: http://example.com/node/2 )
  • ページに複数のノードが表示されます (フロント ページに昇格したノードのリストを表示するフロント ページなど)。

入力フィルターを実装するモジュールは、それが呼び出されたエンティティを理解できず、現在のページのパスが必ずしもその情報を提供するとは限りません。たとえば、mymodule/disclaimer で ID が 2 のノードのコンテンツを表示するモジュールを作成したり、example_path/just_to_make_an_example で特定の基準に一致するノードからの抜粋を表示するビューを作成したりできます。

%author% をノード作成者のユーザー名に置き換えるなど、ノード本体の一部の単語を置き換える必要がある場合は、hook_node_view_alter()を実装する必要があります。

于 2013-05-03T13:40:40.053 に答える