Есть модели Post и PostLang. В Post есть атрибут '$post->slug', а в PostLang атрибут '$postLang->title'. Модель PostLang сохраняется после Post.
Возможно ли как-то настроить SluggableBehavior, что бы он отрабатывал после сохранения PostLang, брал из него '$postLang->title' и сохранял в '$post->slug'?
SluggableBehavior и мультиязычность
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: SluggableBehavior и мультиязычность
Чет не понятна ваша струткура...
Я так понимаю - одна статья содержит несколько переводов (иначе зачем отделять title от slug)
$post->lang= ru;
$postLang->title = "Статья";
$post->slug = "statya";
$post->lang= en;
$postLang->title = "Article";
$post->slug = "article";
Какой из этих титлов имеет приоритет для записи в post->slug?
Я так понимаю - одна статья содержит несколько переводов (иначе зачем отделять title от slug)
$post->lang= ru;
$postLang->title = "Статья";
$post->slug = "statya";
$post->lang= en;
$postLang->title = "Article";
$post->slug = "article";
Какой из этих титлов имеет приоритет для записи в post->slug?
Re: SluggableBehavior и мультиязычность
Почему бы не сделать структуру такой:
Первая таблица:
1. title
2. slug
Вторая таблица:
1. parent_id
2. language
3. text
Не совсем понятно почему вы выбрали вашу структуру и чего хотите добиться.
Первая таблица:
1. title
2. slug
Вторая таблица:
1. parent_id
2. language
3. text
Не совсем понятно почему вы выбрали вашу структуру и чего хотите добиться.
Re: SluggableBehavior и мультиязычность
да, это действительно странное поведение будет...
Re: SluggableBehavior и мультиязычность
Что странного то? Стандартная структура для мультиязычности: общая таблица с непереводимыми полями post (id, created_at... etc.) + таблица с переводами post_lang (post_id, lang_id, title, content... etc.). Slug общий для всех языков, поэтому хранится в таблице post, а не в post_lang. Над вариантом вынести slug в таблицу с переводами думал, но вопрос именно как сделать с текущей структурой.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: SluggableBehavior и мультиязычность
Вы не ответили на мой вопрос. Какой slug должен генерироваться от разных переводов?
У вас получится, что после каждого обновления перевода slug будет меняться (statya или article).
Значит среди переводов должен быть приоритет языка, с которого будет браться slug и становится общим для всех.
Даже, если вы и решите это, то если посмотреть код
https://github.com/yiisoft/yii2/blob/ma ... havior.php
то там slug и title должны принадлежать одной модели, а не как у вас - в разных.
У вас получится, что после каждого обновления перевода slug будет меняться (statya или article).
Значит среди переводов должен быть приоритет языка, с которого будет браться slug и становится общим для всех.
Даже, если вы и решите это, то если посмотреть код
https://github.com/yiisoft/yii2/blob/ma ... havior.php
то там slug и title должны принадлежать одной модели, а не как у вас - в разных.
Re: SluggableBehavior и мультиязычность
Slug должен генерироваться из дефолтного языка, остальные языки на его генерацию никак не влияют. После сохранения поста и переводов, в модели Post дефолтный тайтл доступен через '$post->title'. Но т.к. переводы сохраняются после основной модели, в момент срабатывания бихейвора в '$post->title' еще пусто.Loveorigami писал(а): ↑2017.02.21, 13:57 Вы не ответили на мой вопрос. Какой slug должен генерироваться от разных переводов?
У вас получится, что после каждого обновления перевода slug будет меняться (statya или article).
Значит среди переводов должен быть приоритет языка, с которого будет браться slug и становится общим для всех.
В этом суть проблемы. Поэтому и создал тему с вопросом: возможно ли?Loveorigami писал(а): ↑2017.02.21, 13:57 А вообще, если вы посмотрите код
https://github.com/yiisoft/yii2/blob/ma ... havior.php
то там slug и title должны принадлежать одной модели.