Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [CakePHP] Translate behavior проблема с locale, взять записи даже если нету для locale 
V
    Опции темы
linuxoid
Дата 29.9.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте, коллеги. На каке (1.3) такая проблема возникла:

Я использую translate behavior для мултиязычного сайта. Есть бэкэнд, где я могу редактировать контент. Т.е. CMS

Есть 2 кнопочки, которые устанавливают locale : rus и eng

Возьмем простой пример:

- есть таблица - категории (categories)
- У каждой категории 2 поля: id и title
- Соответственно title выносим в categories_translations
- из categories поле title удаляем.

Workflow такой. 

Нажимаем eng. locale в контроллере категорий меняется на eng. Теперь можно создать категорию для eng сайта. Сохраняем и видим, что в списке категорий (admin_index) появилась запись. К примеру

id  title
1   Test category

Проблема в том, что при переключении locale на rus список категорий будет пуст, т.к. видимо работает join и пытается найти в таблице categories_translations соответсвующие записи, которых там еще нет (но на en_us всё OK, т.к. я только что создал категорию с переводом для en_us, поэтому при выборе eng мы что-то видим в списке). Хотелось бы, чтобы на rus список так же бы выводился, даже если еще нету перевода на rus в categories_translations.

Надеюсь, что понятно объяснил, в чем дело. Есть ли какое-то решение без хаков? К примеру можно сначала взять просто все существующие id категорий, затем, если есть перевод для них, присоединить этот перевод и затем составить список. Но это "тяжелый" вариант. Может быть есть какое-то простое решение в рамках каки? Благодарю

Это сообщение отредактировал(а) linuxoid - 29.9.2011, 12:53
PM MAIL   Вверх
linuxoid
Дата 30.9.2011, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



В общем пока остановился на этом солюшне. Не идеальное решение, но для моих задач очень даже подходит (если языки предопределены - rus, eng, spa, т.е. не добавляются динамически) http://www.palivoda.eu/2008/04/i18n-in-cak...slation-part-2/

Чтобы можно было сохранять в CMS для разных locale нужно в i18n.php заменить beforeSave() на это (комментарий #7 Georgi Mavrev Says: July 14th, 2008 at 6:25 pm )

Код

function beforeSave(&$model) {
$locale = $this->_getLocale($model);
foreach($this->fields as $modelAlias => $modelFields){
foreach($modelFields as $fieldName=>$asd){
if(empty($model->data[$modelAlias][$fieldName.'_'.$locale])){
if(isset($model->data[$modelAlias][$fieldName])) {
$model->data[$modelAlias][$fieldName.'_'.$locale] = $model->data[$modelAlias][$fieldName];
}
unset($model->data[$modelAlias][$fieldName]);
}
}
}
}


Чтобы поменять язык (комментарий #28 Rostislav Palivoda Says: July 23rd, 2009 at 11:44 pm)

Код

if (!class_exists('I18n')) { uses('i18n');}
&I18n::getInstance()->l10n->get('eng');
 (для PHP5 вместо &I18n пишем I18n)

Это сообщение отредактировал(а) linuxoid - 30.9.2011, 09:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.0926 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.