1 Отредактировано Илья (18.07.2017 10:31:06)

Тема: Добавить поиск в собственный модуль

Подскажите пожалуйста как добавить в собственный модуль поиск по товарам?
Мой модуль выводит товары которые есть в заказах с определенным статусом и показывает их количество.
Подскажите как мне добавить поиск по этим товарам?Поиск по номеру заказа вроде бы работает, а вот по наименованию товара нет

remainctrl.inc.php

<?php
namespace Newpage\Controller\Admin;
use \RS\Html\Table\Type as TableType,            
    \RS\Controller\Admin\Helper,
    \RS\Html\Toolbar\Button as ToolbarButton,
    \RS\Html\Toolbar,
    \RS\Html\Filter,
    \RS\Html\Table,
    \RS\Html\Tree,
    \Shop\Model;
    
class RemainCtrl extends \RS\Controller\Admin\Crud
{
        function __construct()
    {
         parent::__construct(new \Newpage\Model\RemainApi());
    }
    
    function helperIndex()
    {
           
        
        $helper = parent::helperIndex();
        $edit_href = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $q = $this->api->queryObj();
        $q->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->where(array('status' => "2",
                          'type' => "product"
                            ));
            
        $helper = parent::helperIndex();
        $helper->setTopTitle(t('Количество товаров в заказе'));
        $edit_pattern = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $helper->setTable(new Table\Element(array(
            'Columns' => array(         
                new TableType\Text('order_num', t('Номер'), array('Sortable' => SORTABLE_BOTH, 'href' => $edit_href) ),
                new TableType\String('title', t('Название товара')), 
                new TableType\Text('amount', t('Количество'), array('Sortable' => SORTABLE_BOTH, 'href' => $edit_href) ),           
        ))));

        $helper->setFilter(new Filter\Control( array(
             'Container' => new Filter\Container( array( 
                                'Lines' =>  array(
                                    new Filter\Line( array('Items' => array(
                                                            new Filter\Type\Text('order_num','№', array('attr' => array('class' => 'w50')))
                                                        )
                                    )),
                                    
                                ),
                                'SecContainer' => new Filter\Seccontainer( array(
                                    'Lines' => array(
                                        new Filter\Line( array('Items' => array(
                                                new \Shop\Model\HtmlFilterType\Product('PRODUCT.title', t('Наименование товара'), array('searchType' => '%like%')),
                                        ))),
                                    )
                                ))
                            )),
            'Caption' => t('Поиск по заказам')
        )));

        return $helper;
    }
    
}

Повысить оценку Понизить оценку

Re: Добавить поиск в собственный модуль

Извините за долгий ответ.
Тут магии нет. Для того что бы фильтровать по title, нужно, чтобы в запросах была таблица включающая title поле. Я так полагаю это товар. Т.е. когда вы добавляете фильтр, то отправленное значение из поля применяется к запросу. Вам надо вывести итоговую таблицу Вашего запроса в контроллере и посмотреть, а есть ли там вообще колонка title и есть ли там значения. Если всё есть, то я наверное посоветовал бы Вам добавить неточное соответствие в колонку иначе у Вас будет искаться совершенно точное соответствие.

new TableType\String('title', t('Название товара'), array('SearchType' => '%like%')), 

3 Отредактировано Илья (24.07.2017 14:10:06)

Re: Добавить поиск в собственный модуль

А еще такой вопрос, как сложить количество одинаковых товарных позиций ?Я вот скрин приложил, там видно одинаковые позиции, а как это все объеденить в одну строку, что бы количество суммировалось?
http://joxi.ru/Q2K1LMYS9LkDRr

Повысить оценку Понизить оценку

Re: Добавить поиск в собственный модуль

Надо добавть через groupby поле title, а в поле с количеством добавить в select комманду SUM('Нужное поле с количеством') As Нужное поле с количеством

5 Отредактировано Илья (25.07.2017 16:50:57)

Re: Добавить поиск в собственный модуль

Закусило Александр пишет:

Надо добавть через groupby поле title, а в поле с количеством добавить в select комманду SUM('Нужное поле с количеством') As Нужное поле с количеством

Подскажите в чем ошибка?
Должно быть записей всего записей: 2928, но после того как вставляю вот этоткод

        $helper = parent::helperIndex();
        $edit_href = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $q = $this->api->queryObj();
        $q->select('SUM(amount) as amount')
            ->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->where(array('status' => "2",
                          'type' => "product"
                            ))
            ->groupby('title');

