UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: korogan от 24 Октября 2011, 21:33:48

Название: Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 24 Октября 2011, 21:33:48
Здравствуйте!

Требуется на главной странице вывести 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 ТИП кнопка флажок.

Выводятся все товары.
Что нужно подправить?
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 24 Октября 2011, 22:29:50
Разобрался.
Возможно кому пригодится.
Во первых начиная с версии с 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>

И все отлично работает
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: admin от 25 Октября 2011, 02:44:47
Usel мощная штука)
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 15:03:29
Парни, а как виртуальные копии исключить? а то по два товара на главной выводится..
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 15 Мая 2012, 15:07:23
Галочку у них сними
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 15:32:18
ну тогда у обоих товаров она снимется. это же виртуальная копия!
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 15 Мая 2012, 16:07:15
У копии сними. А у товара оставь
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 16:23:36
снимаю у копию, сохраняю - снимается у оригинала. как быть? галки не подходят
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 15 Мая 2012, 16:28:25
Создал у товара виртуальную копию.
Зашел в нее и снял галочку отображать на главной.
Проверяю на главной выводится только основной товар виртуально копии нет.
Проверяю в админке у товара галочка есть у копии нет.

Что то Вы не правильно делаете. 
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 16:44:19
версия umi какая у вас?
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 15 Мая 2012, 16:47:12
2.8.5
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 16:48:19
а у нас 2.8.5.1 и там это реально происходит. не важно у какого товара снять галку или поставить ее, то же само происходит и у копии.
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 15 Мая 2012, 17:01:24
Странно.
По идее такого быть не должно!!!
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 17:08:21
Могу дать доступ в админку, если не верите :)

А быть такое должно, потому что это виртуальная копия и изменения в одной странице отражаются полностью в другой.

Как в юселе исключить виртуальные копии? Или опять свой кастом писать?
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 15 Мая 2012, 17:26:45
В общем задача решена.
Добавлен кастом doselection с проверкой на виртуальные копии. Кому надо, пишите - поделюсь кодом.
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: KTI от 18 Мая 2012, 06:51:00
Ну если не трудно напишите конечно, многим может пригодится
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: rauschen от 18 Мая 2012, 12:38:54
Делаем копию метода 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;
}

вот и весь фокус
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: basurman1346 от 26 Сентября 2012, 10:50:16
возможно ли данный вариант использовать в xslt шаблонизаторе? вроде бы doSelection предназначен для использования с tpl?
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: admin от 26 Сентября 2012, 12:13:38
не пробовал doSelection в xslt так как она действительно только для tpl, но кто знает как костыль может и прикрутится, но вернее будет написать свой кастом с выборкой товаров и проверкой уже в данной функции является ли товар виртуальной копией
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 20 Июня 2013, 12:50:53
Делаю так:

<?xml version="1.0" encoding="utf-8"?>
<selection>
  <target expected-result="pages">
    <type module="catalog" method="object" />   
      <property name="bestseller" value="1" />     
    </target>   
    <sort>ord</sort>
     <limit page="0">6</limit>

</selection>

Раньше работало, сейчас выводит все товары.

Подскажите в чем ошибка и каким должен быть xml что бы вывести товары у которых отмечен чекбокс - bestseller
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: e.ioffe от 20 Июня 2013, 20:20:53
Делаю так:

<?xml version="1.0" encoding="utf-8"?>
<selection>
  <target expected-result="pages">
    <type module="catalog" method="object" />   
      <property name="bestseller" value="1" />     
    </target>   
    <sort>ord</sort>
     <limit page="0">6</limit>

</selection>

Раньше работало, сейчас выводит все товары.

Подскажите в чем ошибка и каким должен быть xml что бы вывести товары у которых отмечен чекбокс - bestseller

Насколько помню, property нужно вынести за пределы target  - http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/
Название: Re:Вывод товаров на главной с галочкой Акция
Отправлено: korogan от 20 Июня 2013, 20:23:05
Разобрался.
xml получился таким:

<?xml version="1.0" encoding="utf-8"?>
<selection>
  <target expected-result="pages">
    <type module="catalog" method="object" />
    <type id="120" />
    </target>     
      <property name="bestseller" value="1" />      
    <sort>ord</sort>
     <limit page="0">6</limit>

</selection>