SluggableBehavior и мультиязычность

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

SluggableBehavior и мультиязычность

Сообщение Faenir »

Есть модели Post и PostLang. В Post есть атрибут '$post->slug', а в PostLang атрибут '$postLang->title'. Модель PostLang сохраняется после Post.
Возможно ли как-то настроить SluggableBehavior, что бы он отрабатывал после сохранения PostLang, брал из него '$postLang->title' и сохранял в '$post->slug'?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: SluggableBehavior и мультиязычность

Сообщение Loveorigami »

Чет не понятна ваша струткура...
Я так понимаю - одна статья содержит несколько переводов (иначе зачем отделять title от slug)

$post->lang= ru;
$postLang->title = "Статья";
$post->slug = "statya";

$post->lang= en;
$postLang->title = "Article";
$post->slug = "article";

Какой из этих титлов имеет приоритет для записи в post->slug?
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

Re: SluggableBehavior и мультиязычность

Сообщение za4me »

Почему бы не сделать структуру такой:

Первая таблица:
1. title
2. slug

Вторая таблица:
1. parent_id
2. language
3. text

Не совсем понятно почему вы выбрали вашу структуру и чего хотите добиться.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: SluggableBehavior и мультиязычность

Сообщение rak »

да, это действительно странное поведение будет...
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: SluggableBehavior и мультиязычность

Сообщение Faenir »

Что странного то? Стандартная структура для мультиязычности: общая таблица с непереводимыми полями post (id, created_at... etc.) + таблица с переводами post_lang (post_id, lang_id, title, content... etc.). Slug общий для всех языков, поэтому хранится в таблице post, а не в post_lang. Над вариантом вынести slug в таблицу с переводами думал, но вопрос именно как сделать с текущей структурой.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: SluggableBehavior и мультиязычность

Сообщение Loveorigami »

Вы не ответили на мой вопрос. Какой slug должен генерироваться от разных переводов?
У вас получится, что после каждого обновления перевода slug будет меняться (statya или article).
Значит среди переводов должен быть приоритет языка, с которого будет браться slug и становится общим для всех.

Даже, если вы и решите это, то если посмотреть код
https://github.com/yiisoft/yii2/blob/ma ... havior.php

то там slug и title должны принадлежать одной модели, а не как у вас - в разных.
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: SluggableBehavior и мультиязычность

Сообщение Faenir »

Loveorigami писал(а): 2017.02.21, 13:57 Вы не ответили на мой вопрос. Какой slug должен генерироваться от разных переводов?
У вас получится, что после каждого обновления перевода slug будет меняться (statya или article).
Значит среди переводов должен быть приоритет языка, с которого будет браться slug и становится общим для всех.
Slug должен генерироваться из дефолтного языка, остальные языки на его генерацию никак не влияют. После сохранения поста и переводов, в модели Post дефолтный тайтл доступен через '$post->title'. Но т.к. переводы сохраняются после основной модели, в момент срабатывания бихейвора в '$post->title' еще пусто.
Loveorigami писал(а): 2017.02.21, 13:57 А вообще, если вы посмотрите код
https://github.com/yiisoft/yii2/blob/ma ... havior.php

то там slug и title должны принадлежать одной модели.
В этом суть проблемы. Поэтому и создал тему с вопросом: возможно ли?
Ответить