web-dev-qa-db-ja.com

検索でトークンコンテンツにインデックスを付けることは可能ですか?

トークンモジュールとトークンフィルターモジュールを使用すると、ノードの本体にトークンを配置できます。

訪問者がコンテンツを検索するとき、ページに表示されているものは、どのように配置されていても、見つけたいものです。ただし、トークンはノードがレンダリングされる前にのみ置き換えられます。検索メカニズムがトークンの内容にインデックスを付けることは可能ですか?

3
Leandro

検索インデックスには、ノードがレンダリングされた後のノードのコンテンツが含まれます。

node_update_index()hook_update_index() の実装であり、検索インデックスを更新する必要があるときに呼び出されるフックです。 _ node_index_node() を呼び出します。これには次のコードが含まれています。

_  $node = node_load($node->nid);

  // ...

  // Render the node.
  $build = node_view($node, 'search_index');
  unset($build['#theme']);
  $node->rendered = drupal_render($build);

  $text = '<h1>' . check_plain($node->title) . '</h1>' . $node->rendered;

  // ...

  // Update index
  search_index($node->nid, 'node', $text);
_

同様のコードが_node_index_node() for Drupal 6に存在します。

_  $node = node_load($node->nid);

  // ...

  // Build the node body.
  $node->build_mode = NODE_BUILD_SEARCH_INDEX;
  $node = node_build_content($node, FALSE, FALSE);
  $node->body = drupal_render($node->content);

  $text = '<h1>' . check_plain($node->title) . '</h1>' . $node->body;

  // ...

  // Update index
  search_index($node->nid, 'node', $text);
_

あなたの場合、ノード本体に[global:test]などのトークンが含まれ、その内容がtestである場合、検索インデックスには[global:test]ではなくtestが含まれます。

2
kiamlaluno