DB_SITE_HOST, 'user' => DB_SITE_USER, 'pass' => DB_SITE_PASS, 'base' => DB_SITE_BASE ); private $_refs = array(); public function __construct() { $this -> _db = new Db_Mysql( self::$params_db ); } /** * Построение дерева каталога * * @param number идентификатор родительского каталога * @param number направление поиска ( 1 - искать потомков, 2 - искать ролителей ) * @param number уровень вложенности поиска * @return void */ public function getCatalogTree( $catalog_id = 0, $direction = 1, $limit = 100 ) { $this -> _refs = array(); switch ( $direction ) { case 1: $this -> getCatalogChilds( $catalog_id, $limit ); break; case 2: $this -> getCatalogParents( $catalog_id, $limit ); break; default: $this -> getCatalogChilds( $catalog_id, $limit ); } return $this -> _refs; } /** * Рекурсивное получение потомков каталога * * @param number идентификатор каталога * @param number уровень вложенности * @return void */ private function getCatalogChilds( $catalog_id, $limit = 100, $level = 1 ) { $sql = "SELECT *, " . intval( $level ) . " AS level FROM shop_catalog WHERE parent_id = '" . intval( $catalog_id ) . "' "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); $data = $this -> _db -> fetchAll(); if ( !empty( $data ) && $limit >= $level ) { $level++; $this -> _refs = array_merge( $this -> _refs, $data ); for ( $i = 0; $i < count( $data ); $i++ ) { $this -> getCatalogChilds( $data[$i]['id'], $limit, $level ); } } } /** * Рекурсивное получение родителей каталога * * @param number идентификатор каталога * @param number уровень вложенности * @return void */ private function getCatalogParents( $catalog_id, $limit, $level = 1 ) { $sql = "SELECT *, " . intval( $level ) . " AS level FROM shop_catalog WHERE id = '" . intval( $catalog_id ) . "' "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); $data = $this -> _db -> fetchAll(); if ( !empty( $data ) ) { $level++; $this -> _refs = array_merge( $this -> _refs, $data ); for ( $i = 0; $i < count( $data ); $i++ ) { $this -> getCatalogParents( $data[$i]['parent_id'], $limit, $level ); } } } /** * Получение информации о каталоге по идентификатору * * @return number идентификатор категории * @return array */ public function getCatalogById( $category_id ) { $sql = "SELECT id, parent_id, name, description, sort, published FROM shop_catalog WHERE id = '" . intval( $category_id ) . "' "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); return $this -> _db -> fetchAll(); } /** * Сохранение каталога * * @param number идентификатор каталога ( 0 - если новый ) * @param number идентификатор родителя * @param string название каталога * @param string описание каталога * @param number порядок сортировки * @param number статус публикации ( 0 скрыта, 1 - видима ) * @return number идентификатор каталога */ function saveCatalog( $catalog_id, $parent_id, $name, $description = null, $sort = 1000, $published = 1 ) { if ( $catalog_id == $parent_id ) { return false; } $name = htmlspecialchars( $name ); $description = htmlspecialchars( $description ); if ( empty( $catalog_id ) ) { $sql = "INSERT INTO shop_catalog ( parent_id, name, description, sort, published ) VALUES ('" . intval( $parent_id ) . "', '" . $name . "', '" . $description . "', '" . intval( $sort ) . "', '" . intval( $published ) . "') "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); } else { $sql = "UPDATE shop_catalog SET parent_id = '" . intval( $parent_id ) . "', name = '" . $name . "', description = '" . $description . "', sort = '" . intval( $sort ) . "', published = '" . intval( $published ) . "' WHERE id = '" . intval( $catalog_id ) . "' "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); } return !empty( $catalog_id ) ? $catalog_id : $this -> _db -> getLastId(); } /** * Удаление каталога, его подкаталогов и товаров привязанных к ним * * @param number идентификатор каталога * @return void */ function deleteCatalog( $catalog_id ) { $childs = $this -> getCatalogTree( $catalog_id ); if ( !empty( $childs ) ) { foreach ( $childs AS $data ) { $catalogs[] = $data['id']; } $ids = join( ',', $catalogs ); } else { $ids = $catalog_id; } $sql = "DELETE FROM shop_catalog WHERE id IN (" . intval( $ids ) . ") "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); $sql = "DELETE FROM shop_goods WHERE catalog_id IN (" . intval( $ids ) . ") "; $this -> _db -> setCommand( $sql ); $this -> _db -> execute(); } } ?>
Fatal error: Uncaught exception 'Controller_Exception' in /var/www/sites/andrey.smirnov/jetstar.ru/library/Loader.php:64 Stack trace: #0 /var/www/sites/andrey.smirnov/jetstar.ru/library/Controller/Controller_Base.php(115): Loader::loadClass('Catalog') #1 /var/www/sites/andrey.smirnov/jetstar.ru/application/controllers/GlobalController.php(16): Controller_Base::getClassInstance('Catalog') #2 /var/www/sites/andrey.smirnov/jetstar.ru/application/controllers/IndexController.php(11): GlobalController->__construct() #3 /var/www/sites/andrey.smirnov/jetstar.ru/library/Controller/Controller_Dispatcher.php(339): IndexController->__construct() #4 /var/www/sites/andrey.smirnov/jetstar.ru/library/Controller/Controller_Base.php(342): Controller_Dispatcher->dispatch() #5 /var/www/sites/andrey.smirnov/jetstar.ru/library/Controller/Controller_Base.php(84): Controller_Base->dispatch() #6 /var/www/sites/andrey.smirnov/jetstar.ru/index.php(16): Controller_Base::run('/var/www/sites/...') #7 {main} thrown in /var/www/sites/andrey.smirnov/jetstar.ru/library/Loader.php on line 64