Каталоги - это древовидные списки объектов. Класс, который реализует функционал построения дерева – wCatalog.
В качестве примера рассмотрим фрагмент Каталога объектов – Элементы сайта. Для этого в меню Настройки выберем страницу Каталог объектов. При этом в левом фрейме окна Объекты отображается древовидная структура типов объектов, а в правом фрейме – список (таблица) объектов выбранного типа. Данные в правом фрейме можно представить в виде списка или дерева.
Контекстное меню древовидной структуры типов объектов содержит следующие опции:
Используется три метода класса wCatalog - titleframe(), treeframe(), gridframe().
Описание объекта (названия полей, данные для ячеек таблицы) отправляется входными параметрами в класс wObjects (main/objects/objects.class.php) - наследнику базового класса wPrototype, который создает новую таблицу. Методом show() отображаются все три фрейма каталога.
Простой пример создания каталога. Установите модуль wCRM (архив модуля можно скачать на странице http://wad-er.com/download). Результат работы примера можно посмотреть в меню панели управления wCRM-admin-Документы-Каталог:
//доступ для авторизованных пользователей if(!$parser->getUserId()) die($parser->gt('not_perms')); $perm = $parser->checkPerms('wcrmp_rights_docs'); if(!$perm['r']) die($parser->gt('not_perms')); include_once(SYS_BASE_PATH.'main/classes/wcatalog.class.php'); class wtablecat extends wCatalog { public $perm = array('c' => 0, 'r' => 0, 'u' => 0, 'd' => 0); //заголовок страницы каталога public function _header() { global $parser; $this->title = 'Docs'; return ''; } //правый фрейм, навигация (древовидный список) public function _navigation() { global $parser; include_once(SYS_BASE_PATH.'main/classes/wajaxtree.class.php'); $tree = new wAjaxTree(); $tree->unselect_text = '< b >'.$parser->gt('allcategories').'< /b >'; $tree->q->select('objid'); $tree->q->lselect('name'); $tree->q->from('sys_objects'); $tree->q->where("objid<>'0'"); $tree->q->where("objtype='wcrmp_t_dirs_doccategs'"); $tree->q->where('parent=:parent:'); $tree->q->lorderby('name'); $tree->leaf_func = 'reloadgrid'; $tree->unselect = true; $tree->show(); return ''; } //левый фрейм, таблица (список) public function _content() { global $parser; $userid = $parser->getUserId(); $filter_period = (isset($_REQUEST['filter_period'])) ? $_REQUEST['filter_period'] : ''; include_once(SYS_BASE_PATH.'main/classes/wajaxgrid.class.php'); $w = new wAjaxGrid(); $w->edit_table_alias = 'o'; $w->f = new wcrmpro_models_docs_doc(); $w->caption = $parser->gt('allcategories'); $w->q->select('o.id', $parser->gt('id')); $w->q->select('o.creaton', $parser->gt('createdon')); $arr = array('edit' => $this->perm['u']); $w->q->select('o.title', $parser->gt('name'), $arr); $w->q->from('wcrmp_docs o'); $w->q->from('sys_objects u'); $w->q->from('sys_objects r'); $w->q->from('sys_objects t'); $w->q->from('sys_objects s'); $w->q->from('wcrmp_company c'); $w->q->where("o.id<>'0'"); $w->q->where("o.companyid=c.id"); $w->q->where("o.creatby=u.objid"); $w->q->where("o.monitoring=r.objid"); $w->q->where("o.doctype=t.objid"); $w->q->where("o.docstate=s.objid"); $w->q->orderby('o.creaton DESC'); //параметры для выбора периода $pars = array(); $pars['onchange'] = 'reloadgridm()'; $pars['name'] = 'filter_period'; $pars['val'] = 1; $w->addCell($parser->utils->periodMenu($pars)); //фильтр - выбор периода документов if($filter_period) { $per = $parser->utils->getPeriod($filter_period, true); $w->q->where("o.creaton ".$per); $w->f->extra_deleteAll_sql .= "AND (creaton ".$per.")"; } //поля, которые отображаются при нажатии на кнопку поиска $w->addSearchField('o.title', $parser->gt('name'), 'C'); $w->addSearchField('o.doccode', $parser->gt('doccode'), 'C'); //контекстное меню для элементов списка договоров //(если в модуле установлены соответствующие права) $w->editing = $this->perm['u']; $w->adding = $this->perm['c']; $w->copying = $this->perm['c']; $w->deleting = $this->perm['d']; $w->multiselect = $this->perm['d']; $w->en_mainmenu = false; //карточка документа, появляется при клике на id объекта $w->cardurl = $parser->makeUrl('wcrmp_docs_card'); $w->show(); } public function _footer() { return "< div style=\"border-top:1px solid #CCCCCC;\" >< /div >"; } } $cat = new wtablecat('wcrmp_docs'); //права на каталог $cat->perm = $perm; $cat->catalog_field = 'category'; $cat->showTable();