Ссылка на страницу в другой языковой версии — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов '''Задача:''' Вывести ссылку для перехода в другую язы…») |
Stexe (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
'''Задача:''' Вывести ссылку для перехода в другую языковую версию, причем если существует страница с таким же адресом в другой языковой версии, что и текущая, то вывести ссылку на нее. <br /><br /> | '''Задача:''' Вывести ссылку для перехода в другую языковую версию, причем если существует страница с таким же адресом в другой языковой версии, что и текущая, то вывести ссылку на нее. <br /><br /> | ||
'''Реализация:'''<br /> | '''Реализация:'''<br /> | ||
− | Напишем custom макрос, который будет возвращать ссылку исходя из логики задачи. | + | Напишем custom макрос, который будет возвращать ссылку исходя из логики задачи.<br /> |
В файл \classes\modules\custom.php поместим код метода getLanguageLink: | В файл \classes\modules\custom.php поместим код метода getLanguageLink: | ||
<source lang="php"> | <source lang="php"> |
Текущая версия на 08:08, 27 марта 2014
Задача: Вывести ссылку для перехода в другую языковую версию, причем если существует страница с таким же адресом в другой языковой версии, что и текущая, то вывести ссылку на нее.
Реализация:
Напишем custom макрос, который будет возвращать ссылку исходя из логики задачи.
В файл \classes\modules\custom.php поместим код метода getLanguageLink:
/*
* Возвращает ссылку на страницу в другой языковой версии
* с префиксом $lang_prefix (пример, 'en'), если она существует
* $lang_prefix - префикс языковой версии
*/
public function getLanguageLink($lang_prefix)
{
// Формируем ссылку на $lang_prefix
$lang_prefix_new = preg_replace('/\//', '', $lang_prefix);
$lang_prefix_link = "/{$lang_prefix_new}/";
// Получаем id языковой версии
$langsCollection = langsCollection::getInstance();
$lang_id = $langsCollection->getLangId($lang_prefix_new);
// Если языковая версия с $lang_prefix не найдена, возвращаем ее
if ( !$lang_id )
{
return $lang_prefix_link;
}
// Получаем id текущей страницы
$cmsController = cmsController::getInstance();
$current_id = $cmsController->getCurrentElementId();
// Если id страницы не число, то возращаем $lang_prefix_link
if ( is_numeric($current_id) === false)
{
return $lang_prefix_link;
}
// Получаем адрес этой страницы в текущей языковой версии
$umiHierarchy = umiHierarchy::getInstance();
$element_path = $umiHierarchy->getPathById($current_id);
// По адресу пытаемся получить id страницы
// в языковой версии $lang_prefix
$domain_id = $cmsController->getCurrentDomain()->getId();
$element_id_lang = $umiHierarchy->getIdByPath($element_path, false, $errors_count, $domain_id, $lang_id);
if ( !$element_id_lang || $errors_count > 0 )
{
return $lang_prefix_link;
}
// Если id найден, возвращаем полученный адрес
$result_link = $umiHierarchy->getPathById($element_id_lang);
return $result_link;
}
Вывод ссылки для XSLT-шаблонизатора будет выглядеть следующим образом:
<a href="{document('udata://custom/getLanguageLink/en')/udata}">Английская версия</a>
Для TPL-шаблонизатора:
<a href="%custom getLanguageLink('en')%">Английская версия</a>