По просьбе пользователя compawa, я сделал изменения для модуля locale (Drupal6). Изменения заменяют блок ссылок на языки, на select форму.
При этом, если в броузере отключен js, то видна обычная форма с кнопкой, если же js включен - то виден только select в котором выбирается язык. После выбора языка (при включенном js) происходит обновление страницы на выбранный язык.
- путь сохраняется, меняется только язык.
- по умолчанию выбран текуший язык, что сейчас активен.
Теперь сам код.
Приатаченный файл, должен быть сохранен по пути modules/locale/locale.js
Файл musules/locale/locale.module изменяется следующим образом:
функция locale_block целиком удаляется, и заменяется на
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 функции:
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_.txt | 234 байта |
locale2.patch | 1.62 КБ |
Комментарии
Так почему бы не сделать это отдельным модулем?
а смысл? Имхо это должно быть включено в функционал самого модуля. Запрос с патчем я послал в d.o
Может, кому-то больше нравится вариант с ссылками? А так просто альтернативный блок... Тем более, что весь код уже есть.
Да, если языков 2-3, а если значительно больше? /admin/settings/language/add, хотя бы половину языков из этого списка если добавить, то языковой блок займет всю колонку. Вряд ли найдутся те кому это будет нравится больше селектора...
PanDa777, озвучте свои цели, я не понимаю чего вы хотите добится.
Я всего лишь предлагал оформить такой блок в виде отдельного модуля, а не правки ядра. Собственно, так, как во вложении.
ммм.., а какие еще дополнительные действия надо произвести, чтобы модуль заработал? Простое его включение через админку у меня лично эффекта не возымело, и упоминания о модуле в других местах я не нашел. Не плохо было бы в архив файл read.me добавить.
Не знаю: у меня в списке блоков новый блок появился... Честное слово... Alternative language switcher называется... Aka "Альтернативный переключатель языка"
Теперь и я его нашел
Ну что сказать? Да, так действительно много лучше... Спасибо!
Спасибо
[b]PanDa777[/b]
Спасибо большое за модуль
Вот только не пойму как его в теме кустомизировать... Как его вмонтировать в дивы в темплейте темы?
Какие переменные можно использовать в CSS? Я впервые стою перед подобной задачей и не могу разобраться. Мануалы по CSS и PHP начал читать, но всё же немогу понять, каким синтаксисом надо обладать что бы повлиять на вывод...
а еще вот нашел визуально похожий свитчер с отображением флага, но прикрутить не смог
http://drupal.org/node/261059#comment-965314
Сам модуль выводит блок. Как должно быть всем известно, в Drupal 6 можно задавать в шаблоне темы неограниченное число регионов, то есть мест, где можно этот блок показывать. Подробнее о регионах, блоках и всём таком: http://drupal.org/node/171224
а можно патч сюда же? или же хотя бы ссылку на drupal.org
Вот тут обсуждение http://drupal.org/node/270226.
Патч приатачил к посту.
спасибо за отличный патч! давно искал и сейчас использую именно его.
может подскажите, где можно найти и как сделать:
вывод всех доступных языков в виде только флагов, с подсветкой текущего?
это может положительно сказаться на отношении пользователей, ибо видно сразу, что сайт переведен на множество языков и занимать это будет тоже не так уж много места.
Круто! Спасибо. Сэкономили мне кучу времени
Все сделал, как и сказано в первом посте, вот что у меня вышло:
до этого там был дефолтный переключатель языков, а в Блоках никакого 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
Как быть ?
Усё заработало! после отключения i18n и аддонов.... дуетом жить не могут.... Ждем когда подружите их! к великому счастью, пока не сильно завишу от i18n