Как задать форму ввода для конкретного типа материала

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

Аватар пользователя smirnov_da smirnov_da 5 августа 2011 в 18:02

Есть задача - темизировать форму ввода конкретного типа материалов. По аналогу с шаблоном вывода материалов (node-тип материала.tpl.php) Если создаем шаблон page-node-add.tpl.php - он отвечает за всю страницу, это не подходит. Как выйти на шаблон node/add/тип материала, чтобы не вбивать в page-node-add.tpl.php то, что уже задано page.tpl.php?

Комментарии

Аватар пользователя smirnov_da smirnov_da 5 августа 2011 в 20:23

gpK wrote:
например можно вынести повторяющиеся части тэмплэйтов в файлы .inc

Можно, понял, хороший вариант. Но почему для вывода есть возможность задать отдельным файлом именно то что нужно(node-тип материала.tpl.php), для ввода так не получится? Может форму ввода отдельным файлом как-то можно задать?

Аватар пользователя IStranger IStranger 5 августа 2011 в 23:55

Можно темизировать как форму определенного типа материала, так и вообще любую форму по ее Id (теоретически:)).
К примеру, следующими функциями в template.php:

/**
 * Регистрируем функцию темизации формы для материала типа NODETYPE
 */

function THEMENAME_theme() {
  return array(
    'NODETYPE_node_form' => array(
      'arguments' => array(
        'form' => NULL
      )
    )
  );
}
 
/**
 * Темизируем форму
 */

function THEMENAME_NODETYPE_node_form($form) {
  $form['menu']['#access'] = false;                 // скрываем блок "Параметры меню"
  $form['author']['#access'] = false;               // скрываем блок "Информация об авторе"
  $form['revision_information']['#access'] = false; // скрываем блок "Информация о редакции"
  $form['path']['#access'] = false;                 // скрываем блок "Параметры адреса"
  $form['options']['#access'] = false;              // скрываем блок "Параметры публикации"
 
  return drupal_render($form);
}

NODETYPE - системное название типа материала, для которого темизируется форма,
THEMENAME — название темы.
Например garland_story_node_form.

Так же темизируется любая форма друпала. Для этого вместо NODETYPE_node_form прописывается id нужной формы.
Чтобы наглядно посмотреть какие поля, с какими значениями передаются в форму, рекомендую модуль Devel.

PS: Theming the node/add form using template.php

Аватар пользователя smirnov_da smirnov_da 6 августа 2011 в 9:19

Это все прекрасно работает, только как в таком случае будет называться файл шаблона формы? Дальше с devel порядок работы ясен.

Аватар пользователя gpK gpK 6 августа 2011 в 21:18

все вышеописанное пишется в файл template.php в текущей теме. это уже и есть темизация формы.
кстати, InternetStranger, спасибо, дельный совет.

Аватар пользователя smirnov_da smirnov_da 8 августа 2011 в 12:02

Все получилось, спасибо. При темизации самой формы возник вопрос - при изменении порядка вывода полей, как обратиться к названию материала - $form['title']['#weight'] не работает?