Yii Framework и многоязычный контент - PullRequest
1 голос
/ 05 мая 2011

Я унаследовал веб-сайт среднего размера, написанный с помощью пользовательской (небольшой) фреймворк PHP.Я хочу перейти на инфраструктуру yii, но сначала мне нужно найти решение для следующей проблемы: сайт - это, в основном, серия курсов и упражнений, которые доступны на нескольких языках.Фактически весь контент доступен на нескольких языках.

Пользователи могут выбирать предпочитаемый язык, а локализованный контент извлекается из базы данных.

Организация базы данных:

  • табличных упражнений с идентификаторами и столбцами без языка
  • табличных упражнений_строки с упражнениями, sLanguage и sContent

Как это можно легко интегрировать с помощью "Post :: model () -> findAll () "yii - способ получения данных из БД?

Должен ли я написать свой собственный производный класс CModel, который бы извлекал языковые предпочтения из класса IUserIdentity и адаптировал запрос?Есть ли какой-нибудь код, на который я мог бы взглянуть?

1 Ответ

1 голос
/ 05 мая 2011

Должен ли я написать свой собственный производный класс CModel, который бы извлекал языковые предпочтения из класса IUserIdentity и адаптировал запрос?

Не думаю, тебе нужно это делать. Есть разные способы:

1.) Вы можете использовать cdbcriteria, чтобы установить критерии (например, предложение where) после создания экземпляра объекта и перед запуском findAll. http://www.yiiframework.com/doc/guide/1.1/en/database.ar (посмотрите в конце 2-й четверти страницы)

2). Другой способ - переписать findAll внутри вашей модели:

    public function findAll($condition='',$params=array())
        {   $condition["criteria"]->compare ....
             return parent::findAll($condition,$params);
             }

3). Вы также можете использовать триггер onBeforFind http://www.yiiframework.com/doc/api/1.1/CActiveRecord#onBeforeFind-detail,, который срабатывает перед (каждым) поиском findAll

Я бы предпочел эту 1-ю или 2-ю идею.

...