2012-07-04 2 views
5

Я действительно изо всех сил пытаюсь раздобыть Drupal Form API ... на самом деле Drupal в целом.Drupal 7 - Переопределение базовой формы HTML-маркировка

Вот моя проблема: я создал форму с рендерингом, однако то, что мне сейчас нравится, - это обертки div вокруг определенных элементов формы, поэтому я стилю свою форму таким образом, который подходит для моего сайт, а не какой-то стандартный дерьмо.

Может кто-нибудь, пожалуйста, помогите или, по крайней мере, в правильном направлении «хорошего» учебника, а не какую-то краткую и очень туманную чепуху, оштукатуренную по всему Интернету?

спасибо.

+0

Вы создали пользовательскую форму или хотите создать существующий? Попробуйте это [учебник] (http://www.jaypan.com/tutorial/themeing-drupal-7-forms-including-css-and-js) или [этот] (http://www.digett.com/blog/05/26/2011/how-theme-comment-form-drupal-7) –

+0

Я создал свою собственную пользовательскую форму, используя API формы, но я не могу ее стилизовать так, как я хочу, потому что мне нужно группировать нагрузку элемента, т.е. личные детали (имя, адрес, телефон и т. д. и т. д.). В основном я хочу, чтобы слайд части формы на экране, когда каждая часть заполняется, вот почему мне нужно добавить дополнительную HTML-надпись. –

+0

спасибо за ответ. Первое учебное пособие, отправленное JAYPAN, отлично работает после выпуска. Мне пришлось перезапустить модуль после определенных изменений. –

ответ

13

hook_form_alter - ваш друг здесь.

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

Ниже приведен пример с сайта я сделал в последнее время.

function bhha_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'user_login') {  
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 
    $form['name']['#title'] = Null; // Change text on form 
    $form['name']['#description'] = Null; // Change text on form 
    $form['name']['#attributes'] = array('placeholder' => t('username')); 
    $form['name']['#size'] = '30'; 
    $form['pass']['#title'] = Null; 
    $form['pass']['#description'] = Null; // Change text on form 
    $form['pass']['#attributes'] = array('placeholder' => t('password')); 
    $form['pass']['#size'] = '30'; 
    //$form['actions']['submit']['#value'] = t('password'); 
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/Login.png'); 
    $form['links']['#markup'] = '<a class="user-password" href="'.url('user/password').'">' . t('Forgot your password?') . '</a>'; // Remove Request New Password from Block form 
    $form['links']['#weight'] = 540; 
    } 
} 

Осмотрите свой код, чтобы получить форму, в которой вы хотите указать идентификатор темы. Замените символы подчеркивания на дефисы, и вы сможете использовать приведенный выше пример, чтобы делать то, что хотите.

В этом самом основном, я предполагаю, что пример будет:

function THEME_NAME_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'FORM_ID') {  
     // Adds a wrapper div to the whole form 
    $form['#prefix'] = '<div class="loginForm">'; 
    $form['#suffix'] = '</div>'; 

     // Adds a wrapper div to the element NAME 
    $form['name']['#prefix'] = '<div class="formRow">'; 
    $form['name']['#suffix'] = '</div>'; 
    } 
} 
+0

спасибо за помощь, которую действительно помогла функция alter, попробовали некоторые другие способы сделать это. –

+0

Что вы делаете, когда у вас есть динамический список флажков (из таксономических терминов), и вы не можете жестко записать свое имя. У меня есть #type флажки с динамическим числом #options. ATM каждый вариант показывает ненужную обертку div, я не хочу никакой обертки вообще. Мне нужен полный контроль. –

2

несколько способов сделать это. Например

  1. Если вы хотите, чтобы переписать разметку на уровне поля, можно использовать field.tpl.php или template_preprocess_field().
  2. Если вы хотите изменить прилагаемую разметку своей формы (хотя мне было бы интересно, почему, поскольку стандартная разметка Drupal очень удобна для стилей), вы хотите зарегистрировать функции темы и обработать разметку таким образом. Вот nice article, который подробно описывает это.
Смежные вопросы