Здравствуйте!
Требуется на главной странице вывести 6 товаров в админке у которых стоит галочка Акция
Что я делаю:
Макрос %data doSelection('tovar_na_glavnoj','getAllFrontpage')% вставляю в нужное место на главной странице в шаблон index.tpl
Создаю в папке /usel/ файл getAllFrontpage.xml с следующим содержанием:
<?xml version="1.0" encoding="UTF-8"?>
<selection>
<target expected-result="pages">
<type module="catalog" method="object" />
<property name="1_ryad_tovarov_na_glavnoj" value="1" />
</target>
<sort>ord</sort>
<limit page="0">6</limit>
</selection>
Создаю файл в папке /tpls/data/usel/tovar_na_glavnoj.tpl с таким сожержанием
<?php
$FORMS = Array();
$FORMS['objects_block'] = <<<END
<p>Objects list (%total%/%per_page%):</p>
%items%
END;
$FORMS['objects_block_line'] = <<<END
%name%
%separator%
END;
$FORMS['objects_block_empty'] = <<<END
<p>Objects not found</p>
END;
$FORMS['elements_block'] = <<<END
<div class="item">
%items%
</div>
END;
$FORMS['elements_block_line'] = <<<END
<div class="item" umi:element-id="%id%">
<a href="%link%" umi:element-id="%id%" umi:field-name="name" ><h3 class="itemHeader">%name%</h3></a>
<div class="innerItem">
<a href="%link%">%data getProperty(%id%, 'izobrazhenie, 'preview_image')%</a>
%emarket price('%id%', 'short')%
<a href="%link%" class="learnMore">подробнее...</a>
%emarket basketAddLink(%id%, 'short')%
<div class="clear"></div>
</div>
</div>
END;
$FORMS['elements_block_empty'] = <<<END
<p>нет товаров для отображения</p>
END;
$FORMS['separator'] = <<<END
|
END;
$FORMS['separator_last'] = <<<END
!
END;
?>
Предворительно в шаблонах данных создал для объекта каталога группу "Опции управления" с полем 1 ряд товаров на главной с индитификатором 1_ryad_tovarov_na_glavnoj ТИП кнопка флажок.
Выводятся все товары.
Что нужно подправить?
Разобрался.
Возможно кому пригодится.
Во первых начиная с версии с 2.8: необходимо указать параметр usel.http.allow = "1" в файле config.ini в секции [streams
Во вторых файл getAllFrontpage.xml должен быть такой.
<selection>
<target expected-result="pages">
<type module="catalog" method="object" />
</target>
<property name="1_ryad_tovarov_na_glavnoj" value="1" />
<sort>ord</sort>
<limit page="0">6</limit>
</selection>
И все отлично работает
Делаем копию метода doSelection в custom.php модуля data и называем его как угодно, например, doSelectionCustom. Находим в этом методе такую строку:
if($element instanceof iUmiHierarchyElement) {
меняем ее на:
if($element instanceof iUmiHierarchyElement && $this->is_virtual($element->id) != 1) {
в этот же файл добавляем следующий метод:
public function is_virtual($id) {
$page_id = (int) $id;
$h = umiHierarchy::getInstance();
//экземпляр страницы
$element = $h->getElement($page_id);
if($element){
// object_id - id источника данных
$object_id = $element->getObjectId();
// список всех страниц, которые используют данный объект
$arr_id = $h->getObjectInstances($object_id);
// первая страница, это страница с наименьшим page_id, т.е. исходная страница
if($arr_id[0] != $page_id) return 1;
return 0;
}else return 0;
}
вот и весь фокус