Темизация Inline entity form в Drupal

Average: 2.5 (4 votes)

При использовании Inline entityform периодически возникает необходимость сделать ее более красивой, более соответсвующей концепту сайта. Есть несколько способо реализации этого, сегодян я расскажу об одном из - использование шаблона темизации.

Так как  Inline entityform это обычная форма, значит у нее как миниму должен быть некий hook_alter. Смотрим документацию, которая кстати находиться в самом модуле - inline_entity_form.api.php. В документации нашел нужный hook - hook_inline_entity_form_entity_form_alter.

На входе которого как раз и подается наша inline form.

Следующий шаг добавляем функцию темизации


/**
 * hook_inline_entity_form_entity_form_alter
 */
function sm_inline_entity_form_entity_form_alter(&$entity_form, &$form_state) {
  // added theme function
  $entity_form['#theme'][] = 'inline_entity_form_entity_form_' . $entity_form['#bundle'];
  dpm($entity_form);
}

Чуть не забыл сказать, всю магию делаем в template.php нашей формы. 

Рассказываю что произошло, что мы сделали в предыдущем пункте? Мы добавили функцию темизаиции для нашей inline form, причем не только для одно а для всех. Функция модуля devel dpm() поможет нам изучить внутренности нашей Inline form 

Следующий шаг в нашей магии, это в template.php создать hook_theme и в нем объявить шаблон для нашей inline form 

/**
 * Implements hook_theme().
 */
function sm_theme($existing, $type, $theme, $path) {
  $items['inline_entity_form_entity_form_shoes'] = array(
    'render element' => 'form',
    'template' => 'inline-entity-form-entity-form-shoes',
    // this will set to module/theme path by default:
    'path' => drupal_get_path('theme', 'sm') . '/templates/inline_form',
  );
  return $items;
}

Так же обязательно создаем файл нашего шаблона и ложим его по кути указанным в 'path' hook_theme.

Далее я в шаблон вставляем следующий код


<?php

dpm($form);

?>

<!--Start inline-entity-form-entity-form-shoes.tpl.php-->

<!--@see sm_theme adn template.php-->

<div class="row">

  <?php print drupal_render_children($form); ?>

</div>

Далее смотрим что нам выдаст dpm(), далее используя drupal_render выводим поля в нужном нам порядке

Поделитесь статьей