Выдано 110647 лицензий

Контроллеры

Контроллеры предназначены для отображения различных динамических данных в клиентском разделе. Конструктор контроллера принимает основной объект для которого идет показ. Например, контроллер показа информационной системы принимает объект информационной системы.

Пример показа 5 новостей:

$Informationsystem_Controller_Show = new Informationsystem_Controller_Show(
    Core_Entity::factory('Informationsystem', 1));
$Informationsystem_Controller_Show
    ->xsl(
       Core_Entity::factory('Xsl')->getByName('СписокНовостейНаГлавной')
    )
    ->limit(5)
    ->show();

Кэширование в контроллерах и добавление внешних данных

Типовые контроллеры рассчитывают уникальную метку кэширования на основании опций контроллера. В случае, если вы передаете контроллеру внешние данные, которые используются в XSL и меняют его поведение, необходимо через метод addCacheSignature() передавать дополнительные сигнатуры кэширования, уникализирующие текущий вызов контроллера.

$Shop_Controller_Show->addEntity(
    Core::factory('Core_Xml_Entity')
        ->name('my_tag')
        ->value($value)
)
->addCacheSignature('my_tag=' . $value);

Ограничение по дополнительному свойству выборки элементов контроллером

см. Ограничения по дополнительным свойствам в контроллерах

Сортировка по дополнительному свойству товара

см. Сортировка по дополнительному свойству

Добавление внешних данных в контроллер

Добавление внешних данных осуществляется через методы 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)');

Комментарии

  • adeveloper

    Informationsystem_Controller_Show: как вывести одну запись с конкретным Id ?

    как вывести одну запись с конкретным Id ?

    25.07.2016 14:24:03 adeveloper

    Без темы

    ->limit(1)
    ->item(123)

    25.07.2016 14:36:49 HostCMS
    adeveloper

    Данный код лишь вывод первую запись Информационной системы, а вовсе не конкретную запись

    $Informationsystem_Controller_Show->xsl(
    Core_Entity::factory('Xsl')->getByName('ВыводЕдиницыИнформационнойСистемы')
    )
    ->limit(1)
    ->item(157)
    ->show();

    25.07.2016 15:51:57 adeveloper

    Без темы

    Если элемент не из корневой группы, то укажите
    ->group(ID группы)
    или
    ->group(FALSE)

    26.07.2016 09:12:53 HostCMS
  • Добавление xml ветки

    Здравствуйте,
    Подскажите как добавить в xml свою ветку, вот такого вида:

    1026000.00

    Интересует прежде всего как к элементу id добавить?

    12.09.2015 20:05:53 Илья

    Пример добавления с атрибутом

    // Добавляем XML-сущность контроллеру показа
    $Shop_Controller_Show->addEntity(
    Core::factory('Core_Xml_Entity')
    ->name('producers')
    ->value(123)
    ->addAttribute('id', 1)
    );

    14.09.2015 09:29:12 HostCMS
  • Smogg

    боже, а по человечески можно???

    "Например, контроллер показа информационной системы принимает объект информационной системы."

    Тут одни междометия да знаки препинания из общего словаря. Все прочее - ваш личный местечковый жаргон.

    Если есть контроллер показа, то есть и другие контроллеры? Что это за зверь "информационная система"? С ее отпрыском - "объект информационной системы"?

    Контроллер по своему названию что-то контроллит, а если он относится к цмс, то именно ЦМС и контроллит. Зачем масло маслить?

    15.05.2015 15:59:20 Smogg

    Без темы

    Есть и другие контроллеры, один показывает информационную систему, другой магазин и прочее. Рано вам в контроллеры лезть, пока не ознакомились что такое информационная система и прочее. Начните с руководства пользователя, оно в PDF доступно на странице http://www.hostcms.ru/documentation/pdf/

    15.05.2015 16:05:24 HostCMS

    Без темы

    Честно говоря, документацию я тоже не очень понимаю. Вот страница 110 - есть подраздел "Настройка типа доставки «Почта России» " куда добавлять эту (private $_coefficient = 1; ) настройку?
    Я к тому, что справка у вас действительно труднодоступная не зависимо от уровня подготовки того, кто ее читает.

    16.03.2016 13:41:12 Анна
  • ingram

    Хотелось бы пример со списком

    Все супер, но как быть со списками? например у меня есть список со странами, и мне нужно отсортировать товары по названиям стран по алфавиту. Помогите примерчиком пожалуйста.

    23.03.2014 16:25:35 ingram