Joomla 2.5 Как добавить дополнительное поле в форму обратной связи?
Если возникла необходимость добавить дополнительно поле в форму обратной связи, скажем добавить поле "Ваш Skype", то нам будет необходимо внести изменения в четыре файла:
1. components/com_contact/models/forms/contact.xml
Открываем файл в редакторе и в нужное нам место, например между полями имейл и тема сообщения вставляем следующий код:
<field name="contact_skype"
type="skype"
id="contact-skype"
size="30"
description="COM_CONTACT_SKYPE_DESC"
label="COM_CONTACT_SKYPE_LABEL"
filter="string"
required="true"
/>
Сохраняем, закрываем, перезаписываем существующий файл.
Повторю еще раз:
Начиная с 13 строки, было:
<field name="contact_email"
type="email"
id="contact-email"
size="30"
description="COM_CONTACT_EMAIL_DESC"
label="COM_CONTACT_EMAIL_LABEL"
filter="string"
validate="contactemail"
required="true"
/>
<field name="contact_subject"
type="text"
id="contact-emailmsg"
size="60"
description="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC"
label="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL"
filter="string"
validate="contactemailsubject"
required="true"
/>
Стало:
<field name="contact_email"
type="email"
id="contact-email"
size="30"
description="COM_CONTACT_EMAIL_DESC"
label="COM_CONTACT_EMAIL_LABEL"
filter="string"
validate="contactemail"
required="true"
/>
<field name="contact_skype"
type="skype"
id="contact-skype"
size="30"
description="COM_CONTACT_SKYPE_DESC"
label="COM_CONTACT_SKYPE_LABEL"
filter="string"
required="true"
/>
<field name="contact_subject"
type="text"
id="contact-emailmsg"
size="60"
description="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC"
label="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL"
filter="string"
validate="contactemailsubject"
required="true"
/>
Теперь Joomla "будет знать о наличии поля Skype"
2. components/com_contact/controllers/contact.php
Открываем файл и приблизительно на 136 строке видим:
$name = $data['contact_name'];
$email = $data['contact_email'];
$subject = $data['contact_subject'];
$body = $data['contact_message'];
// Prepare email body
$prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.' <'.$email.'>'."\r\n\r\n".stripslashes($body);
Заменяем на:
$name = $data['contact_name'];
$email = $data['contact_email'];
$skype = $data['contact_skype'];
$subject = $data['contact_subject'];
$body = $data['contact_message'];
// Prepare email body
$prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.", "."E-mail: ".$email."\n"."Skype: ".$skype."\r\n\r\n".stripslashes($body);
Теперь письмо будет приходить не только с номером отправителя, но и будет иметь удобочитаемый вид, в отличии от оригинала.
3. components/com_contact/views/contact/tmpl/default_form.php
Добавляем поле Skype непосредственно в форму контакта на сайте:
Открываем файл, находим 26 строку, и делаем следующее
было:
<dt><?php echo $this->form->getLabel('contact_email'); ?></dt>
<dd><?php echo $this->form->getInput('contact_email'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_subject'); ?></dt>
<dd><?php echo $this->form->getInput('contact_subject'); ?></dd>
стало:
<dt><?php echo $this->form->getLabel('contact_email'); ?></dt>
<dd><?php echo $this->form->getInput('contact_email'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_skype'); ?></dt>
<dd><?php echo $this->form->getInput('contact_skype'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_subject'); ?></dt>
<dd><?php echo $this->form->getInput('contact_subject'); ?></dd>
4. language/ru-RU/ru-RU.com_contact.ini
Правим языковой файл. Это тождественно для всех языковых файлов, всех используемых на сайте языков. Для английского будет соответственно language/en-EN/en-EN.com_contact.ini.
Открываем файл и чтобы не путаться в дальнейшем, в самый конец вставляем две строчки:
COM_CONTACT_SKYPE_DESC="Введите ваш Skype" // Описание для заполняемого поля формы
COM_CONTACT_SKYPE_LABEL="Skype" //Отображаемое в форме обратной связи наименование поля
Удачи!!
1. components/com_contact/models/forms/contact.xml
Открываем файл в редакторе и в нужное нам место, например между полями имейл и тема сообщения вставляем следующий код:
<field name="contact_skype"
type="skype"
id="contact-skype"
size="30"
description="COM_CONTACT_SKYPE_DESC"
label="COM_CONTACT_SKYPE_LABEL"
filter="string"
required="true"
/>
Сохраняем, закрываем, перезаписываем существующий файл.
Повторю еще раз:
Начиная с 13 строки, было:
<field name="contact_email"
type="email"
id="contact-email"
size="30"
description="COM_CONTACT_EMAIL_DESC"
label="COM_CONTACT_EMAIL_LABEL"
filter="string"
validate="contactemail"
required="true"
/>
<field name="contact_subject"
type="text"
id="contact-emailmsg"
size="60"
description="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC"
label="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL"
filter="string"
validate="contactemailsubject"
required="true"
/>
Стало:
<field name="contact_email"
type="email"
id="contact-email"
size="30"
description="COM_CONTACT_EMAIL_DESC"
label="COM_CONTACT_EMAIL_LABEL"
filter="string"
validate="contactemail"
required="true"
/>
<field name="contact_skype"
type="skype"
id="contact-skype"
size="30"
description="COM_CONTACT_SKYPE_DESC"
label="COM_CONTACT_SKYPE_LABEL"
filter="string"
required="true"
/>
<field name="contact_subject"
type="text"
id="contact-emailmsg"
size="60"
description="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC"
label="COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL"
filter="string"
validate="contactemailsubject"
required="true"
/>
Теперь Joomla "будет знать о наличии поля Skype"
2. components/com_contact/controllers/contact.php
Открываем файл и приблизительно на 136 строке видим:
$name = $data['contact_name'];
$email = $data['contact_email'];
$subject = $data['contact_subject'];
$body = $data['contact_message'];
// Prepare email body
$prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.' <'.$email.'>'."\r\n\r\n".stripslashes($body);
Заменяем на:
$name = $data['contact_name'];
$email = $data['contact_email'];
$skype = $data['contact_skype'];
$subject = $data['contact_subject'];
$body = $data['contact_message'];
// Prepare email body
$prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.", "."E-mail: ".$email."\n"."Skype: ".$skype."\r\n\r\n".stripslashes($body);
Теперь письмо будет приходить не только с номером отправителя, но и будет иметь удобочитаемый вид, в отличии от оригинала.
3. components/com_contact/views/contact/tmpl/default_form.php
Добавляем поле Skype непосредственно в форму контакта на сайте:
Открываем файл, находим 26 строку, и делаем следующее
было:
<dt><?php echo $this->form->getLabel('contact_email'); ?></dt>
<dd><?php echo $this->form->getInput('contact_email'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_subject'); ?></dt>
<dd><?php echo $this->form->getInput('contact_subject'); ?></dd>
стало:
<dt><?php echo $this->form->getLabel('contact_email'); ?></dt>
<dd><?php echo $this->form->getInput('contact_email'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_skype'); ?></dt>
<dd><?php echo $this->form->getInput('contact_skype'); ?></dd>
<dt><?php echo $this->form->getLabel('contact_subject'); ?></dt>
<dd><?php echo $this->form->getInput('contact_subject'); ?></dd>
4. language/ru-RU/ru-RU.com_contact.ini
Правим языковой файл. Это тождественно для всех языковых файлов, всех используемых на сайте языков. Для английского будет соответственно language/en-EN/en-EN.com_contact.ini.
Открываем файл и чтобы не путаться в дальнейшем, в самый конец вставляем две строчки:
COM_CONTACT_SKYPE_DESC="Введите ваш Skype" // Описание для заполняемого поля формы
COM_CONTACT_SKYPE_LABEL="Skype" //Отображаемое в форме обратной связи наименование поля
Удачи!!
Этот комментарий был удален администратором блога.
ОтветитьУдалитьА можно поподробнее? Что именно не получилось?
УдалитьВсе сделал по инструкции, но дополнительное поле не появилось.
ОтветитьУдалитьcomponents/com_virtuemart/views/askquestion/tmpl/form.php
ОтветитьУдалитьвот эта форма, ее изменил. Но надо изменить еще что-то что бы в письмо которое приходит к админу приходила информация которую внесли в дополнительном поле
Привет! Работаем со следующими файлами:
Удалитьcomponents\com_contact\controllers\contact.php - письмо, которое приходит на почту
components\com_contact\views\contact\tmpl\default_form.php
components\com_contact\models\forms\contact.xml
language\ru-RU\ru-RU.com_contact.ini
А как, к примеру, добавить выпадающий список,а не поле ввода?
ОтветитьУдалитьПодскажите пожалуйста, как добавить иконки к новым, созданным полям?
ОтветитьУдалитьНу как вариант в стилях прописать картинку
УдалитьДля com_content по умолчанию нет стиля, и в моем кастомизированном шаблоне тоже. Нашел упоминания значков внутри самого компонента, но как добавить к новым полям не разобрался :(
ОтветитьУдалитьДобрый день, не пойму в чем дело, все сделала как тут, добавила поля, все работает, отправляет, но на почту приходит только Возраст: и пустое значение.... Можете подсказать в чем причина?
ОтветитьУдалитьАналогично поле Skype в письме приходит пустым, в чем может быть дело?
УдалитьВозможно нужно править шаблон тоже. Шаблон может свои файлы использовать.
ОтветитьУдалитьа не подскажите какие именно?
ОтветитьУдалитьКак добавить дополнительное поле в форму обратной связи в Joomla 3?
ОтветитьУдалитьНе работаю с Joomla 3
УдалитьДелал по этой статье для Joomla 3.1.5. Всё работает замечательно!
УдалитьБольшое спасибо автору!
Спасибо автору, на Joomla 3.1.5 все заработало, правда пришлось еще изменить файл в templates\имя_шаблона\warp\systems\joomla\layouts\com_contact\contact\default_form.php, так как поле не появлялось.
ОтветитьУдалитьДобрый день. Скажите, пожалуйста, можно сделать, чтобы не все поля были обязательными для заполнения? Что для этого нужно?
ОтветитьУдалитьпосле установки доп поля при отправке сообщения пишет
ОтветитьУдалить"Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in .../public_html/components/com_contact/controllers/contact.php on line 146"
Вот кусок кода
"
$name = $data['contact_name'];
$email = $data['contact_email'];
$phone = $data['contact_phone'];
$subject = $data['contact_subject'];
$body = $data['contact_message'];
// Prepare email body
$prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.' <'.$email.'>'"\n". .$phone.\r\n\r\n".stripslashes($body);
$mail = JFactory::getMailer();
146 $mail->addRecipient($contact->email_to);
$mail->addReplyTo(array($email, $name));
$mail->setSender(array($mailfrom, $fromname));
$mail->setSubject($sitename.': '.$subject);
$mail->setBody($body);
$sent = $mail->Send();
"
Этот комментарий был удален автором.
ОтветитьУдалитьДоброго времени суток!
ОтветитьУдалитьОчень полезный материал, спасибо! У меня похожая задача, но никак не могу ее решить. У меня Joomla 3 и информация в карточке контакта отображается во вкладках. При этом мне нужно, чтобы на первую вкладку (где фото, адрес и прочее) так же попала Дополнительная информация (которая по умолчанию выводится отдельной вкладкой). Можете ли вы подсказать путь решения?