UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: 31rus от 25 Апреля 2012, 11:35:06

Название: Вывод объектов каталога по условию
Отправлено: 31rus от 25 Апреля 2012, 11:35:06
Имеем такую структуру:
Раздел 1
   Раздел 1.1
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=3
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.2
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=2
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=3
   Раздел 1.3
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=1


Так как же вывести что бы было так:
Раздел 1
   Раздел 1.1
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.2
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.3
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=1

Делаю на TPL шаблонах.
Написал кастомный макрос который вставляю в
$FORMS['objects_block_line'] = <<<END
%custom myselect()%
END;

$pages = new selector('pages');
      $pages->types('hierarchy-type')->name('catalog', 'object');
      $pages->where('hierarchy')->page($id)->childs(1); //передаю сюда category_id
      $pages->where('sp')->equals('vip'); //условие по которому отбираю
      foreach($pages as $page) {
      echo $page->link;
      }
Так выводит все отобранные объекты.

Тут первая засада, echo нас не устраивает, так как требуется return, но он выводит только 1 объект.

Попробовал так же USEL но результаты схожие примерно.

Во всех вариантах как правило происходит следующее, или выводится во всех подразделах одини и теже варианты, равные количеству найденных объектов, или выводит все в первом разделе.

Где я косячу? Уже неделю сижу с этим вопросом:(
Название: Re:Вывод объектов каталога по условию
Отправлено: Vladimir от 25 Апреля 2012, 12:03:58
так ничего и не понял. у вас есть структура сайта, показанная на схеме 1. Так?
Дальше уже непонятно. "Так как же вывести что бы было так:" - куда вывести, смысл этого? Из-за чего все это?
Название: Re:Вывод объектов каталога по условию
Отправлено: 31rus от 25 Апреля 2012, 13:52:40
так ничего и не понял. у вас есть структура сайта, показанная на схеме 1. Так?
Дальше уже непонятно. "Так как же вывести что бы было так:" - куда вывести, смысл этого? Из-за чего все это?
Попробую так:
Сделать выборку всех разделов и подразделов каталога, в которую включит только те объекты у которых поле выпадающий список содержит Спецразмещение.
Название: Re:Вывод объектов каталога по условию
Отправлено: Vladimir от 25 Апреля 2012, 17:10:37
мммм....  и при этом сохранить структуру подкатологов? Так?

А фильтр по полю "Спецразмещение" не проходит? Надо только придумать как в адресной строке передавать строку запроса: ?fields_filter[имя_поля]=[id_значения]  (не ручаюсь за точность, но в таком стиле; точнее посмотите на демосайте, где фильтрация по хомячкам). Таким образом и вопрос с постраничным выводом решится.
Передавать можно кастомным макросом, в котором дописывать $_REQUEST['fields_filter']...........  а затем вызывать стандартный макрос вывода каталога.
Название: Re:Вывод объектов каталога по условию
Отправлено: 31rus от 25 Апреля 2012, 19:41:48
решил так, но при этом выводит только 1 объект
Кастом
public function distric ($category_id, $districs) {
      $pages = new selector('pages');
      $pages->types('hierarchy-type')->name('catalog', 'object');
      $pages->where('hierarchy')->page($category_id)->childs(1); //передаю сюда category_id
      $pages->where('date_to')->more(date("Y-m-d h:m:s"));//сравниваем дату ограничения размещения с текущей датой в формате Год-месяц-день часы:минуты:секунды
      $pages->where('distric')->equals($districs); //условие Дистрик по которому отбираю
      $pages->where('sp')->equals('vip'); //условие Спецразмещение по которому отбираю
      foreach($pages as $page) {
      return "%catalog viewObject($page->link, select-all-vip)%";
      }
            }
а вот и TPL

<?php

$FORMS = Array();

$FORMS['category'] = <<<END
%catalog getCategoryList('select-all-vip', '%category_id%')%
%catalog getObjectsList('select-all-vip', '%category_id%')%
END;


$FORMS['category_block'] = <<<END
<ul>
   %lines%
</ul>


END;


$FORMS['category_block_empty'] = <<<END

END;


$FORMS['category_block_line'] = <<<END
<li>
   <a href="%link%">%text%</a>
</li>
%catalog getCategoryList('select-all-vip', '%id%', 5)%
%catalog getObjectsList('select-all-vip', '%id%', 3)%

END;



$FORMS['objects_block'] = <<<END
%custom distric(%category_id%, %content menu('cut',1)%)% /выбираем виртуальный каталог от которого сортируем регион
END;


$FORMS['objects_block_search_empty'] = <<<END
%catalog search('%category_id%')%

<p>По Вашему запросу ничего не найдено.</p>

END;


$FORMS['objects_block_line'] = <<<END

%custom distric(%category_id%, %content menu('cut',1)%)%
END;



$FORMS['view_block'] = <<<END
<p class="%data getProperty(%id%, sp, clear)%"><a href="%link%">%h1_eng%</a>

</p>

END;

$FORMS['search_block'] = <<<END

<form method="get" action="%content get_page_url(%category_id%)%">
<h3>Фильтр по товарам</h3>
%lines%
<p>
   <input type="submit" value="Подобрать" /><br />
   <input type="button" onclick="javascript: window.location = '%content get_page_url(%category_id%)%';" value="Сбросить" />
</p>
</form>


END;


$FORMS['search_block_line'] = <<<END
   <p>
      %selector%
   </p>
END;



$FORMS['search_block_line_relation'] = <<<END
%title% <select name="fields_filter[%name%]"><option />%items%</select>

END;

$FORMS['template_block_line_symlink'] = <<<END
%title% <select name="fields_filter[%name%]"><option />%items%</select>

END;

$FORMS['search_block_line_text'] = <<<END
%title% <input type="text" name="fields_filter[%name%]" class="textinputs" value="%value%" />

END;

$FORMS['search_block_line_price'] = <<<END
%title% от &nbsp;до
<input type="text" name="fields_filter[%name%][0]" value="%value_from%" />
<input type="text" name="fields_filter[%name%][1]" value="%value_to%" />

END;

$FORMS['search_block_line_boolean'] = <<<END
%title% <input type="checkbox" name="fields_filter[%name%]" %checked% value="1" />

END;

?>
Название: Re:Вывод объектов каталога по условию
Отправлено: admin от 26 Апреля 2012, 02:15:07
я чесно говоря так и не понял задачу и кажеткак эся мнету задачу не крути а usel помог бы куда лучше, но если рассматривать ваш кастои и TPL то скорее всего ошибка с тем что выводит только один объект, связанна с блоком
$FORMS['objects_block'] = <<<END
%custom distric(%category_id%, %content menu('cut',1)%)% /выбираем виртуальный каталог от которого сортируем регион
END;

его бы надо писать так
$FORMS['objects_block'] = <<<END
%lines%
END;
Название: Re:Вывод объектов каталога по условию
Отправлено: 31rus от 26 Апреля 2012, 08:17:30
я чесно говоря так и не понял задачу и кажеткак эся мнету задачу не крути а usel помог бы куда лучше, но если рассматривать ваш кастои и TPL то скорее всего ошибка с тем что выводит только один объект, связанна с блоком
$FORMS['objects_block'] = <<<END
%custom distric(%category_id%, %content menu('cut',1)%)% /выбираем виртуальный каталог от которого сортируем регион
END;

его бы надо писать так
$FORMS['objects_block'] = <<<END
%lines%
END;

Есть каталог http://go2cyp.com/directory/
Требуется на главной каталога построить структуру каталога всех уровней вложенности до объектов каталога и вывести 3-5 объектов в каждом подразделе отвечающим условиям:
Поле 1 = значение
Поле 2 = значение

если нет объектов то ничего не выводить.

Данил, так как ты написал у меня не работает, поэтому только таким костылями.
Видимо баг какой то:( или у меня с руками:)
Не работает так, в чем и дело.

Но USEL мне кажется не пойдет, у меня до 5000 объектов каталогов и 8 виртуальных копий с них, как бы сервак не подох
Название: Re:Вывод объектов каталога по условию
Отправлено: admin от 26 Апреля 2012, 08:29:25
а расскажите на примере вашу задачу, чтобы четче понять почему при каталоге вида

Раздел 1
   Раздел 1.1
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=3
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.2
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=2
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=3
   Раздел 1.3
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=1


Вам надо выводить товары так что бы:
Раздел 1
   Раздел 1.1
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 3 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.2
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
   Раздел 1.3
      Объект 1 Дополнительное поле в шаблонах данных выпадающий список=1
      Объект 2 Дополнительное поле в шаблонах данных выпадающий список=1
Название: Re:Вывод объектов каталога по условию
Отправлено: 31rus от 26 Апреля 2012, 11:58:57
1 уровень (Раздел) directory
 2 уровень (Раздел) recreation_entertainment (Родитель 1 уровень)
  3 уровень (Раздел) food_service_night_life (Родитель 2 уровень)
   4 уровень (Раздел) restaurants_taverns_cafes_fast_foods (Родитель 3 уровень)
     Объект каталога 1 "Сlassic" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список(vip) и Регион - Distric выпадающий список (paphos))
     Объект каталога 2 "Imperial" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список () и Регион - Distric выпадающий список (Nicosia))
     Объект каталога 3 "ANY" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список (vip) и Регион - Distric выпадающий список (paphos))
   4 уровень (Раздел) night_clubs_bars_pubs (Родитель 4 уровень)
     Объект каталога 1 "Mare Mare" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список(vip) и Регион - Distric выпадающий список (paphos))
    Объект каталога 2 "Zapoy" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список() и Регион - Distric выпадающий список (limassol))
Так же присутствуют другие разделы с похожей структурой.

Требуется на странице контента вывести Разделы и Подразделы и объекты в них отвечающим условиям фильтрации (Где поле SP=vip & Distric = Paphos)

В итоге должно получится нечто такое
1 уровень (Раздел) directory Ссылка на страницу
 2 уровень (Раздел) recreation_entertainment (Родитель 1 уровень) Ссылка на страницу
  3 уровень (Раздел) food_service_night_life (Родитель 2 уровень) Ссылка на страницу
   4 уровень (Раздел) restaurants_taverns_cafes_fast_foods (Родитель 3 уровень) Ссылка на страницу
     Объект каталога 1 "Сlassic" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список(vip) и Регион - Distric выпадающий список (paphos))
         Объект каталога 3 "ANY" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список (vip) и Регион - Distric выпадающий список (paphos))
   4 уровень (Раздел) night_clubs_bars_pubs (Родитель 3 уровень) Ссылка на страницу
     Объект каталога 1 "Mare Mare" имеет дополнительные поля по которым осуществляется сортировка и фильтрация (Спецразмещение- SP выпадающий список(vip) и Регион - Distric выпадающий список (paphos))