Страница 1 из 2

Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 10:41
Gyry
Добрый день. Мне нужно сделать, что бы можно было изменят последовательность вывода товаров(например перетаскивать из, то есть самому задавать последовательность). Подскажите, дайте наводку как это реализовать?

P.s. последовательность я планирую задавать в админке. Вывожу товары с помощью GridView. И я почему то уверен, что это можно сделать с мощью дефолтных функций GridView, но я их не нахожу. По этому пожалуйста дайте мне наводки куда искать

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 10:57
delgus
Я полагаю что речь идет про сортировку а значит нужно как-то воздействовать напрямую на DataProvider, возможно придется свой DataProvider писать.
https://www.yiiframework.com/doc/guide/ ... -providers

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:00
someweb
Добавьте поле в таблицу и сортируйте по нему при выводе.

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:04
delgus
Самый простой вариант пожалуй - это добавить в модель свойство например , sort и в БД поле - sort и по нему и выводить, а в админке соответственно дать возможность изменять это свойство)

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:06
Gyry
someweb писал(а): 2018.06.14, 11:00 Добавьте поле в таблицу и сортируйте по нему при выводе.
Я это понимаю, но я так же хочу реализовать, что бы можно были из перетаскивать как блоки ну и соответственно что бы при перетаскивании позиция у товара сохранялась. Я уверен, что уже данных функционал кто то уже реализовал(или он уже из коробки в Yii2 доступен, не знаю, я лишь предполагаю). И мне бы хотелось понять технологию как это лучше всего и правильней сделать, ну или использовать уже готовый вариант.

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:08
Gyry
delgus писал(а): 2018.06.14, 11:04 Самый простой вариант пожалуй - это добавить в модель свойство например , sort и в БД поле - sort и по нему и выводить, а в админке соответственно дать возможность изменять это свойство)
Полностью согласен)
но есть какой нибудь готовый вариант, что бы можно было перемещать товары как блоки и в зависимости от позиции он изменял поле sort?

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:10
Gyry
Что то на подобии этого, надо будет реализовать
https://jqueryui.com/sortable/

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:14
Gyry
Gyry писал(а): 2018.06.14, 11:10 Что то на подобии этого, надо будет реализовать
https://jqueryui.com/sortable/
Да, я так же хочу сделать, но у меня встают вопросы по реализации)

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:21
delgus
https://github.com/kartik-v/yii2-sortable

Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое 8-)

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:26
delgus
Но это не совсем то, точнее совсем не то))) Суть реализации такова - Есть форма.при передвижении табов должно меняться поле sort в модели.(это пишется на чистом js) Когда нажимаешь сохранить. Модели массово сохраняются с новыми значениями sort.

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:27
Gyry
delgus писал(а): 2018.06.14, 11:21 https://github.com/kartik-v/yii2-sortable

Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое 8-)
Я его сам только что нашёл)
Сейчас буду смотреть, но всё равно если у кого то есть мысли то этой теме высказывайтесь

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:31
mkramer
Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:36
Gyry
delgus писал(а): 2018.06.14, 11:26 Но это не совсем то, точнее совсем не то))) Суть реализации такова - Есть форма.при передвижении табов должно меняться поле sort в модели.(это пишется на чистом js) Когда нажимаешь сохранить. Модели массово сохраняются с новыми значениями sort.
Это будет не совсем удобно, я хочу сделать так, что бы при переносе товара на новую позицию он изменял своё значение sort(то есть когда отпускаешь мышку его sort изменяется).
но тут у меня возникаю вопросы:
1) При переносе объекта как он будет сохранять новую позицию (AJAX?)
2) Как он будет определять что ты его перетащить и от будет находится например между 2 и 3 объектом?
3) Самый не понятный. Допустим у тебя объект идёт 11 в списке, ты его перетащил на 3 позицию. Вопрос, кто встанет на 11 позицию? По идее нужно будет все объекты с 3 по 10 передвинуть вниз(то есть sort - 1)

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:39
Gyry
mkramer писал(а): 2018.06.14, 11:31 Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже
О круто)
А демки нету?

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 11:48
mkramer
Gyry писал(а): 2018.06.14, 11:39 О круто)
А демки нету?
Нафига? Этот мужик каждый шаг описал, в подробностях. Если по внешнему виду, то там http://jqueryui.com/sortable/ под капотом

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 12:02
Gyry
mkramer писал(а): 2018.06.14, 11:48
Gyry писал(а): 2018.06.14, 11:39 О круто)
А демки нету?
Нафига? Этот мужик каждый шаг описал, в подробностях. Если по внешнему виду, то там http://jqueryui.com/sortable/ под капотом
Сейчас буду пробовать :)

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 12:34
Gyry
mkramer писал(а): 2018.06.14, 11:31 Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже
Можете подсказать, я установил эту библиотеку, добавил в таблицу поле sort, объекты двигаются, ajax с key и pos приходят. Но вот вопрос, как и по какой логике мне изменять полу sort в бд?

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 12:59
BalykhinAS
Простейшая реализация

