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

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

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

Комментарии

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

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


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

13 мая 2008 в 19:42

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

13 мая 2008 в 22:57

Мультиязычность сделал через 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;
}

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

14 мая 2008 в 12:20

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

14 мая 2008 в 17:33

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

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

14 мая 2008 в 18:49

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

14 мая 2008 в 22:44

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

15 мая 2008 в 1:12

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

15 мая 2008 в 6:45

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

25 марта 2009 в 15:01

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

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

19 мая 2009 в 12:12