Фикс для перевода slug у плагинов, сделанных в Builder.
1) Индексируем slug в нужной моделе
public $translatable = [
'category_title',
'category_description',
['slug', 'index' => true]
];
2) На нужной странице в секции кода пишем:
{
$this['model_name'] = Model_name::transWhere('slug', $this->param('slug'))->first();
}
И удаляем со страницы компонент билдера (то есть никаких Builder details быть не должно).
Теперь можно выводить данные плагина не через record. Например не {{ record.category_title }}, а {{ category.category_title }}
3) Фиксим url
Открываем Plugin.php и пишем туда во внутрь public function boot()
Event::listen('translate.localePicker.translateParams', function($page, $params, $oldLocale, $newLocale) {
if ($page->baseFileName == 'your-page-filename') {
return YourModel::translateParams($params, $oldLocale, $newLocale);
}
});
Естественно, в начале Plugin.php подключаем события и нашу модель:
use Developer_name\Plugin_name\Models\Model_name;
use Event;
4) В нужную модель плагина добавляем:
public static function translateParams($params, $oldLocale, $newLocale) {
$newParams = $params;
foreach ($params as $paramName => $paramValue) {
$records = self::transWhere($paramName, $paramValue, $oldLocale)->first();
if ($records) {
$records->translateContext($newLocale);
$newParams[$paramName] = $records->$paramName;
}
}
return $newParams;
}
5) Теперь все должно работать. Дело за малым: пофиксить alternate links для seo
Идем сюда: rainlab/translate-plugin/components/AlternateHrefLangElements.php
И после 54 строки $params = $this->getRouter()->getParameters();
Добавляем:
$translatedParams = Event::fire('translate.localePicker.translateParams',
[$page, $params, $this->oldLocale, $locale], true);
if ($translatedParams) {
$params = $translatedParams;
}
6) Вы восхитительны.
Работоспособность проверена на php 7.2 (на 7.3 на момент 13 марта 2019 года не работает).