[Мультиязычность] Скрипт массовой связки разных языковых версий (в разных контекстах) по URI [Babel]
Надо добавить мультиязычность на сайт через Babel. Для этого была сделана русская версия (в контексте web) и затем сделаны ее копии (en и de).
Далее нужно было связать все версии языков ресурсов между собой. Что их объединяет? Общий URI (часть URL после доменного имени).
Далее нужно было связать все версии языков ресурсов между собой. Что их объединяет? Общий URI (часть URL после доменного имени).
- Нажимаем в админке пункт меню:
«Управление > Очистить кэш > Обновить URI-ссылки» - Делаем бэкап таблицы `modx_site_tmplvar_contentvalues` базы данных
- Устанавливаем пакет Console, просто вставляем туда код ниже
- Меняем в `$babel_TV_ID` ID TV поля `babelLanguageLinks` на свой
- И нажимаем «Выполнить»
<?php
$babel_TV_ID = 0; // ЗДЕСЬ ВАШ ID TV-ПОЛЯ `babelLanguageLinks`
if (!is_int($babel_TV_ID) || $babel_TV_ID < 1) die('Замените $babel_TV_ID на свой ID TV-поля babelLanguageLinks');
$arr = [];
$resources = $modx->query("SELECT id,context_key,uri FROM modx_site_content")->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $res) {
$arr[ $res['uri'] ][ $res['context_key'] ] = $res['id'];
}
foreach ($arr as $uri => $contexts) {
$pair = [];
foreach ($contexts as $ctx => $res) {
$pair[] = "$ctx:$res";
}
$pair = implode(';', $pair);
foreach ($contexts as $ctx => $res) {
$modx->exec("INSERT INTO modx_site_tmplvar_contentvalues (tmplvarid,contentid,value) VALUES ($babel_TV_ID, $res, '$pair')");
}
}
Комментарии: 3
Не мог написать в «Готовые решения» из-за недостаточного рейтинга.
Но скрипт очень нужный, чтобы им не поделиться.
Просто проверьте, что тут ничего такого нет.
И переместите в нужный раздел =)
Спасибо
Но скрипт очень нужный, чтобы им не поделиться.
Просто проверьте, что тут ничего такого нет.
И переместите в нужный раздел =)
Спасибо
Перенёс
$tvName = 'babelLanguageLinks';
if(!$tv = $modx->getobject('modTemplateVar', ['name' => $tvName])) {
die("TV c именем {$tvName} не найдено");
}
$babel_TV_ID = $tv->get('id');
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.