* @copyright: Copyright (c) 2010, Bunzia Alexander * @version: 1.0 * @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL * @package: HiLO CMS */ include_once(MAIN_SOURCE_PATH.'/inc/class.nsTree.php'); include_once(MAIN_SOURCE_PATH.'/inc/class.query.php'); include_once(MAIN_SOURCE_PATH.'/inc/class.objects.php'); include_once(MAIN_SOURCE_PATH.'/modules/menu/inc/url.php'); class filedsSetMenu { //static $id = false; // адрес новости /*static function u_login($v,$obj){ $e = news::error_login($v); if ( !empty($e) ){ throw new Exception($e); } if ( news::exists_login($v,$obj -> id() ) ){ throw new Exception(U_EXISTS_LOGIN); } return $v; }*/ // родитель не может быть пустым static function c_parent($v,$obj){ $v = intval($v); if ( empty($v) ){ throw new Exception(E_NSTREE_BAD_PARENT); } $obj -> parent_id = $v; return false; } static function c_name($v,$obj){ $v = trim($v); if ( empty($v) ){ throw new Exception('Ошибка: нужно заполнить поле "Заголовок"'); } return $v; } } class filedsGetMenu extends filedsGetnsTree { static $__var = array(); // для хранения временных переменных static function url_item($v){ return sys_url(URL_MENU_CONTROL_ITEMS,$v); } // строим дерево меню static function menu_select($v){ $v = menu::getParent($v); $p = menu::query('f'); $p -> where_more('c_level',1); $p -> where_down($_GET['menu_id']); $p -> where_main_rows(); $p -> order_left('ASC'); $p -> get('c_id,c_name,c_level',false); $s = new select_box(); $s -> block_id($v); $s -> selected_id($v); $s -> empty_record(true,$_GET['menu_id'],'В основание'); while( list($c_id,$c_name,$c_level) = $p -> row() ){ $c_name = str_repeat('---',($c_level-1)).' '.$c_name; $s -> set($c_id,$c_name); } return $s -> get(); } static function lang_links($v){ if ( false===MAIN_MULTILANG){ return false; } $langs = explode(',',MAIN_LANGS); $result = array(); foreach( $langs as $l ){ $q = menu::query('q'); //$q -> set_debug(1); $q -> where_link($v); $q -> where_lang($l); $q -> get('COUNT(*)'); list($count) = $q -> row(); $result[] = array('lang'=>$l,'exists'=> (( $count ) ? 1 : 0) ); } return $result; } static function active($v){ if ( preg_match('#^'. $v .'#iUs',$_SERVER['REQUEST_URI']) ){ return true; } return false; } static function name($v,$row){ return str_repeat('---',($row['c_level']-2)).' '.$v; } } class menuQuery extends nsTreeQuery{ var $fields_get = 'filedsGetMenu'; /** * @var string $alias Алиас для исплользования в mysql запросе */ public function __construct($alias){ parent::__construct( "menu" ,$alias,$fields=array('id'=>'c_id','left'=>'c_left','right'=>'c_right','level'=>'c_level') ); } } // end class class menu extends nsTree{ public $table = "menu"; public $key = "c_id"; public $fields = 'filedsSetMenu'; static $s_table= "menu"; static function load_id($id){ $u = self::query('u'); if ( !$u -> where_id($id) ){ return FALSE; } if ( !$u -> get('u.*') ){ return FALSE; } if ( $u -> get_count_rows()==0 ){ return FALSE; } return new self( $id,$u -> row() ); } static function create(){ return new self( 0,array('c_id'=>0) ); } static function query($alias){ return new menuQuery( $alias,array('id'=>self::$id,'left'=>self::$left,'right'=>self::$right,'level'=>self::$level) ); } static function getParent($id){ return parent::getParent( self::$s_table,$id ); } static function getServiceInfo($id){ return parent::getServiceInfo( self::$s_table,$id ); } static function order($one,$two){ return parent::order( self::$s_table,$one,$two ); } } // end class