public function getCountObjects($id_parent){
$id_parent = (int) $id_parent;
$hierarchy = umiHierarchy::getInstance();
$element = $hierarchy->getElement($id_parent);
if($element && $element->getMethod() == 'category'){
$count = $element->count_object->$pages;
if(!is_null($count)){
if($count > 0){
return "<span class='total_object'>{$count}</span>";
}
else{
return "<span class='is_not_count'></span>";
}
}else{
$hierarchyTypes = umiHierarchyTypesCollection::getInstance();
$hierarchyType = $hierarchyTypes->getTypeByName("catalog", "object");
$hierarchyTypeId = $hierarchyType->getId();
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId);
$element->setValue('count_object',$count);
$element->commit();
if($count > 0) return "<span class='total_object'>{$count}</span>";
}
}
}
Вот рабочий кастом. который подсчитывает кол-во объектов в разделе каталога...
Не подскажите что и где нужно добавить, чтобы кол-во объектов выводилось с учетом фильтра?
фильтр у меня такой ?fields_filter[stores_state]=118.
это фильтр по составному полю, а точнее склады.
Буду Вам очень благодарен за любую помощь!!!
С уважением, Дмитрий.
если у вас ?fields_filter[stores_state]=118 работает в адресной строке (что с опционном поле совсем не факт). То есть, подставив его в адресную строку на странице с выводом товаров, вы видите, что фильтрация применяется правильно.
Тогда вам надо немного переделать макрос. Вместо функции getChildsCount использовать selector выборку. В которой вы и зададите фильтрацию по полю.
Ия еще несного поменят вывод результата, чтобы return был в самом конце функции, а не прописывался 2 раза в разных блоках (причем в последнем выводе не было учета того, что количество может быть равным 0)
public function getCountObjects($id_parent){
$id_parent = (int) $id_parent;
$hierarchy = umiHierarchy::getInstance();
$element = $hierarchy->getElement($id_parent);
if($element && $element->getMethod() == 'category'){
$count = $element->count_object->$pages;
if(is_null($count)){
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('stores_state')->equals(118);
$pages->where('hierarchy')->page($id_parent)->childs(0);
$count = $pages->length;
$element->setValue('count_object',$count);
$element->commit();
}
if($count > 0){
return "<span class='total_object'>{$count}</span>";
}
else{
return "<span class='is_not_count'></span>";
}
}
}
moy_sait/razdel/name?fields_filter[stores_state]=118 да работает в адресной строке.
где stores_state - состояние на складе(составной тип)
118 - id склада
если изменить строку:
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId);
на selector:
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('stores_state')->equals(118);
$pages->where('hierarchy')->page($id_parent)->childs(0);
$count = $pages->length;
,то выдает ошибку:
Ошибка (Exception): Произошла критическая ошибка. Скорее всего, потребуется участие разработчиков. Подробности по ссылке 17000
пробовал искать по другому полю(типа кнопка-флажок):
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
$pages->where('chapaevsk')->equals(true);
$pages->where('hierarchy')->page($id_parent)->childs(4);
$count = $pages->length;
все пырцает!))
Вывод напрашивается что в строке:
$pages->where('stores_state')->equals(118);
явно что то не то...
Вообщем спасибо за помощь! Буду лопатить документацию по API UMI selector
попробуйте строчку
$pages->where('stores_state')->equals(118);
заменить на
$pages->where('stores_state')->equals(array('rel'=>118));
Вот теперь другое дело, только в моем случае будет не так:
$pages->where('hierarchy')->page($id_parent)->childs(0);
а вот так:
$pages->where('hierarchy')->page($id_parent)->childs(4);
БОЛЬШОЕ ВАМ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
Вот теперь другое дело, только в моем случае будет не так:
$pages->where('hierarchy')->page($id_parent)->childs(0);
а вот так:
$pages->where('hierarchy')->page($id_parent)->childs(4);
странно, в вашем изначальном коде есть строчка
$count = $hierarchy->getChildsCount($id_parent, false, true, 0, $hierarchyTypeId);
и 0 в параметрах функции, это как раз глубина, но возможно, код вы приводили просто для примера