web-dev-qa-db-ja.com

hook_nodeapi()を使用するにはどうすればよいですか?

インターネットで例を見つけました: CCKフィールドを本文コンテンツに変換

_function riddle_nodeapi(&$node, $op, $teaser, $page) {
  if ($node->type == "historia") {
    switch ($op) {
      case 'view':
        if ($node->field_svar[0]['value'] != "" AND $page == 1) {
          $svar = '<form><fieldset class="collapsible collapsed">
            <legend>Svar</legend>
            <div>'.$node->field_svar[0]['value'].'</div>
            </fieldset></form>';

          $node->content['riddle'] = array(
            '#value' => $svar,
            '#weight' => 0,
          );

          if (is_array($node->content['field_svar'])) {
            unset($node->content['field_svar']);
          }
        }

        break;
    }
  }
}
_

次のコードの目的が何であるかわかりません。なぜそれを使用する必要があるのですか?

_ if (is_array($node->content['field_svar'])) {
   unset($node->content['field_svar']);
 }
_

hook_nodeapi()引数_$a3_および_a4_の用途は何ですか?
ビュー操作の場合、$ a3をtrueまたは1に設定すると、ボディはノードティーザーにのみ影響しますか?私は正しいですか?

4
enjoylife

モジュールがすでにCCKフィールドをレンダリングしており、Drupalがそのフィールドのコンテンツをレンダリングしないようにするため、次のコードが使用されます。

if (is_array($node->content['field_svar'])) {
  unset($node->content['field_svar']);
}

そのコードを使用しない場合、フィールドの内容は2回表示されます。1つはフィールドセットの内部、もう1つはそのフィールドセットの外部です。

hook_nodeapi()に使用される最後のパラメーターは、ドキュメントから次のように説明されています。

$ a3

  • 「ビュー」の場合、node_view()から$ teaserパラメーターを渡します。
  • 「validate」の場合、node_validate()から$ formパラメーターを渡します。

$ a4

  • 「ビュー」の場合、node_view()から$ pageパラメーターを渡します。

つまり、操作が「ビュー」の場合、Drupalがティーザーを表示している場合は$a3TRUEであり(Drupalが完全なノードコンテンツを表示している場合はFALSE)、ノードが次の場合は$a4はTRUEです。ページに単独で表示されている(ノードが同じページ内の他のノードと一緒に表示されている場合はFALSE)。
$a4に与えられたさまざまな値の意味を理解するために、Drupalがページを表示している場合、$a4TRUEです http://example.com/node/1 (同じページにノードのみが表示される場合); Drupalがフロントページを視覚化していて、フロントページに昇格したノードが複数ある場合、その値はFALSEです。

4
kiamlaluno