подключаем jquery-ui.js удобным способом

Код: Выделить всё

            <?= GridView::widget([
                'id' => 'form-grid-view',
                'options' => [
                    'data-sort-action' => Url::to(['sort']),
                ],
                'dataProvider' => $dataProvider,
                'columns' => [
                    [
                        'value' => function($m) {
                            $hidden = Html::input('hidden', 'position[]', $m->id);
                            return "<i class='glyphicon glyphicon-move move-zone'></i>$hidden";
                        },
                        'format' => 'raw',
                        'headerOptions' => ['class' => 'text-center', 'width' => '40'],
                        'contentOptions' =>['class' => 'text-center']
                    ],
                    'name',
                    'slug',
                    'sort'
                ],
            ]); ?>

Код: Выделить всё

$(function() {

    $("#form-grid-view .table tbody").sortable({
        handle: ".move-zone",
        tolerance:"pointer",
        scrollSensitivity:40,
        opacity:0.7,
        axis: "y",
        update:function() {
            var position = [];
            $('input[name*=position]').each(function(i, input) {
                position.push($(input).val());
            });
            $.ajax({
                method: "POST",
                url: $('#form-grid-view').data('sort-action'),
                data: { position: position }
            });
        }
    });

});

Код: Выделить всё

    public function actionSort()
    {
        if( $position = Yii::$app->request->post('position') ) {
            $models = Model::find()->where(['id' => $position])->indexBy('id')->all();
            foreach($position as $sort => $id) {
                $model = $models[$id];
                $model->sort = $sort;
                $model->save();
            }
        }
        return $this->asJson($position);
    }

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 16:03
mkramer
Gyry писал(а): 2018.06.14, 12:34
Можете подсказать, я установил эту библиотеку, добавил в таблицу поле sort, объекты двигаются, ajax с key и pos приходят. Но вот вопрос, как и по какой логике мне изменять полу sort в бд?
Вы прочитали README из репы? Там описано всё. Если вы поле назвали не ord, а sort, надо установить orderAttribute у поведения. После этого контроллеры делаете по образцам из README и всё работает

Re: Как изменить последовательность вывода товаров?

Добавлено: 2018.06.14, 18:35
Gyry
mkramer писал(а): 2018.06.14, 16:03
Gyry писал(а): 2018.06.14, 12:34
Можете подсказать, я установил эту библиотеку, добавил в таблицу поле sort, объекты двигаются, ajax с key и pos приходят. Но вот вопрос, как и по какой логике мне изменять полу sort в бд?
Вы прочитали README из репы? Там описано всё. Если вы поле назвали не ord, а sort, надо установить orderAttribute у поведения. После этого контроллеры делаете по образцам из README и всё работает
У меня вопрос, после перемещения "товаров" у меня ширина столбцов постоянно изменяется, с чём это может быть связано?
Настройки css не помогают