Кастомизация контактной формы сайта на Drupal (добавление полей телефона, организации и IP)

Есть отличное простое решение, позволяющее разработчику быстро и просто поправить стандартный функционал Drupal в части кастомизации контактной формы обратной связи. Взято отсюда — http://www.sooource.net/vstavit-polya-v-kontaknuyu-formu-drupal (спасибо — автору!), я применил его у себя на сайте с небольшими исправлениями в части добавления поля IP-адреса:

Файл sn_cff.info
=============
name = SN Contact form field
description = Пример добавления дополнительного поля в контактную форму хуком hook_form_FORM_ID_alter().
core = 7.x
dependencies[] = contact

Файл sn_cff.module
================

<?php
/**
* Реализация крючка под названием hook_form_contact_site_form_alter().
* Эта функция добавляет поля «Ваша организация» и «Телефон»
* в стандартную контакную форму сайта. Подробнее на http://api.drupal.org.
* См. описание использования hook_form_FORM_ID_alter().
*/
function sn_cff_form_contact_site_form_alter(&$form, &$form_state, $form_id) {
# Добавляем поле, где посетитель/клиент должен указать организацию,
# которую он как будто бы представляет:
$form[‘organization’] = array( // — идентификатор поля.
‘#type’ => ‘textfield’, // — тип: однострочное текстовое поле.
‘#maxlength’ => 60, // — атрибут длины «инпута».
‘#title’ => ‘Ваша организация’, // — заголовок «инпута».
‘#required’ => true // — к заполнению обязательно.
);

# Добавляем поле, где посетитель/клиент должен указать свой телефон:
$form[‘phone’] = array(
‘#type’ => ‘textfield’,
‘#maxlength’ => 60,
‘#title’ => ‘Телефон’
);

# Добавляем поле с IP клиента :
$form[‘ip’] = array(
‘#type’ => ‘hidden’
);

# Определяем порядок элементов управления контактной формы, также включая и те, что были по умолчанию:
$order = array(‘name’, ‘mail’, ‘phone’, ‘organization’, ‘subject’, ‘cid’, ‘message’, ‘ip’, ‘copy’, ‘actions’);
# Применяем изменения, переаписывает свойство #weight всех элементов:
foreach($order as $key => $field) :
$form[$field][‘#weight’] = $key;
endforeach;
}
/**
* Реализация крючка под названием hook_mail().
* Он крайне необходим потому, как поля, уже созданные нами
* выше, должны также быть отправлены по месту назначения.
*/
function sn_cff_mail_alter(&$message) {
if ($message[‘id’] == ‘contact_page_mail’ || $message[‘id’] == ‘contact_page_autoreply’) :
$message[‘body’][] =’Организация: «‘. $message[‘params’][‘organization’]. ‘»‘;
$message[‘body’][] =’Телефон: ‘. $message[‘params’][‘phone’];
$message[‘body’][] =’IP: ‘. $_SERVER[‘REMOTE_ADDR’];
endif;
}

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *