Тематические формы в профиле 2


Недавно я был введен в модуль Profile2 для добавления полей в процесс регистрации, и я думаю, что это просто решает мою проблему. Кто-нибудь может показать мне, как оформить поля? Все, что мне нужно, это файлы .tpl, но я не думаю, что они есть, так как это форма, поэтому она использует API формы. Хотя я могу ошибаться.

 2
Author: enchance, 2011-06-21

3 answers

По умолчанию форма будет отображаться с использованием системы визуализации форм, которая не включает файлы шаблонов, вместо этого используются такие функции, как theme_textfield. Вы можете разрешить отображение всей формы или определенных элементов формы с помощью функции пользовательской темы с помощью клавиши #theme.

Для определенных типов полей это может быть опасно, так как они требуют определенной разметки.

 3
Author: googletorp, 2011-06-21 09:15:36

Ах да, я тоже когда-то думал, что API форм - это единственный способ стилизовать мои формы. Лично я думаю, что это боль в шее - возиться с крючками form_alter, пытаясь изменить элементы и добавить разметку HTML, необходимую для оформления вашей формы; Я бы предпочел просто использовать один.tpl.php досье на все это дело. И низко, и вот, ты можешь!

В следующем методе я определяю переменные из формы, которые могут быть выведены в файле шаблона, чтобы соответствовать любой структуре HTML, которую вы хотите. Это предполагает знание структуры формы. В этом случае я предполагаю, что структура вашей формы определена в нескольких местах, в зависимости от того, какие поля составляют ваши пользователи. Я бы предложил использовать hook_form_alter в вашем template.php распечатать массив форм, чтобы вы могли получить идентификатор формы и всю информацию об элементах.

Для этого метода я поместил весь свой код в template.php, но вы можете так же легко создать собственный модуль для этого.

  1. Добавьте тему hook_theme() реализация

    function YOURTHEME_theme($existing, $type, $theme, $path){
          return array(
            'YOUR_FORM_ID' => array(
              'render_element' => 'form',
              'template' => 'user-profile-form',
              'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
              //add '/templates' only if you store template files in an additional folder
            ),
          );
        }
    

    Это сообщает системе тематизации Drupal, что в вашей ТЕМЕ/шаблонах есть файл шаблона, ожидающий его.

  2. Далее мы определим некоторые переменные для передачи в этот шаблон в функции hook_preprocess_HOOK. Мы можем найти структурированный массив формы в $ variables['форма'] и назначить элементы формы переменным, которые мы хотели бы разбросать по нашему tpl.php файл.

    function YOURTHEME_preprocess_YOUR_FORM_ID(&$variables) {
        $variables['rendered'] = drupal_render($variables['form']['some_form_element']);
        $variables['rendered'] = drupal_render($variables['form']['some_form_element_2']);
      }
    

    В этом примере оба выбранных элемента формы будут помещены в переменная называется "визуализированная". Не зная структуры формы, указанной в Профиле2, я не знаю, как будут называться эти элементы; еще раз проверьте структуру формы!

  3. Теперь, когда мы определили переменную, мы можем вывести ее в файл шаблона. Создайте файл шаблона с именем YOUR-FORM-ID.tpl.php в разделе "ВАША ТЕМА/шаблоны". Это демонстрационный пример:

    <div id="new-form">
      <?php echo $rendered; ?>
    </div>
    

При посещении страницы, на которой находится форма Profile2, теперь вы должны видеть только элемент some_form_element и some_form_элемент_2. Создайте различные переменные в функции предварительной обработки, чтобы отделить элементы формы и разместить их там, где вы хотите в YOUR-FORM-ID.tpl.php файл, добавляя любую разметку, которая вам нравится. Если вам нужно изменить определенные параметры каждого поля, вы можете поиграть с каждым элементом по отдельности, прежде чем он будет отображен в функции предварительной обработки, изменив любой из тегов API формы.

Похоже, здесь много информации; дайте мне знать, если у вас возникнут какие-либо вопросы!

 1
Author: areynolds, 2011-09-07 06:32:49

Это правильный код -

function YOURTHEME_theme($existing, $type, $theme, $path){
  return array(
    'YOUR_FORM_ID' => array(
      'render element' => 'form',
      'template' => 'user-profile-form',
      'path' => drupal_get_path('theme', 'YOURTHEME') . '/templates', 
      //add '/templates' only if you store template files in an additional folder
    ),
  );
}
 0
Author: Sagar J, 2011-09-09 11:34:59