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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 10:41

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

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

delgus
Сообщения: 50
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

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

Сообщение delgus » 2018.06.14, 10:57

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

someweb
Сообщения: 367
Зарегистрирован: 2017.03.09, 10:12

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

Сообщение someweb » 2018.06.14, 11:00

Добавьте поле в таблицу и сортируйте по нему при выводе.

delgus
Сообщения: 50
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

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

Сообщение delgus » 2018.06.14, 11:04

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:06

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:08

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:10

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:14

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

delgus
Сообщения: 50
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

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

Сообщение delgus » 2018.06.14, 11:21

https://github.com/kartik-v/yii2-sortable

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

delgus
Сообщения: 50
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

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

Сообщение delgus » 2018.06.14, 11:26

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:27

delgus писал(а):
2018.06.14, 11:21
https://github.com/kartik-v/yii2-sortable

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

mkramer
Сообщения: 529
Зарегистрирован: 2014.12.14, 13:02

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

Сообщение mkramer » 2018.06.14, 11:31

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:36

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 11:39

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

mkramer
Сообщения: 529
Зарегистрирован: 2014.12.14, 13:02

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

Сообщение mkramer » 2018.06.14, 11:48

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 12:02

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 12:34

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

Wizard
Сообщения: 156
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

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

Сообщение Wizard » 2018.06.14, 12:59

Простейшая реализация

подключаем 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);
    }

mkramer
Сообщения: 529
Зарегистрирован: 2014.12.14, 13:02

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

Сообщение mkramer » 2018.06.14, 16:03

Gyry писал(а):
2018.06.14, 12:34

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

Gyry
Сообщения: 87
Зарегистрирован: 2017.09.11, 15:23

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

Сообщение Gyry » 2018.06.14, 18:35

mkramer писал(а):
2018.06.14, 16:03
Gyry писал(а):
2018.06.14, 12:34

Можете подсказать, я установил эту библиотеку, добавил в таблицу поле sort, объекты двигаются, ajax с key и pos приходят. Но вот вопрос, как и по какой логике мне изменять полу sort в бд?
Вы прочитали README из репы? Там описано всё. Если вы поле назвали не ord, а sort, надо установить orderAttribute у поведения. После этого контроллеры делаете по образцам из README и всё работает
У меня вопрос, после перемещения "товаров" у меня ширина столбцов постоянно изменяется, с чём это может быть связано?
Настройки css не помогают

Закрыто