Темизация формы создания/редактирования ноды в друпал

Рассмотрим один из способов темизации формы создания/редактирования ноды в друпале, путем перекрытия своим шаблоном.

(Актуально для Drupal 6)

В файле template.php перекрываем шаблон формы:

  1. function название_темы_theme($existing, $type, $theme, $path){
  2. return array(
  3. 'тип_материала_node_form' => array(
  4. 'arguments' => array('form' => NULL),
  5. 'template' => 'имя_шаблона'
  6. )
  7. );
  8. }

Создаем файл шаблона имя_шаблона.tpl.php в котором имеем доступный массив $form для темизации формы.

Теперь можно темизировать. Самый простой пример, завернем поле body в нужную нам обертку. Наш шаблон в результате будет выглядеть так:

  1. $form['body_field']['#prefix'] = '<div class="body-field-wrapper">';
  2. $form['body_field']['#suffix'] = '</div>';
  3. print drupal_render($form);

В Drupal 7 немного проще - используем функцию theme_form_alter(). Вот пример:

  1. function mytheme_form_alter(&$form, &$form_state, $form_id) {
  2.  
  3. if ($form_id == 'views_exposed_form') {
  4.  
  5. $form['field_adv_price_value']['min']['#title'] = t('from:');
  6. $form['field_adv_price_value']['max']['#title'] = t('to:');
  7.  
  8. $form['field_adv_roomsnumber_value']['min']['#title'] = t('from:');
  9. $form['field_adv_roomsnumber_value']['max']['#title'] = t('to:');
  10. }
  11.  
  12. if ($form_id == 'advertisement_node_form') {
  13.  
  14. global $user;
  15.  
  16. if ($user->uid == 0) {
  17. unset($form['field_adv_area']);
  18. unset($form['field_adv_roomsnumber']);
  19. unset($form['field_adv_description']);
  20. unset($form['field_adv_specification']);
  21. }
  22. }
  23. }

З.Ы.
При помощи модуля Devel можно посмотреть весь массив $form, хотя может кому-нибудь и простого print_r() хватит :)