Страница 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
Да, я так же хочу сделать, но у меня встают вопросы по реализации)
Re: Как изменить последовательность вывода товаров?
Добавлено: 2018.06.14, 11:21
delgus
https://github.com/kartik-v/yii2-sortable
Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое
Re: Как изменить последовательность вывода товаров?
Добавлено: 2018.06.14, 11:26
delgus
Но это не совсем то, точнее совсем не то))) Суть реализации такова - Есть форма.при передвижении табов должно меняться поле sort в модели.(это пишется на чистом js) Когда нажимаешь сохранить. Модели массово сохраняются с новыми значениями sort.
Re: Как изменить последовательность вывода товаров?
Добавлено: 2018.06.14, 11:27
Gyry
Я его сам только что нашёл)
Сейчас буду смотреть, но всё равно если у кого то есть мысли то этой теме высказывайтесь
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
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
Можете подсказать, я установил эту библиотеку, добавил в таблицу поле 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 не помогают