[Решено] Форма контакта - три языка. Как?

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

Аватар пользователя relogger relogger 13 мая 2008 в 17:28

Необходимо реализовать многоязыковую поддержку в стандартной форме контактов.
Пробую реализовать сторонними модулями - но они предлагают создать дополнительные формы контактов для разных случаев. Это не удобно.
Меня полностью устраивает стандартная форма, но как в неё добавить мультиязычность не знаю.
Подскажите, кто решал подобные проблемы, как это сделать?
Хочу добавить ещё одно поле в стандартную форму (textarea) с поддержкой HTML, чтобы потом через переводы добавить перевод этого поля на каждый из языков, но не знаю как это сделать. Пожалуйста подскажите или помогите с решением этого вопроса.

Комментарии

Аватар пользователя player player 13 мая 2008 в 19:42

Quote:
Меня полностью устраивает стандартная форма, но как в неё добавить мультиязычность не знаю.

Хочу добавить ещё одно поле в стандартную форму (textarea) с поддержкой HTML, чтобы потом через переводы добавить перевод этого поля на каждый из языков, но не знаю как это сделать. Пожалуйста подскажите или помогите с решением этого вопроса.


Если ты не программист, то используй webform, а стандартный модуль отключи.

Аватар пользователя sergiyko911 sergiyko911 13 мая 2008 в 22:57

Изначально следовало бы задать вам вопрос - каким образом вы сделали несколько языков на сайте, потому как сделать это можно как минимум 3 способами.
в свое время столкнулся со схожей задачей, и решил ее таким образом -
изначально сайт был переведен на 3 языка при помощи i18n - рус, укр, англ
en - default, поэтому форму для него переделывать не надо, просто указываем пункту меню, к которому он привязан его принадлежность к английскому языку CONTACT
рус и укр - загрузил переводы для модуля contact.module и создал элементы меню для каждого из языков -
КОНТАКТЫ с путем ru/contact и Контактні дані с путем uk/contact
усе)

Аватар пользователя relogger relogger 14 мая 2008 в 12:20

Мультиязычность сделал через i18n.
Поле нужно не textarea (как я понимаю textarea - это поле с возможностью ввода информации), а просто чтобы туда вбить адресные данные на трёх языках.
Я не профи в программировании. Но как я понимаю нужно всего лишь вбить доп. поле в модуле contact.module, который лежит в /modules относительно корня.

Вот вроде бы в эту функцию?

function contact_mail_page() {
  global $user;

  $result = db_query('SELECT cid, category, selected FROM {contact} ORDER BY weight, category');
  while ($category = db_fetch_object($result)) {
    $categories[$category->cid] = $category->category;
    if ($category->selected) {
      $default_category = $category->cid;
    }
  }

  if (count($categories) > 0) {
    $form['#token'] = $user->name . $user->mail;
    $form['contact_information'] = array('#value' => filter_xss_admin(variable_get('contact_form_information', t('You can leave a message using the contact form below.'))));

Пробовал ввести переводы для "You can leave a message using the contact form below.", но этот текст не отображается в самой форме почему-то. Это бы решило полностью мою задачу.

$form['name'] = array('#type' => 'textfield',
      '#title' => t('Your name'),
      '#maxlength' => 255,
      '#default_value' => $user->uid ? $user->name : '',
      '#required' => TRUE,
    );
    $form['mail'] = array('#type' => 'textfield',
      '#title' => t('Your e-mail address'),
      '#maxlength' => 255,
      '#default_value' => $user->uid ? $user->mail : '',
      '#required' => TRUE,
    );
    $form['subject'] = array('#type' => 'textfield',
      '#title' => t('Subject'),
      '#maxlength' => 255,
      '#required' => TRUE,
    );
    if (count($categories) > 1) {
      // If there is more than one category available and no default category has been selected,
      // prepend a default placeholder value.
      if (!isset($default_category)) {
        $categories = array(t('--')) + $categories;
      }
      $form['cid'] = array('#type' => 'select',
        '#title' => t('Category'),
        '#default_value' => $default_category,
        '#options' => $categories,
        '#required' => TRUE,
      );
    }
    else {
      // If there is only one category, store its cid.
      $category_keys = array_keys($categories);
      $form['cid'] = array('#type' => 'value',
        '#value' => array_shift($category_keys),
      );
    }
    $form['message'] = array('#type' => 'textarea',
      '#title' => t('Message'),
      '#required' => TRUE,
    );
    // We do not allow anonymous users to send themselves a copy
    // because it can be abused to spam people.
    if ($user->uid) {
      $form['copy'] = array('#type' => 'checkbox',
        '#title' => t('Send yourself a copy.'),
      );
    }
    $form['submit'] = array('#type' => 'submit',
      '#value' => t('Send e-mail'),
    );
  }
  else {
    $form['#error'] = array('#value' => t('The contact form has not been configured.'));
  }
  return $form;
}

Подскажите плиз - я на правильном пути касаемо модификации модуля? Или существуют более сложные зависимости и изменение этого модуля не достаточно?

Аватар пользователя kiev1 kiev1 14 мая 2008 в 17:33

что бы "вбить доп поле" нужно ставить модуль webform - он создаст новый тип контента, а к типу контента можно через i18n много язычность сделать

Аватар пользователя player player 14 мая 2008 в 18:49

Я не профи в программировании. Но как я понимаю нужно всего лишь вбить доп. поле в модуле contact.module, который лежит в /modules относительно корня

.Вот какраз этого делать и не надо. Если вы не слушаете советы других, то зачем пишите в форум?

Аватар пользователя relogger relogger 14 мая 2008 в 22:44

kiev1, player спасибо за советы.
Советы слушаю, но есть большое непонимание концепции друпала.
Потихоньку буду втягиваться.
Еще раз спасибо, буду пробовать то, что Вы сказали.

Аватар пользователя player player 15 мая 2008 в 1:12

Менять код модуля друпала нельзя потому что потеряешь возможность его обновлять. Можно либо перекрывать вывод инфы модуля своим, либо перехватывать события генерируемые модулем.

Аватар пользователя kiev1 kiev1 15 мая 2008 в 6:45

как раз друпал для того и сделан что бы в код лезть в последнюю очередь, а в код модуля тем более - в друпале многое нестандартное делается без программирования вообще

Аватар пользователя Dark_kz Dark_kz 25 марта 2009 в 15:01

Сделал форму контактов на трех языках, сделал меню для него 'contact', но в примари-линкс отображаются все три вида этого 'contact' - на трех языках, не важно какой язык у интерфейса.
Как можно убрать лишние 'контакты' из меню?

Аватар пользователя kodo kodo 19 мая 2009 в 12:12

"Dark_kz" wrote:
Как можно убрать лишние 'контакты' из меню?

Если не ошибаюсь это проблема именно в Примари-линкс. В navigation вроде бы такое не наблюдалось. Единственное решение, которое я нашел - для каждого языка свой примари-линкс. Smile