Фильтрация вывода товаров в админке

Автор nakedvoodoo, 12 октября 2015, 16:49:35

« назад - далее »

nakedvoodoo

Доброго времени суток. Необходимо сделать фильтрацию выводимых товаров в админке, чтобы пользователь видел только свои товары. Поля и прочее сделал. Отсалось только отфильтровать ненужные товары. Нашел место где формируется запрос в БД на SELECT товаров (180 строка примерно AdminProductController). Но там только JOINы а вот WHERE не нашел, вот он мне и нужен так как в полном запросе он есть "id_product`) WHERE 1 ORDER BY a.`id_product` ASC LIMIT 0, 50" подскажите строчку и файл где формируется where для запроса выборки продуктов в админке. Или на крайняк где шаблон вывода цикла этих товаров я там условие бахну да и все, но это не айс решение лучше конечно запрос правильный сформировать с теми товарами которые нужны в данном случае только с товарами данного пользователя. Заранее большое спасибо за помощь.

mistral

В адмике в кателоге - товары, в тулбаре есть кноки sql менеджер. Нажимаете, переходите в sql manager. В нем можете редактировать запрос на выборку товаров, подставить условие  WHERE и сохранить.

nakedvoodoo

И ? ) он же не перепишет запрос который прописан в коде, + там нельзя делать php вставки. Мне необходимо найти место в коде где добавляется к запросу часть с WHERE (что собственно я найти и не могу)

coder

#3
Если хотите добавить поле в таблицу товаров и сделать его фильтром, то в файле AdminProductsController.php добавьте описание поля
$this->fields_list['name'] = array(
    'title' => $this->l('Name'),
    'callback' => 'getName',
    'filter_key' => 'a!name'
);

и функцию обработки данных (если хотите что-то делать с этим полем)
public static function getName($id_product)
{

nakedvoodoo

я таким образом  добавил поле id в нем хранится id пользователя кто создал товар, потом я вытащил id текущего пользователя и по сути мне теперь нужно при выводе товаров просто сделать 1 if. Подскажи а каким образом с помощью public static function getName($id_product) можно вывести только те товары которые создал текущий пользователь ?

nakedvoodoo

#5
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 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 я найти не могу

coder

Тогда и новое поле не нужно. В свое поле ID добавьте callbac. 
У вас уже есть таблица ид товаров и ид пользователей. Добавляте в класс Product.php метод getProductsClient($id_client), в нем запрос на выборку товаров. В callbac используте этот метод при выборе ид клиента.

coder

Цитата: nakedvoodoo от 12 октября 2015, 19:42:58
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 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.

nakedvoodoo

Если не сложно можно подробнее ? я не понял ничерта ) Как для чайника обьясни плиз)

coder

Я не заняю как у вас реализована связь клинет-товар. В стандарном пакете нет таких связей. Поэтому не могу сказать какой точно нужен код.


PrestaMan

Цитата: nakedvoodoo от 12 октября 2015, 19:42:58
Наверное вы не совсем меня правильно поняли мне не сортировать по этому полю нужно. А использовать его чтобы вывести только товары текущего юзера. Поэтому я и ищу где в коде в запрос в 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.
Лучшие цены!!!

nakedvoodoo

#11
Цитата: PrestaMan от 12 октября 2015, 20:18:12
В  AdminProductsController WHERE добавляют в функциях ajaxProcess....
Эти функции созданы специально для добавления условий в sql запросы.
PrestaMan, спасибо, уже конкретика ) а можно подробнее как туда вписать свое условие, сейчас не у компа и не могу сам код посмотреть, если тебя не затруднит напиши маленький пример. Спасибо огромное

DarinSr


nakedvoodoo

Цитата: DarinSr от 12 октября 2015, 20:37:04
Пример вы можете посмотреть и на github.com
https://github.com/PrestaShop/PrestaShop/blob/develop/controllers/admin/AdminProductsController.php
Спс, посмотрел, глаза разбегаются, там их куча, знает кто-нибудь где именно ?

coder

Цитата: PrestaMan от 12 октября 2015, 20:18:12
В  AdminProductsController WHERE добавляют в функциях ajaxProcess....
Эти функции созданы специально для добавления условий в sql запросы.
Это как раз для фильтров. Изменение контента без перезагрузки страницы.
В этом случае не фильтр, а ограничение показа товаров по конкретному пользователю.
Нужно переопределить getList добавить ид в where.