[Решено] Темизация страницы контактов, редактирование полей и т.д. (внутренний модуль Contact)

Главные вкладки

Аватар пользователя Cypher Cypher 13 апреля 2011 в 13:33

Первая версия сообщения (задача)
Доброго всем времени суток. Прошу наставить на путь истинный Smile
Хочу сделать следующую страницу:

Сверху вниз:
1) Несколько номеров телефонов
2) Адреса
3) Карта проезда
4) Форма обратной связи

Думаю создать новый тип материала для этой страницы, например contact-page. Через ССК добавить к нему поля для телефонов, для картинки карты и т.д. Создать такую страницу, затем tpl-файл для этого типа материала и в нем все расположить как надо. Это чтобы реализовать 1) - 3).
Для 4) думаю использовать встроенный модуль contact. Тут требуется переиминовать стандартные заголовки полей формы и немного переставить их.

Непонятки у меня следующие:
1] Как расположить на странице с моим типом contact-page саму форму обратной связи. Как её впихнуть туда, в tpl-файл? Smile
2] Если использовать стандартную страницу /contact, которую делает модуль contact, то как для неё создать шаблон, как назвать и т.д.? Devel Themer не предлагает шаблон-кандидата.
3] Как переиминовать стандартные заголовки формы и расположение полей? Пока что пытаюсь вникнуть в эту статью.

Прокомментируйте пожалуйста мой подход к формированию этой страницы контактов. Правильно ли копать начал?
Конечно же не против рассмотреть альтернативы, например для 4), ибо видел советы использовать другие модули. Smile

Вторая версия сообщения (попытка наковырять решение):
Имеется страница заданного типа материала. Под тип материала создан шаблон (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-апи.

Комментарии

Аватар пользователя Eugeny Eugeny 13 апреля 2011 в 17:54

в шаблон

<?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);
}
?>
Аватар пользователя Cypher Cypher 13 апреля 2011 в 19:31

Eugeny, низкий поклон вам! Smile
Спасибо! Работает.

Первая ошибка с

<?php
'contact_mail_page' => array( 'arguments' => array('form' => NULL), )
?>

ну видимо совсем глупая, так что не откажусь от ссылки типа "тебе стоит почитать вот это" или "погуглить это".

Сам пока пойду искать способ переформировать поля да заголовки.

Аватар пользователя Cypher Cypher 13 апреля 2011 в 20:46

Полностью разобрался с темизацией формы. Задача решена! Smile
Еще час назад я был полон грусти, а сейчас могу абсолютную красоту навести! xD
Вот тут у нас чудо мануал по темизации форм.
Тестовый примерчик:

<?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;
}
?>
Аватар пользователя AI AI 13 апреля 2011 в 21:44

Большое спасибо. Весьма кстати. Мучаю формы, да с такой же проблемой столкнулся. Форма search_block_form отрабатывает нормально, user_login_block сафсем никак... Буду воодушевляться вашими подвигами и... может быть будет все много лучше Wink