Первая версия сообщения (задача)
Доброго всем времени суток. Прошу наставить на путь истинный
Хочу сделать следующую страницу:
Сверху вниз:
1) Несколько номеров телефонов
2) Адреса
3) Карта проезда
4) Форма обратной связи
Думаю создать новый тип материала для этой страницы, например contact-page. Через ССК добавить к нему поля для телефонов, для картинки карты и т.д. Создать такую страницу, затем tpl-файл для этого типа материала и в нем все расположить как надо. Это чтобы реализовать 1) - 3).
Для 4) думаю использовать встроенный модуль contact. Тут требуется переиминовать стандартные заголовки полей формы и немного переставить их.
Непонятки у меня следующие:
1] Как расположить на странице с моим типом contact-page саму форму обратной связи. Как её впихнуть туда, в tpl-файл?
2] Если использовать стандартную страницу /contact, которую делает модуль contact, то как для неё создать шаблон, как назвать и т.д.? Devel Themer не предлагает шаблон-кандидата.
3] Как переиминовать стандартные заголовки формы и расположение полей? Пока что пытаюсь вникнуть в эту статью.
Прокомментируйте пожалуйста мой подход к формированию этой страницы контактов. Правильно ли копать начал?
Конечно же не против рассмотреть альтернативы, например для 4), ибо видел советы использовать другие модули.
Вторая версия сообщения (попытка наковырять решение):
Имеется страница заданного типа материала. Под тип материала создан шаблон (node-тип.tpl.php).
Пытаюсь в нижнюю часть страницы добавить форму обратной связи (что реализуется модулем contact).
Пытаюсь править её по этому мануалу. В template.php добавляю:
<?php
function тема_theme() {
return array(
'user_profile_form' => array(
'arguments' => array('form' => NULL),
),
);
}
?>
Пишу тестовую функцию:
<?php
function тема_user_profile_form($form)
{
echo ("If u see it...");
print_r($form);
}
?>
В нужной части файла node-тип.tpl.php вызываю:
<?php
тема_user_profile_form($contact_mail_page)
?>
Выводится только сообщение из echo. Что-то не так с аргументом?
Его получил из скрытого поля формы, как сказанно в мануале.
Подскажите, пожалуйста, что может быть не так?
Как узнать идентификатор нужной формы?
Решение (спасибо Eugeny):
В node-тип.tpl.php вставляем:
<?php
module_load_include('inc', 'contact', 'contact.pages');
print '<div id="contact-form">' . drupal_get_form('contact_mail_page') . '</div>';
?>
В template.php добавляем (или дополняем массив если уже имеется соответствующая функция):
<?php
function ваша_тема_theme() {
return array(
'contact_mail_page' => array(
'arguments' => array('form' => NULL),
),
);
}
?>
Туда же в template.php добавляем функцию
<?php
function ваша_тема_contact_mail_page($form)
{
dprint_r($form); /*смотрим что внутри*/
$output = '';
$form['name']['#title'] = "Новенькое имя";
$form['name']['#title'] = "Новенький дефолт валью";
$form['name']['#required'] = 0; /*Делаем поле не обязательным*/
$form['name']['#prefix'] = '<div class="wrapper">'; /*делаем обертку одного поля*/
$form['mail']['#suffix'] = '</div>';
$output .= drupal_render($form);
return $output;
}
?>
Смотрите так же годный мануал по form-апи.
Комментарии
в шаблон
<?php
module_load_include('inc', 'contact', 'contact.pages');
print '<div id="contact-form">' . drupal_get_form('contact_mail_page') . '</div>';
?>
в template.php
<?php function ваша_тема_theme() {
return array(
'contact_mail_page' => array(
'arguments' => array('form' => NULL),
),
);
}
function
ваша_тема_contact_mail_page($form) {$output = '';
$output .= drupal_render($form);
return $output; //return print_r($form);
}
?>
Eugeny, низкий поклон вам!
Спасибо! Работает.
Первая ошибка с
<?php
'contact_mail_page' => array( 'arguments' => array('form' => NULL), )
?>
ну видимо совсем глупая, так что не откажусь от ссылки типа "тебе стоит почитать вот это" или "погуглить это".
Сам пока пойду искать способ переформировать поля да заголовки.
Полностью разобрался с темизацией формы. Задача решена!
Еще час назад я был полон грусти, а сейчас могу абсолютную красоту навести! xD
Вот тут у нас чудо мануал по темизации форм.
Тестовый примерчик:
<?php
$form['name']['#title'] = "Новенькое имя";
function тема_contact_mail_page($form) {
dprint_r($form); /*смотрим что внутри*/
$output = '';
$form['name']['#title'] = "Новенький дефолт валью";
$form['name']['#required'] = 0; /*Делаем поле не обязательным*/
$form['name']['#prefix'] = '<div class="wrapper">'; /*делаем обертку одного поля*/
$form['mail']['#suffix'] = '</div>';
$output .= drupal_render($form);
return $output;
}
?>
Большое спасибо. Весьма кстати. Мучаю формы, да с такой же проблемой столкнулся. Форма search_block_form отрабатывает нормально, user_login_block сафсем никак... Буду воодушевляться вашими подвигами и... может быть будет все много лучше
Рад помочь
Приятно знать, что переоформление и апдейты топика могут пригодиться.
У меня ничего не работает!
Совсем не понимаю что Вы сделали, в API вообще другой способ!!!