Автор Тема: Фильтрация вывода товаров в админке  (Прочитано 1279 раз)

12 Октябрь 2015, 16:49:35
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Доброго времени суток. Необходимо сделать фильтрацию выводимых товаров в админке, чтобы пользователь видел только свои товары. Поля и прочее сделал. Отсалось только отфильтровать ненужные товары. Нашел место где формируется запрос в БД на SELECT товаров (180 строка примерно AdminProductController). Но там только JOINы а вот WHERE не нашел, вот он мне и нужен так как в полном запросе он есть "id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50" подскажите строчку и файл где формируется where для запроса выборки продуктов в админке. Или на крайняк где шаблон вывода цикла этих товаров я там условие бахну да и все, но это не айс решение лучше конечно запрос правильный сформировать с теми товарами которые нужны в данном случае только с товарами данного пользователя. Заранее большое спасибо за помощь.
12 Октябрь 2015, 17:02:16
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В адмике в кателоге - товары, в тулбаре есть кноки sql менеджер. Нажимаете, переходите в sql manager. В нем можете редактировать запрос на выборку товаров, подставить условие  WHERE и сохранить.
12 Октябрь 2015, 17:51:39
Ответ #2
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
И ? ) он же не перепишет запрос который прописан в коде, + там нельзя делать php вставки. Мне необходимо найти место в коде где добавляется к запросу часть с WHERE (что собственно я найти и не могу)
12 Октябрь 2015, 19:21:54
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Если хотите добавить поле в таблицу товаров и сделать его фильтром, то в файле AdminProductsController.php добавьте описание поля
$this->fields_list['name'] = array(
    'title' => $this->l('Name'),
    'callback' => 'getName',
    'filter_key' => 'a!name'
);
и функцию обработки данных (если хотите что-то делать с этим полем)
public static function getName($id_product)
{
12 Октябрь 2015, 19:39:11
Ответ #4
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
я таким образом  добавил поле id в нем хранится id пользователя кто создал товар, потом я вытащил id текущего пользователя и по сути мне теперь нужно при выводе товаров просто сделать 1 if. Подскажи а каким образом с помощью public static function getName($id_product) можно вывести только те товары которые создал текущий пользователь ?
12 Октябрь 2015, 19:42:58
Ответ #5
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 180 строке АдминПродуктКонтролера добавляется последняя часть запроса вот это выдернул из полного запроса селекта товаров ("id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50), мне тупо нужно дописать and. А где к запросу добавляется вот эта часть WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50 я найти не могу
12 Октябрь 2015, 19:47:43
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Тогда и новое поле не нужно. В свое поле ID добавьте callbac. 
У вас уже есть таблица ид товаров и ид пользователей. Добавляте в класс Product.php метод getProductsClient($id_client), в нем запрос на выборку товаров. В callbac используте этот метод при выборе ид клиента.
12 Октябрь 2015, 19:49:33
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 180 строке АдминПродуктКонтролера добавляется последняя часть запроса вот это выдернул из полного запроса селекта товаров ("id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50), мне тупо нужно дописать and. А где к запросу добавляется вот эта часть WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50 я найти не могу
Это действительно не фильтры. Тогда через разрешения по типу прфилей в AdminAccess.
12 Октябрь 2015, 20:01:51
Ответ #8
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если не сложно можно подробнее ? я не понял ничерта ) Как для чайника обьясни плиз)
12 Октябрь 2015, 20:09:43
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Я не заняю как у вас реализована связь клинет-товар. В стандарном пакете нет таких связей. Поэтому не могу сказать какой точно нужен код.

12 Октябрь 2015, 20:18:12
Ответ #10
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 180 строке АдминПродуктКонтролера добавляется последняя часть запроса вот это выдернул из полного запроса селекта товаров ("id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50), мне тупо нужно дописать and. А где к запросу добавляется вот эта часть WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50 я найти не могу
В  AdminProductsController WHERE добавляют в функциях ajaxProcess....
Эти функции созданы специально для добавления условий в sql запросы.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
12 Октябрь 2015, 20:26:30
Ответ #11
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В  AdminProductsController WHERE добавляют в функциях ajaxProcess....
Эти функции созданы специально для добавления условий в sql запросы.
PrestaMan, спасибо, уже конкретика ) а можно подробнее как туда вписать свое условие, сейчас не у компа и не могу сам код посмотреть, если тебя не затруднит напиши маленький пример. Спасибо огромное
12 Октябрь 2015, 20:37:04
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
12 Октябрь 2015, 20:49:14
Ответ #13
  • Новичок
  • *
  • Сообщений: 18
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пример вы можете посмотреть и на github.com
https://github.com/PrestaShop/PrestaShop/blob/develop/controllers/admin/AdminProductsController.php
Спс, посмотрел, глаза разбегаются, там их куча, знает кто-нибудь где именно ?
12 Октябрь 2015, 20:57:28
Ответ #14
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
В  AdminProductsController WHERE добавляют в функциях ajaxProcess....
Эти функции созданы специально для добавления условий в sql запросы.
Это как раз для фильтров. Изменение контента без перезагрузки страницы.
В этом случае не фильтр, а ограничение показа товаров по конкретному пользователю.
Нужно переопределить getList добавить ид в where.