Drupal формирует несколько узлов на одной страницеPhp

Кемеровские программисты php общаются здесь
Anonymous
Drupal формирует несколько узлов на одной странице

Сообщение Anonymous »

У меня есть представление, отображающее несколько узлов. Я хочу разместить форму узла под каждым отображаемым узлом. И node_add, и drupal_get_form непосредственно в template.php работают нормально, но я получаю формы с тем же идентификатором формы, что и NODETYPE_node_form, а проверка и отправка не работают должным образом.

Если бы вам пришлось разместить несколько форм узлов на одной странице, каков был бы ваш общий подход?

Прогресс на данный момент...< /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);
в модуле mymodule

Код: Выделить всё

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

Вернуться в «Php»