Получается вот так
http://s019.radikal.ru/i628/1707/6f/9af2e868705b.png

Вот так выглядит запрос
SELECT *, SUM(amount) as amount FROM `opt`.`tzte_order_items` as A INNER JOIN `opt`.`tzte_order` as B ON A.order_id=B.id WHERE (`status` = '2' AND `type` = 'product') GROUP BY title

Если загрузить его в phpmyadmin, то запрос выполняется верно, а почему тогда выводит не правильно?

P.S.
Код работает правильно, свои функции выполняет как нужно. НО заметил что проблема в пагинаторе появляется после того как я вставляю этот код а имеено: показывает неправильное количество страниц (всего 1) и количество записей, с чем это связано?
http://joxi.ru/8AnbpyoUqzOR9A

Повысить оценку Понизить оценку

Re: Добавить поиск в собственный модуль

Напишите в поддержку. Покопаем.

7 Отредактировано Илья (14.12.2017 12:37:25)

Re: Добавить поиск в собственный модуль

Подскажите пожалуйста, как в данном случае сгруппировать товары, по одинаковому статусу?
http://joxi.ru/p274bd9i0dWkZA

Запрос такого вида

        $q->select('amount,title,status,order_id')
            ->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->whereIn('status', array('2','3','6','14'))
            ->where(array('type' => "product"
                            ))
            ->orderby('title');

Повысить оценку Понизить оценку

Re: Добавить поиск в собственный модуль

->groupby('status')

9 Отредактировано Илья (14.12.2017 12:45:22)

Re: Добавить поиск в собственный модуль

Закусило Александр пишет:
->groupby('status')

Таким образом выводит всего 3 записи. http://joxi.ru/l2ZxlDRt8yEnNr
А если воспользоваться поиском то работает как надо. Но почему выводит только3 записи на первой странице?

Повысить оценку Понизить оценку

Re: Добавить поиск в собственный модуль

Потому, что при группировке по статусу, все записи объединяются в одну принадлежающую этому полю значению.
http://www.mysql.ru/docs/man/Group_by_functions.html
https://ru.stackoverflow.com/questions/ … 0%B2-mysql

11 Отредактировано Илья (14.12.2017 17:34:00)

Re: Добавить поиск в собственный модуль

Закусило Александр пишет:

Потому, что при группировке по статусу, все записи объединяются в одну принадлежающую этому полю значению.
http://www.mysql.ru/docs/man/Group_by_functions.html
https://ru.stackoverflow.com/questions/ … 0%B2-mysql

Я это понимаю. Не правильно поставил вопрос.Можно ли как то сделать, группировку вот таким видом?
Т.е. сейчас получается вот так выводиться
Товаров  4шт. со статусом Оплачен
Товаров  7шт. со статусом Подтвержден

А можно ли сделать, вот так?
Товаров А  3шт. со статусом Оплачен
Товаров А  2шт. со статусом Подтвержден
Товаров Б  1шт. со статусом Оплачен
Товаров Б  5шт. со статусом Подтвержден
......
...
...

Повысить оценку Понизить оценку

12

Re: Добавить поиск в собственный модуль

Офтопну, тему создавать не хотел smile
Кто-нибудь тестил вот этот поиск? https://maksfedorov.ru/blog/all/poisk-y … magazinov/

Re: Добавить поиск в собственный модуль

Сергей пишет:

Офтопну, тему создавать не хотел smile
Кто-нибудь тестил вот этот поиск? https://maksfedorov.ru/blog/all/poisk-y … magazinov/

Пока не тестировал, но интересно.

Re: Добавить поиск в собственный модуль

Илья пишет:
Закусило Александр пишет:

Потому, что при группировке по статусу, все записи объединяются в одну принадлежающую этому полю значению.
http://www.mysql.ru/docs/man/Group_by_functions.html
https://ru.stackoverflow.com/questions/ … 0%B2-mysql

Я это понимаю. Не правильно поставил вопрос.Можно ли как то сделать, группировку вот таким видом?
Т.е. сейчас получается вот так выводиться
Товаров  4шт. со статусом Оплачен
Товаров  7шт. со статусом Подтвержден

А можно ли сделать, вот так?
Товаров А  3шт. со статусом Оплачен
Товаров А  2шт. со статусом Подтвержден
Товаров Б  1шт. со статусом Оплачен
Товаров Б  5шт. со статусом Подтвержден
......
...
...

Ну сгруппируйте по id самого товара и всё