Перейти к содержимому


Фотография
- - - - -

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

фильтр

Лучший Ответ 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);
            }
Все работает.
Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 6

#1 denoll

denoll

Отправлено 25 August 2014 - 17:11

Добрый день, 

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

 

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

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

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

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

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

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

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

 

 

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

 

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

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

 

  • 0

#2 SmetDenis

SmetDenis

Отправлено 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

Отправлено 26 August 2014 - 05:19

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

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

 

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


  • 0

#4 SmetDenis

SmetDenis

Отправлено 26 August 2014 - 05:26

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



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


#5 denoll

denoll

Отправлено 26 August 2014 - 05:30

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

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

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

 

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


Сообщение отредактировал denoll: 26 August 2014 - 06:07

  • 0

#6 denoll

denoll

Отправлено 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
 
Подскажите что я неправильно делаю?

Сообщение отредактировал denoll: 27 August 2014 - 10:32

  • 0

#7 denoll

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);
            }
Все работает.

Сообщение отредактировал denoll: 27 August 2014 - 12:10

  • 0





Темы с аналогичным тегами фильтр

Click to return to top of page in style!