Jump to content


Photo
- - - - -

Изменения фильтра JBZoo Search - внесение ограничения по выборке для некоторых групп пользователей (ограничения по диапазону даты создания материала)

фильтр

Best Answer denoll , 27 August 2014 - 12:08

Все вопрос решен.

Не стал делать более гибкую систему данные задаются жестко без возможности изменения (заказчик и не просил)

В файле media\zoo\applications\jbuniversal\framework\models\jbmodel.filter.php

в _getSearchSelect() перед return $search вставил следующий код:

            $user = JFactory::getUser();

            $val = "TO_DAYS(NOW()) - TO_DAYS(`publish_up`) <=30";
            
            if ($user->guest or in_array('2', $user->groups)){
                $select->where($val, $val);
            }
Все работает.
Go to the full post


  • This topic is locked This topic is locked
6 replies to this topic

#1 denoll

denoll
  • JBZoo User (rus)
  • User rate: 0
  • posts: 16
  • topics: 3

Posted 25 August 2014 - 17:11

Добрый день, 

у  меня немного странный заказчик попался, требования заказчика следующие:

 

Ограничить возможность фильтрации материалов для некоторых групп пользователей

определенным сроком.

Например, для гостей или просто зарегистрированных пользователей

ограничивается возможность фильтрации по материалам дата создания которых ограничена месяцем от текущей даты 

(на сайте также есть дополнительные группы подписчиков - для этих групп фильтрация должна быть полноценной).

Но ограничена должна быть только возможность фильтрации.

Т.е. обычный доступ ко всем материалам сохраняется для всех.

 

 

Сделал копию модуля фильтра хочу дополнить его дополнительным условием, какой запрос в БД нужен примерно знаю, но как реализовать его в фильре JBZoo не разобрался. 

 

Никто не сталкивался с такими задачами?

Если кто-то что-то подобное решал, подскажите в какую сторону смотреть?

 

  • 0

#2 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 26 August 2014 - 05:07

Формирование SQL запроса происходит тут
media\zoo\applications\jbuniversal\framework\models\jbmodel.filter.php _getSearchSelect()

В переменной $select

Посмотреть уже сформированный запрос можно с помощью обычного echo
С помощью $select->where('table.field = ?', $value) можно добавлять свои условия
Тут можно зарядиться условиями для разных групп пользователей http://jbzoo.ru/docs...-item-templates
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 denoll

denoll
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 16
  • topics: 3

Posted 26 August 2014 - 05:19

Денис, доброго времени суток.

С условиями для разных групп пользователей так и делаю).

 

По SQL запросам не хотелось бы затрагивать сам фреймворк, нет варианта сделать это непосредственно в модуле ?


  • 0

#4 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 26 August 2014 - 05:26

Модуль не занимается поиском, он только выводит форму фильтра не более.
За работу с базой отвечают классы моделей из папки models
--
Если у вас не сложные условия, то можно попробовать в шаблоне формы добавить скрытые поля (type=hidden)
Позиции с этими полями добавлять в зависимости от группы пользователя.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 denoll

denoll
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 16
  • topics: 3

Posted 26 August 2014 - 05:30

Это то я понимаю.

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

                      ----    "С помощью $select->where('table.field = ?', $value) можно добавлять свои условия"

 

А можно сделать свой элемент и вытащить как-то переменную $select в это элемент и вставлять данный элемент в фильтр? 


Edited by denoll, 26 August 2014 - 06:07.

  • 0

#6 denoll

denoll
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 16
  • topics: 3

Posted 27 August 2014 - 09:53

Пишу:

 

$user = JFactory::getUser();
            $userGroup = $user->groups;
            $tb = '#__zoo_item' ;
            $val = "TO_DAYS(NOW()) - TO_DAYS('".$tb.".publish_up') <= 30";
            
            if ($user->guest or in_array('2', $userGroup)){
                $select->where($tb.'.publish_up = '.$val, $val);
                echo $select;
            }
В ответ ошибка не может найти столбец 'ru_zoo_item.publish_up:
Unknown column 'ru_zoo_item.publish_up' in 'where clause' SQL=SELECT DISTINCT tItem.id as id FROM ru_zoo_item AS tItem LEFT JOIN ru_zoo_jbzoo_index_proekty AS tIndex ON tIndex.item_id = tItem.id LEFT JOIN ru_zoo_jbzoo_sku AS tSku ON tSku.item_id = tItem.id LEFT JOIN ru_zoo_category_item AS tCategoryItem ON tCategoryItem.item_id = tItem.id WHERE tItem.access IN (1,2,3,6,7) AND tItem.state = '1' AND (tItem.publish_up = '0000-00-00 00:00:00' OR tItem.publish_up <= '2014-08-27 09:23:20') AND (tItem.publish_down = '0000-00-00 00:00:00' OR tItem.publish_down >= '2014-08-27 09:23:20') AND tItem.searchable = '1' AND tItem.type = 'proekty' AND tItem.application_id = '1' AND (tCategoryItem.category_id IN (2612)) AND ru_zoo_item.publish_up = TO_DAYS(NOW()) - TO_DAYS('ru_zoo_item.publish_up') <= 30 ORDER BY tItem.priority DESC, tItem.name ASC LIMIT 20
 
Подскажите что я неправильно делаю?

Edited by denoll, 27 August 2014 - 10:32.

  • 0

#7 denoll

denoll
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 16
  • topics: 3

Posted 27 August 2014 - 12:08   Best Answer

Все вопрос решен.

Не стал делать более гибкую систему данные задаются жестко без возможности изменения (заказчик и не просил)

В файле media\zoo\applications\jbuniversal\framework\models\jbmodel.filter.php

в _getSearchSelect() перед return $search вставил следующий код:

            $user = JFactory::getUser();

            $val = "TO_DAYS(NOW()) - TO_DAYS(`publish_up`) <=30";
            
            if ($user->guest or in_array('2', $user->groups)){
                $select->where($val, $val);
            }
Все работает.

Edited by denoll, 27 August 2014 - 12:10.

  • 0





Also tagged with one or more of these keywords: фильтр

Click to return to top of page in style!