コメントを使用してコンテンツの値を変更する

私は、ユーザーが作成された後に編集できるようにしたくないコンテンツタイプを持っています。
1つの値を変更できるようにしたいと思っています。それは、コメントの選択ボックスを使用することです。たとえば、コンテンツタイプには優先順位フィールドがあります。ユーザーがコメントを残すと、同じオプションでコメントに選択ボックスが追加されます。

オプションボックスをノード自体のオプションと同期するにはどうすればよいですか?

Thanks

Kieran

ベストアンサー

コンテンツタイプが your_content_type で、モジュールの名前が
yourmodulename であるとすると、次のコードを使用できます。

特権を持たないユーザがコメントを投稿すると、ある状態が設定され、特権ユーザの状態選択UIが表示されます。どちらの場合も、状態はノードのCCK
field_erledigt_warten に保存されます。

<?php
/**
 * Implementation of hook_comment().
 * Fill a CCK field  in Drupal 6
 */
function yourmodulename_comment(&$comment, $op) {
  global $user;

  if (is_array($comment)) {
    $node = node_load($comment['nid']);
  }
  else {
    $node = node_load($comment->nid);
  }

  if ($node->type == 'your_content_type') {
    switch ($op) {
      case 'insert':
      case 'update':
        if (user_access('edit field_erledigt_warten')) {
         //QD-Mitarbeiter
          if (isset($comment['field_erledigt_warten']) && $comment['field_erledigt_warten']) {
            if ($node->field_erledigt_warten[0]['value'] != $comment['field_erledigt_warten']) {
              $node->field_erledigt_warten[0]['value'] = $comment['field_erledigt_warten'];
              drupal_set_message(t('Status wurde auf %v geändert.', array('%v' => $comment['field_erledigt_warten'])));
              node_save($node);
            }
          }
        } else {
         //Kundenaccount
          $node->field_erledigt_warten[0]['value'] = 'neu';
          node_save($node);
        }
        break;
    }
  }
}

/**
    Implementation of hook_form_alter
 * Add a input box to the comment form
 */
function yourmodulename_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'comment_form') {
    if (is_array($form) && isset($form['nid']) && is_array($form['nid'])) {
      $node = node_load($form['nid']['#value']);
    }
    if (isset($node) && is_object($node) && isset($node->type) &&
      $node->type == 'your_content_type' && user_access('edit field_erledigt_warten')) {
      $states = array_flip(array('some', 'values', 'come', 'here'));
      foreach($states as $text=>$index) $states[$text] = $text;
      $status = $node->field_erledigt_warten[0]['value'];
      $form['field_erledigt_warten'] = array(
        '#type' => 'select',
        '#title' => 'neuer Status dieser Forumseite',
        '#default_value' => $status,
        '#options' => $states,
      );
    } 
  }
}

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です