[РЕШЕНО] Темизация формы добавления ноды

Главные вкладки

Аватар пользователя voodoo_dn voodoo_dn 13 мая 2014 в 14:30

Добрый день. Есть форма добавления ноды, которая кроме админки, должна выводиться на главной странице сайта. Форма добавления в админке - стандартная, со всеми полями. Форма добавления на главной странице имеет только текстовое поле и кнопку сохранить(т.е. свой шаблон) + ко всему эта форма должна сабмитится аяксом.

Всё готово, всё хорошо, но только из-за:

<?php
function hook_theme()
{
     return array(
        
'note_node_form' => array(
           
'arguments' => array('form' => NULL),
           
'template' => 'templates/page--node--add--note',
           
'render element' => 'form',
           ),
    );
}
?>

получается так, что в админке такая же форма как на главной странице. Можно ли как-то указать что в админке стандартный шаблон, а на главной - другой?
Я пытался конечно проверять адрес страницы и ставить условие перед return, но всё это до одного места. По ходу всё кэшируется и срабатывает только после чистки кэша.

Комментарии

Аватар пользователя sergeybelya sergeybelya 13 мая 2014 в 14:53

Если нужна простая форма из поля и кнопки - то проще ее создать своим модулем и вывести в блок, а в обработчике прописать создание ноды. Или можно сделать вообще без кодинга через Webform и Rules.

Аватар пользователя Chyvakoff Chyvakoff 13 мая 2014 в 16:05

voodoo_dn wrote:
Ну я так и делал Smile Свой модуль, выводит в блок.

Ну так в чём трабла то тогда?)) В сабмиттере своей формы пишешь node_save и будет тебе счастье.

Аватар пользователя voodoo_dn voodoo_dn 13 мая 2014 в 16:09

Проблема в том что, открывая /node/add/note - я вижу такой же шаблон, как и в ноде для главной страницы. По /node/add/note должна открываться стандартная форма добавления с кучей полей для заполнения, а на главной - другой шаблон. Я не могу разграничить выбор шаблона, в этом вся проблема. Для данного типа нод, он один, хоть из админки вызвали или на главной нарисовано.

Аватар пользователя Chyvakoff Chyvakoff 13 мая 2014 в 16:12

"voodoo_dn" wrote:
Проблема в том что, открывая /node/add/note - я вижу такой же шаблон, как и в ноде для главной страницы.

Это через hook_theme этого добились? Убирайте это.

Как я вижу решение задачи:
Свой модуль создаёт блок.
В блоке своя форма.
У формы свой обработчик.
Обработчик принимает поля формы, создаёт объект ноды и делает node_save($node);
Profit

Стандартная форма вообще не при делах.

Аватар пользователя Chyvakoff Chyvakoff 13 мая 2014 в 22:16

"voodoo_dn" wrote:
Форма добавления на главной странице имеет только текстовое поле и кнопку сохранить

Ради этого городить шаблон?
Можно через темизирующую функцию.

//это в блоке
$form = drupal_get_form('custom_form');
$block['content'] = theme('render_custom_node_form', array('form' => $form));

//в модуле
function mymodule_theme($existing, $type, $theme, $path) {
  $path = drupal_get_path('module', 'mymodule') . '/templates';
  return array(
    "render_custom_node_form" => array(
      "template" => "page--node--add--note",
      "path" => $path,
      "arguments" => array('form'=> '')
    )
  );
}

Ну и по идее должно работать.

Аватар пользователя voodoo_dn voodoo_dn 14 мая 2014 в 16:36

Форма отрисовывается так:
в шаблоне


<?php
module_load_include
('inc''node''node.pages');
echo 
drupal_render($form['messages']);
echo 
drupal_render($form['title']);
echo 
drupal_render($form['language']);
echo 
drupal_render($form['body']);
echo 
drupal_render($form['form_id']);
echo 
drupal_render($form['nid']);
echo 
drupal_render($form['uid']);
echo 
drupal_render($form['form_build_id']);
echo 
drupal_render($form['form_token']);
echo 
drupal_render($form['actions']);
?>

А drupal_render не подходит ибо форма передаётся в hook_theme.

Аватар пользователя Chyvakoff Chyvakoff 15 мая 2014 в 9:56

voodoo_dn wrote:
Форма отрисовывается так:
в шаблоне


<?php
module_load_include
('inc''node''node.pages');
echo 
drupal_render($form['messages']);
echo 
drupal_render($form['title']);
echo 
drupal_render($form['language']);
echo 
drupal_render($form['body']);
echo 
drupal_render($form['form_id']);
echo 
drupal_render($form['nid']);
echo 
drupal_render($form['uid']);
echo 
drupal_render($form['form_build_id']);
echo 
drupal_render($form['form_token']);
echo 
drupal_render($form['actions']);
?>

А drupal_render не подходит ибо форма передаётся в hook_theme.

Ты чё, каждый элемент формы отдельно рендеришь?
Почему drupal_render не подходит и как его hook_theme может ограничивать?

"arguments" => array('form'=> '')

Тут в шаблон передаётся аргумент,типа string. В него можно положить уже отрендеренную форму. Можно хоть 10 отрендеренных вьюсов.

Аватар пользователя drupby drupby 15 мая 2014 в 10:49

"Chyvakoff" wrote:
function mymodule_theme($existing, $type, $theme, $path) {
$path = drupal_get_path('module', 'mymodule') . '/templates';
return array(
"render_custom_node_form" => array(
"template" => "page--node--add--note",
"path" => $path,
"arguments" => array('form'=> '')
)
);
}

function mymodule_theme($existing, $type, $theme, $path) {
  $module_path = drupal_get_path('module', 'mymodule') . '/templates';
  return array(
    'note_node_form' => array(
      'render element' => 'form',
      'template' => 'page--node--add--note',
      'path' => $module_path,
    )
  );
}