Если бы вам пришлось разместить несколько форм узлов на одной странице, каков был бы ваш общий подход?
Прогресс на данный момент...< /h2>
в template.php во время предварительной обработки узла
$author_profile и $content установлены заранее.
Код: Выделить всё
$unique = $vars['node']->nid;
$node = new StdClass();
$node->uid = $vars['user']->uid;
$node->name = $vars['user']->name;
$node->type = 'review';
$node->language = '';
$node->title = t('Review of ') . $vars['node']->realname . t(' by ') . $vars['user']->realname . t(' on ') . $content->title;
$node->field_review_to_A[0]['nid'] = $nodeA->nid;
$node->field_review_to_B[0]['nid'] = $vars['node']->nid;
$node->field_review_to_profile[0]['nid'] = $author_profile->nid;
if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}
//$vars['A_review_form'] = drupal_get_form('review_node_form', $node);
$vars['A_review_form'] = mymodule_view($node, $unique);
Код: Выделить всё
function mymodule_view($node, $unique) {
if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}
$output = drupal_get_form('review_node_form_' . $unique, $node);
return $output;
}
function mymodule_forms($form_id, $args) {
$forms = array();
if (strpos($form_id, "review_node_form_") === 0) {
$forms[$form_id] = array('callback' => 'node_form');
}
return $forms;
}
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (isset($form['type']) && isset($form['#node']) && $form_id != $form['type']['#value'] .'_node_form' && $form['type']['#value'] == 'review') {
$type = content_types($form['#node']->type);
if (!empty($type['fields'])) {
module_load_include('inc', 'content', 'includes/content.node_form');
$form = array_merge($form, content_form($form, $form_state));
}
$form['#pre_render'][] = 'content_alter_extra_weights';
$form['#content_extra_fields'] = $type['extra'];
//$form['#id'] = $form_id;
//$form['#validate'][0] = $form_id . '_validate';
$form['title']['#type'] = 'value';
$form['field_review_to_A']['#type'] = 'value';
$form['field_review_to_B']['#type'] = 'value';
$form['field_review_to_profile']['#type'] = 'value';
}
}
Мой подход к обобщению неясных вопросов...
- Хорош ли этот общий подход для отображения нескольких форм узлов на одной странице?
- Можно ли копировать/вставлять код из контента Функция модуля content_form_alter в функции mymodule_form_alter? Не будет ли это тормозить работу, если модуль контента будет обновлен?
- Должен ли я установить $form['#id']? Без него все формы имеют одинаковый идентификатор HTML-формы node_form, при этом идентификатор уникален, например, review_node_form_254. Дело в том, что нет никакой разницы в том, как подается форма. Установка $form['#validate'][0], похоже, тоже не влияет на ситуацию. Может быть, мне следует установить для $form[button]['#submit'][0] что-то другое? Теперь это node_form_submit.
- Почему проверка не работает даже с уникальным идентификатором формы и функцией проверки формы? Если я отправлю последнюю форму без обязательного поля, во всех предыдущих формах определенные поля станут красными. должен ли я создать свою собственную функцию проверки? какой уровень - форма или поле? Есть какие-нибудь советы, с чего начать?
Подробнее здесь: https://stackoverflow.com/questions/171 ... n-one-page