Контроллеры предназначены для отображения различных динамических данных в клиентском разделе. Конструктор контроллера принимает основной объект для которого идет показ. Например, контроллер показа информационной системы принимает объект информационной системы.
Допускается использование XSL-шаблонов или TPL, также контроллер может сгенерировать JSON при построении сайтов с использованием библиотек, например, React.js.
Установить вывод с использованием XSL-шаблона можно двумя способами:
Вариант 1, передача названия XSL-шаблона:
$Informationsystem_Controller_Show ->xsl('СписокНовостейНаГлавной') ->show();
Вариант 2, передача объекта Xsl_Model, полученного по названию:
$Informationsystem_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName('СписокНовостейНаГлавной') ) ->show();
Вариант 1, передача названия TPL-шаблона:
$Informationsystem_Controller_Show ->tpl('СписокНовостейНаГлавной') ->show();
Вариант 2, передача объекта Tpl_Model, полученного по названию:
$Informationsystem_Controller_Show ->tpl( Core_Entity::factory('Tpl')->getByName('СписокНовостейНаГлавной') ) ->show();
Для генерации JSON код обработки размещают в коде настроек типовой динамической страницы после метода parseUrl(), например:
header('Content-type: application/json; charset=utf-8'); header('Pragma: no-cache'); header('Cache-Control: private, no-cache'); header('Content-Disposition: inline; filename="files.json"'); header('Vary: Accept'); $Shop_Controller_Show = new Shop_Controller_Show( Core_Entity::factory('Shop', 1) ); $Shop_Controller_Show ->limit(5) ->group(FALSE) ->parseUrl(); $Shop_Controller_Show ->groupsMode('all') ->mode('json') ->show();
Типовые контроллеры рассчитывают уникальную метку кэширования на основании опций контроллера. В случае, если вы передаете контроллеру внешние данные, которые используются в XSL и меняют его поведение, необходимо через метод addCacheSignature()
передавать дополнительные сигнатуры кэширования, уникализирующие текущий вызов контроллера.
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('my_tag')
->value($value)
)
->addCacheSignature('my_tag=' . $value);
Если необходимо пометить кэшируемые данные особым тегом, то вызовите ->addCacheTag($tagName) *доступно с версии 6.9.3
$Shop_Controller_Show->addCacheTag('foo');
$Informationsystem_Controller_Show = new Informationsystem_Controller_Show( Core_Entity::factory('Informationsystem', 1)); $Informationsystem_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName('СписокНовостейНаГлавной') ) ->limit(5) ->show();
см. Ограничения по дополнительным свойствам в контроллерах
см. Сортировка по дополнительному свойству
Добавление внешних данных осуществляется через методы addEntity(object)
и addEntities(array)
, для очистки добавляемого объекта от ранее добавленных в него дочерних элементов применяется метод clearEntities()
.
Добавить собственный тег можно с использованием Core::factory('Core_Xml_Entity')
, ему можно указать значение или в него разместить дочерние элементы.
$Shop_Controller_Show->addEntity( Core::factory('Core_Xml_Entity')->name('mytag')->value(123) );
Добавление тега и размещение в него объекта:
// Новый тег $oMytag = Core::factory('Core_Xml_Entity')->name('mytag'); // В него помещаем объект $oMyObject $oMytag->addEntity($oMyObject->clearEntities()); $Shop_Controller_Show->addEntity($oMytag);
$oShop = $Shop_Controller_Show->getEntity(); // XML-сущность, к которой будут добавляться производители $oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers'); // Добавляем XML-сущность контроллеру показа $Shop_Controller_Show->addEntity($oProducersXmlEntity); // Список производителей $aShop_Producers = $oShop->Shop_Producers->findAll(); foreach ($aShop_Producers as $oShop_Producer) { // Добавляем производителя потомком XML-сущности $oProducersXmlEntity->addEntity( $oShop_Producer->clearEntities() ); } $Shop_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName($xslName) ) ->itemsProperties(TRUE) ->show();
$Structure_Controller_Show = new Structure_Controller_Show( Core_Entity::factory('Site', CURRENT_SITE)); $Structure_Controller_Show->xsl(Core_Entity::factory('Xsl') ->getByName('ЛевоеМеню') ) ->menu(3) // Показывать группы информационных систем в меню ->showInformationsystemGroups(TRUE) // Показывать элементы информационных систем в меню ->showInformationsystemItems(FALSE); if (is_object(Core_Page::instance()->object) && get_class(Core_Page::instance()->object) == 'Informationsystem_Controller_Show') { $Structure_Controller_Show->addEntity( Core::factory('Core_Xml_Entity') ->name('informationsystem_group_id') ->value(intval(Core_Page::instance()->object->group)) )->addEntity( Core::factory('Core_Xml_Entity') ->name('informationsystem_item_id') ->value(intval(Core_Page::instance()->object->item)) ); } $Structure_Controller_Show->show();
$Informationsystem_Controller_Show
->informationsystemItems()
->queryBuilder()
->leftJoin('comment_informationsystem_items', 'comment_informationsystem_items.informationsystem_item_id', '=', 'informationsystem_items.id')
->leftJoin('comments', 'comments.id', '=', 'comment_informationsystem_items.comment_id')
->groupBy('informationsystem_items.id')
->clearOrderBy()
->orderBy('AVG(comments.grade)');
как вывести одну запись с конкретным Id ?
->limit(1)
->item(123)
$Informationsystem_Controller_Show->xsl(
Core_Entity::factory('Xsl')->getByName('ВыводЕдиницыИнформационнойСистемы')
)
->limit(1)
->item(157)
->show();
Если элемент не из корневой группы, то укажите
->group(ID группы)
или
->group(FALSE)
Здравствуйте,
Подскажите как добавить в xml свою ветку, вот такого вида:
1026000.00
Интересует прежде всего как к элементу id добавить?
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('producers')
->value(123)
->addAttribute('id', 1)
);
"Например, контроллер показа информационной системы принимает объект информационной системы."
Тут одни междометия да знаки препинания из общего словаря. Все прочее - ваш личный местечковый жаргон.
Если есть контроллер показа, то есть и другие контроллеры? Что это за зверь "информационная система"? С ее отпрыском - "объект информационной системы"?
Контроллер по своему названию что-то контроллит, а если он относится к цмс, то именно ЦМС и контроллит. Зачем масло маслить?
Есть и другие контроллеры, один показывает информационную систему, другой магазин и прочее. Рано вам в контроллеры лезть, пока не ознакомились что такое информационная система и прочее. Начните с руководства пользователя, оно в PDF доступно на странице http://www.hostcms.ru/documentation/pdf/
Честно говоря, документацию я тоже не очень понимаю. Вот страница 110 - есть подраздел "Настройка типа доставки «Почта России» " куда добавлять эту (private $_coefficient = 1; ) настройку?
Я к тому, что справка у вас действительно труднодоступная не зависимо от уровня подготовки того, кто ее читает.
Все супер, но как быть со списками? например у меня есть список со странами, и мне нужно отсортировать товары по названиям стран по алфавиту. Помогите примерчиком пожалуйста.