私は、ユーザーが作成された後に編集できるようにしたくないコンテンツタイプを持っています。
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,
);
}
}
}