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" //Отображаемое в форме обратной связи наименование поля

Удачи!!

 

21 комментарий:

  1. Этот комментарий был удален администратором блога.

    ОтветитьУдалить
    Ответы
    1. А можно поподробнее? Что именно не получилось?

      Удалить
  2. Все сделал по инструкции, но дополнительное поле не появилось.

    ОтветитьУдалить
  3. components/com_virtuemart/views/askquestion/tmpl/form.php
    вот эта форма, ее изменил. Но надо изменить еще что-то что бы в письмо которое приходит к админу приходила информация которую внесли в дополнительном поле

    ОтветитьУдалить
    Ответы
    1. Привет! Работаем со следующими файлами:
      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

      Удалить
  4. А как, к примеру, добавить выпадающий список,а не поле ввода?

    ОтветитьУдалить
  5. Подскажите пожалуйста, как добавить иконки к новым, созданным полям?

    ОтветитьУдалить
    Ответы
    1. Ну как вариант в стилях прописать картинку

      Удалить
  6. Для com_content по умолчанию нет стиля, и в моем кастомизированном шаблоне тоже. Нашел упоминания значков внутри самого компонента, но как добавить к новым полям не разобрался :(

    ОтветитьУдалить
  7. Добрый день, не пойму в чем дело, все сделала как тут, добавила поля, все работает, отправляет, но на почту приходит только Возраст: и пустое значение.... Можете подсказать в чем причина?

    ОтветитьУдалить
    Ответы
    1. Аналогично поле Skype в письме приходит пустым, в чем может быть дело?

      Удалить
  8. Возможно нужно править шаблон тоже. Шаблон может свои файлы использовать.

    ОтветитьУдалить
  9. а не подскажите какие именно?

    ОтветитьУдалить
  10. Как добавить дополнительное поле в форму обратной связи в Joomla 3?

    ОтветитьУдалить
    Ответы
    1. Делал по этой статье для Joomla 3.1.5. Всё работает замечательно!
      Большое спасибо автору!

      Удалить
  11. Спасибо автору, на Joomla 3.1.5 все заработало, правда пришлось еще изменить файл в templates\имя_шаблона\warp\systems\joomla\layouts\com_contact\contact\default_form.php, так как поле не появлялось.

    ОтветитьУдалить
  12. Добрый день. Скажите, пожалуйста, можно сделать, чтобы не все поля были обязательными для заполнения? Что для этого нужно?

    ОтветитьУдалить
  13. после установки доп поля при отправке сообщения пишет
    "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();
    "

    ОтветитьУдалить
  14. Этот комментарий был удален автором.

    ОтветитьУдалить
  15. Доброго времени суток!
    Очень полезный материал, спасибо! У меня похожая задача, но никак не могу ее решить. У меня Joomla 3 и информация в карточке контакта отображается во вкладках. При этом мне нужно, чтобы на первую вкладку (где фото, адрес и прочее) так же попала Дополнительная информация (которая по умолчанию выводится отдельной вкладкой). Можете ли вы подсказать путь решения?

    ОтветитьУдалить

Технологии Blogger.