Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Класс модели мультиязычного модуля страниц сайта.
- * @version 1.0 alpha
- */
- class Application_Model_Pages_Table extends Zend_Db_Table_Abstract {
- protected $_primary = 'id';
- protected $_name = 'pages';
- /**
- *
- * Функция определяет ID языка
- * @param INT $id - ID языка
- * @param mixed|numeric $lang - алиас языка
- */
- public function get($id, $lang = null) {
- //exit($id);
- $data = $this->select()->from($this->_name);
- if (is_numeric($id))
- $data = $data->where('page_id = ?', $id);
- else
- $data = $data->where('alias = ?', $id);
- if ((!is_null($lang)) && (!is_numeric($lang))) {
- /**
- * Определяем ID выбранного языка по алиасу
- */
- $langModel = new Application_Model_Languages_Table ();
- $langId = $langModel->get($lang);
- if ($langId != false) {
- $lang = $langId;
- $data = $data->where('language_id = ?', $lang);
- $data = $data->query()->fetch();
- } else
- return Base_Errors::LANG_NO_TRANSLATION;
- } else {
- //exit($data->assemble());
- $data = $data->query()->fetchAll();
- }
- return $data;
- }
- public function getList($useDefaultLocale = false) {
- if (!$useDefaultLocale) {
- $result = array();
- $data = $this->select()
- ->from($this->_name, array('page_id', 'language_id'))
- ->group('page_id')
- ->query()->fetchAll();
- foreach ($data as $k => $v) {
- $result [$v ['page_id']] = $this->get($v ['page_id'], $v ['language_id']);
- }
- return $result;
- } else {
- }
- }
- public function getAvailableLocales($pageId) {
- $langModel = new Application_Model_Languages_Table ();
- $locales = $this->select()->from($this->_name, 'language_id')->where('page_id = ?', $pageId)->query()->fetchAll();
- $locInfo = array();
- //$locInfo [] = $locales;
- foreach ($locales as $loc) {
- //$locInfo[] = array($langModel->getInfo($loc['language_id']), 'alias'=>'aaa');
- $info = $langModel->getInfo($loc['language_id']);
- $info['alias'] = $this->_getAlias($pageId, $loc['language_id']);
- $locInfo[] = $info;
- }
- return $locInfo;
- }
- public function getPageId() {
- $data = $this->select()->from($this->_name, 'MAX(page_id) AS cur')->limit(1)->query()->fetch();
- return ($data['cur'] + 1);
- }
- /**
- *
- * Функция релактирования страницы.
- * Краткий принцип работы: Передается массив данных, в ключах которого обязательны language_id и page_id.
- * Если страница с такими параметрами найдена - происходит обновление информации. Иначе -
- * проверяется наличие страницы с таким идентификатором, если существует - добавляем локализацию. Иначе - ошибка.
- * @param array $data - Массив данных для обновления страницы
- */
- public function addTranslation(array $data) {
- if (empty($data['language_id'])) {
- return Base_Errors::PAGE_NO_LANGUAGE_PROVIDED;
- }
- if (empty($data['page_id'])) {
- return Base_Errors::PAGE_NO_PAGE_PROVIDED;
- }
- //Zend_Debug::dump($data);
- $modelLang = new Application_Model_Languages_Table();
- if (!$this->pageExists($data['page_id'])) {
- return Base_Errors::PAGE_NOT_EXISTS;
- }
- $languageId = $modelLang->get($data['language_id']);
- $pageId = $data['page_id'];
- unset($data['page_id']);
- if ($this->_translationExists($pageId, $languageId)) {
- //$data['updated'] = strtotime("now");
- $this->update($data, 'page_id=' . $pageId . ' AND language_id=' . $languageId);
- } else {
- $data['page_id'] = $pageId;
- $data['language_id'] = $languageId;
- $data['created'] = strtotime("now");
- $this->insert($data);
- }
- return true;
- }
- public function pageExists($pageId) {
- $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)->query()->rowCount();
- return($data != 0);
- }
- public function getField($pageId, $field, $language = DEFAULT_LANGUAGE) {
- $model = new Application_Model_Languages_Table();
- $language = $model->get($language);
- $data = $this->select()->from($this->_name, $field)->where('page_id =?', $pageId)->where('language_id = ?', $language)->query()->fetch();
- return $data[$field];
- }
- private function _hasDefaultLanguage($pageId) {
- $langModel = new Application_Model_Languages_Table();
- $defaultLang = $langModel->get(DEFAULT_LANGUAGE);
- $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)->where('language_id = ?', $defaultLang)->query()->rowCount();
- return ($data != 0);
- }
- public function getLocales($id) {
- $data = $this->select()->from($this->_name, array('language_id'))->where('page_id = ?', $id)->query()->fetchAll();
- $langTable = new Application_Model_Languages_Table();
- $result = array();
- foreach ($data as $i => $v) {
- $result[] = array('locale' => $langTable->getLocale($v['language_id']), 'id' => $v['language_id']);
- }
- return $result;
- }
- /**
- *
- * Функция пытается получить язык по умолчанию.
- * При нахождении совпадения, возвращается язык по умолчанию.
- * Если не находится - функция пытается получить перевод страниц на текущий язык.
- * В случае успеха возвращается текущия язык
- * В противном случае FALSE
- * @param INT $pageId - ID страницы
- * @return array
- */
- public function getDefaultLanguage($pageId) {
- $langModel = new Application_Model_Languages_Table();
- $currentLang = $langModel->get(Zend_Registry::get('LANGUAGE')); //Текущий используемый язык
- $defaultLang = $langModel->get(DEFAULT_LANGUAGE); //Язык по умолчанию
- /**
- *Проверяем, существует ли версия страницы для текущего языка...
- */
- $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
- ->where('language_id = ?', $currentLang)
- ->limit(1)->query();
- if ($data->rowCount() != 0) {
- return $data->fetch(); //Если доступна - возвращаем..
- } else { //... Иначе - проверка на существовании версии для языка по умолчанию
- $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
- ->where('language_id = ?', $defaultLang)->query();
- if ($data->rowCount() != 0)
- return $data->fetch();
- $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
- ->order('language_id DESC')->limit(1)->query()->fetch(); //Иначе выбираем один из доступных языков...
- return $data;
- }
- }
- /**
- *
- * @param INT $pageId - ID страницы
- * @param INT $languageId - ID языка
- * @return BOOL - существует ли заданный перевод для заданной страницы
- */
- private function _translationExists($pageId, $languageId) {
- $data = $this->select()
- ->from($this->_name)
- ->where('page_id = ?', $pageId)
- ->where('language_id = ?', $languageId)
- ->query()->rowCount();
- return ($data != 0);
- }
- /**
- *
- * @param int $pageId
- * @param int $languageId
- * @return string
- */
- protected function _getAlias($pageId, $languageId) {
- $data = $this->select()->from($this->_name, 'alias')
- ->where('page_id = ?', $pageId)->where('language_id = ?', $languageId)->query()->fetch();
- return $data['alias'];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement