Автоматическое формирование алиаса узла перевода при заполнении многоязычного сайта

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

Аватар пользователя roman-yrv roman-yrv 5 января 2013 в 18:01

Добрый день.

Такой вопрос.

Допустим, происходит заполнение многоязычного сайта, у которого есть русская версия (по умолчанию) и английская.
Для этого используется модуль i18n.

К примеру, ввели русскую версию страницы "Контакты", прописали у нее алиас как contacts. Затем выбирается вкладка "Перевод" и добавляется перевод - английская версия этой страницы.

Скажите пожалуйста, как проще всего сделать, чтобы при открытии формы добавления этой ноды с английской версией страницы поле алиаса автоматически устанавливалось бы также в "contacts" ?
Причем, не после того, как англоязычная нода сохранится, а именно при открытии формы добавления этой ноды.

Написать хук или есть модуль, который это делает ?

Комментарии

Аватар пользователя roman-yrv roman-yrv 29 апреля 2013 в 12:13

В случае использования Entity Translation эту проблему можно решить следующим образом.

Допустим, у нас уже введена русская версия страницы "Контакты" и её алиас мы назвали contacts.

Нам нужно, чтобы при редактировании английской версии этой страницы также был прописан алиас contacts.

Это можно сделать таким образом.
Перехватывается function hook_form_BASE_FORM_ID_alter и в тот элемент формы, куда будет вводиться алиас (при том, что алиас туда еще не введен), записать алиас, взятый из русской версии страницы.
Алиас можно получить с помощью SQL-запроса к таблице url_alias, nid данной ноды мы знаем.
Как добраться для элемента формы, хранящей алиас - можно это посмотреть, используя функцию kpr($form); из devel внутри этого хука.

Аватар пользователя oledftasd oledftasd 29 апреля 2013 в 16:33

"roman-yrv" wrote:
Как добраться для элемента формы, хранящей алиас - можно это посмотреть, используя функцию kpr($form); из devel внутри этого хука.

уже 5-раз пересматриваю то что возвращает kpr($form) - и не могу найти этот инпут хранящий алиас

Аватар пользователя oledftasd oledftasd 29 апреля 2013 в 19:11

странно, у меня не показывало вообще алиас в объекте, но когда написал вашу строку <?php$form['path']['alias']['#default_value']='new-alias';?> то и kpr($form) начал его отображать. Спасибо за помощь, этот способ работает. я в модуле так сделал (может кому-то пригодится)

<?php
«
...»
if($form_id == 'page_node_form')
    {    
        
$mytnid $form['#node']->tnid;
        
$res db_query('SELECT alias FROM {url_alias} WHERE source = :source'
array(
':source' => 'node/' $mytnid))->fetchField();
        
$form['path']['alias']['#default_value']='' $res;
    }
?>

в результате при создании перевода урл автоматом вписывается такой же как и у базовой страницы (которую переводили), осталось только добавить проверки, если ее еще нету (то есть создается не перевод, а сама страница)

Аватар пользователя mozh mozh 30 ноября 2015 в 14:17

Ребята по сей день нет стандартного решения для этого?

UPD
Используйте для базового языка токен [node:title], а для остальных языков токен [node:source:title]. Все это для шаблонов url admin/config/search/path/patterns