Как можно программно создать форму для изменения значений ССК поля ноды
Иногда может потребоваться изменять значения какого-то CCK поля ноды не обновляя всю ноду.
Выкладываю заготовку для решения такой задачи (по мотивам тестового задания restyler).
В нижеприведенном коде создаются пути типа 'test-form/%node', на страницах с этими адресами выводится форма для заполнения одного CCK поля (сейчас захардкоденного, но легко меняется на выбираемое из админки или даже несколько полей) и кнопка сабмита для отправки формы. После отправки поле соответственного нода будет обновлено, в том числе работает с полями множественного выбора. Например, если зайти на страницу 'test-form/4' и есть такой нод и у него есть поле 'field_test', то после сабмита формы на этой странице у нода 4 в поле field_test будут обновленные значения.
Валидацию не делал, надо доделывать, если будете использовать где-то.
<?php
/**
* Implementation of hook_menu().
*/
function test_module_menu() {
$items = array();
$items['test-form/%node'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array('test_form', 1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function test_form(&$form_state, $node) {
$form['#node'] = $node;
$field_name = 'field_test';
$field = content_fields($field_name, $node->type);
$form['#field_info'][$field_name] = $field;
module_load_include('inc', 'content', 'includes/content.node_form');
$form_element = content_field_form($form, $form_state, $field);
$form += (array)$form_element;
$form['submit'] = array(