Каталоги - это древовидные списки объектов. Класс, который реализует функционал построения дерева – 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();