Изменения в модуле locale

13 июня 2008 в 18:05
Аватар пользователя gor gor 0 18

По просьбе пользователя compawa, я сделал изменения для модуля locale (Drupal6). Изменения заменяют блок ссылок на языки, на select форму.
При этом, если в броузере отключен js, то видна обычная форма с кнопкой, если же js включен - то виден только select в котором выбирается язык. После выбора языка (при включенном js) происходит обновление страницы на выбранный язык.
- путь сохраняется, меняется только язык.
- по умолчанию выбран текуший язык, что сейчас активен.

Теперь сам код.
Приатаченный файл, должен быть сохранен по пути modules/locale/locale.js
Файл musules/locale/locale.module изменяется следующим образом:
функция locale_block целиком удаляется, и заменяется на

function locale_block($op = 'list', $delta = 0) {
  if ($op == 'list') {
    $block[0]['info'] = t('Language switcher');
    // Not worth caching.
    $block[0]['cache'] = BLOCK_NO_CACHE;
    return $block;
  }

  // Only show if we have at least two languages and language dependent
  // web addresses, so we can actually link to other language versions.
  elseif ($op == 'view' && variable_get('language_count', 1) > 1 && variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE) != LANGUAGE_NEGOTIATION_NONE) {
    $languages = language_list('enabled');
    foreach ($languages[1] as $language) {
      $links[$language->language] = array(
        'href'       => $_GET['q'],
        'title'      => $language->native,
        'language'   => $language,
        'attributes' => array('class' => 'language-link'),
      );
    }

    drupal_alter('translation_link', $links, $_GET['q']);
    $options=array();
    foreach ($links as $langcode => $link) {
      $options[$langcode]=$link['title'];
    }

    $block['subject'] = t('Languages');
    $block['content'] = drupal_get_form('locale_block_form', $options);
    return $block;
  }
}

Также , в этот файл еще ниже дописываются следующие 2 функции:

function locale_block_form(&$form_state,$options){
  drupal_add_js(drupal_get_path('module', 'locale') .'/locale.js', 'module');
  global $language;
  $form['language'] = array (
    '#type'    => 'select',
    '#options' => $options,
    '#default_value' => $language->language,
  );
  $form['submit_language'] = array(
    '#type'  => 'submit',
    '#value' => t('Change')
  );

  return $form;
}
function locale_block_form_submit($form, &$form_state) {
  $languages = language_list('enabled');

  $links = array();
  foreach ($languages[1] as $language) {
    $links[$language->language] = array(
        'href'       => $_GET['q'],
        'language'   => $language,
    );
  }
  drupal_alter('translation_link', $links, $_GET['q']);

  $langcode=$form_state['values']['language'];
  if (isset($links[$langcode])) {
      $links[$langcode]['absolute']=true;
      $goto=url($links[$langcode]['href'] ,$links[$langcode]);
  }
  $form_state['redirect'] = $goto;
}

Приятного использования, и благодарности за идею и спонсирование пользователю compawa

ВложениеРазмер
Иконка простого текстового файла locale.js_.txt234 байта
Файл locale2.patch1.62 КБ

Комментарии

Аватар пользователя gor gor 0

а смысл? Имхо это должно быть включено в функционал самого модуля. Запрос с патчем я послал в d.o

13 июня 2008 в 18:49

Может, кому-то больше нравится вариант с ссылками? А так просто альтернативный блок... Тем более, что весь код уже есть.

13 июня 2008 в 21:59

PanDa777 wrote:
Может, кому-то больше нравится вариант с ссылками?

Да, если языков 2-3, а если значительно больше? /admin/settings/language/add, хотя бы половину языков из этого списка если добавить, то языковой блок займет всю колонку. Вряд ли найдутся те кому это будет нравится больше селектора...

14 июня 2008 в 2:57

Я всего лишь предлагал оформить такой блок в виде отдельного модуля, а не правки ядра. Собственно, так, как во вложении.

14 июня 2008 в 17:07

ммм.., а какие еще дополнительные действия надо произвести, чтобы модуль заработал? Простое его включение через админку у меня лично эффекта не возымело, и упоминания о модуле в других местах я не нашел. Не плохо было бы в архив файл read.me добавить. Smile

14 июня 2008 в 17:34

Не знаю: у меня в списке блоков новый блок появился... Честное слово... Alternative language switcher называется... Aka "Альтернативный переключатель языка"

14 июня 2008 в 19:16

PanDa777 wrote:
Не знаю: у меня в списке блоков новый блок появился...

Теперь и я его нашел Smile
Ну что сказать? Да, так действительно много лучше... Спасибо!

14 июня 2008 в 19:35

[b]PanDa777[/b]
Спасибо большое за модуль Smile
Вот только не пойму как его в теме кустомизировать... Как его вмонтировать в дивы в темплейте темы?
Какие переменные можно использовать в CSS? Я впервые стою перед подобной задачей и не могу разобраться. Мануалы по CSS и PHP начал читать, но всё же немогу понять, каким синтаксисом надо обладать что бы повлиять на вывод...

а еще вот нашел визуально похожий свитчер с отображением флага, но прикрутить не смог
http://drupal.org/node/261059#comment-965314

29 августа 2008 в 6:48

Сам модуль выводит блок. Как должно быть всем известно, в Drupal 6 можно задавать в шаблоне темы неограниченное число регионов, то есть мест, где можно этот блок показывать. Подробнее о регионах, блоках и всём таком: http://drupal.org/node/171224

29 августа 2008 в 10:04

спасибо за отличный патч! давно искал и сейчас использую именно его.
может подскажите, где можно найти и как сделать:
вывод всех доступных языков в виде только флагов, с подсветкой текущего?
это может положительно сказаться на отношении пользователей, ибо видно сразу, что сайт переведен на множество языков и занимать это будет тоже не так уж много места.

23 сентября 2009 в 14:38

Все сделал, как и сказано в первом посте, вот что у меня вышло:

до этого там был дефолтный переключатель языков, а в Блоках никакого Alternative language switcher нету
После как заменил function locale_block и 2е функции, которые после нее дописывают, патчем, выдало:
Parse error: syntax error, unexpected '-', expecting T_STRING or T_VARIABLE or '$' in /home/c/cl69487/public_html/modules/locale/locale.module on line 562
Как быть ?

30 ноября 2011 в 23:19

Усё заработало! после отключения i18n и аддонов.... дуетом жить не могут.... Ждем когда подружите их! к великому счастью, пока не сильно завишу от i18n

30 ноября 2011 в 23:27