Как изменить последовательность вывода товаров?
Как изменить последовательность вывода товаров?
Добрый день. Мне нужно сделать, что бы можно было изменят последовательность вывода товаров(например перетаскивать из, то есть самому задавать последовательность). Подскажите, дайте наводку как это реализовать?
P.s. последовательность я планирую задавать в админке. Вывожу товары с помощью GridView. И я почему то уверен, что это можно сделать с мощью дефолтных функций GridView, но я их не нахожу. По этому пожалуйста дайте мне наводки куда искать
P.s. последовательность я планирую задавать в админке. Вывожу товары с помощью GridView. И я почему то уверен, что это можно сделать с мощью дефолтных функций GridView, но я их не нахожу. По этому пожалуйста дайте мне наводки куда искать
Re: Как изменить последовательность вывода товаров?
Я полагаю что речь идет про сортировку а значит нужно как-то воздействовать напрямую на DataProvider, возможно придется свой DataProvider писать.
https://www.yiiframework.com/doc/guide/ ... -providers
https://www.yiiframework.com/doc/guide/ ... -providers
Re: Как изменить последовательность вывода товаров?
Добавьте поле в таблицу и сортируйте по нему при выводе.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Re: Как изменить последовательность вывода товаров?
Самый простой вариант пожалуй - это добавить в модель свойство например , sort и в БД поле - sort и по нему и выводить, а в админке соответственно дать возможность изменять это свойство)
Re: Как изменить последовательность вывода товаров?
Я это понимаю, но я так же хочу реализовать, что бы можно были из перетаскивать как блоки ну и соответственно что бы при перетаскивании позиция у товара сохранялась. Я уверен, что уже данных функционал кто то уже реализовал(или он уже из коробки в Yii2 доступен, не знаю, я лишь предполагаю). И мне бы хотелось понять технологию как это лучше всего и правильней сделать, ну или использовать уже готовый вариант.
Re: Как изменить последовательность вывода товаров?
Полностью согласен)
но есть какой нибудь готовый вариант, что бы можно было перемещать товары как блоки и в зависимости от позиции он изменял поле sort?
Re: Как изменить последовательность вывода товаров?
Что то на подобии этого, надо будет реализовать
https://jqueryui.com/sortable/
https://jqueryui.com/sortable/
Re: Как изменить последовательность вывода товаров?
Да, я так же хочу сделать, но у меня встают вопросы по реализации)Gyry писал(а): ↑2018.06.14, 11:10 Что то на подобии этого, надо будет реализовать
https://jqueryui.com/sortable/
Re: Как изменить последовательность вывода товаров?
https://github.com/kartik-v/yii2-sortable
Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое
Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое
Re: Как изменить последовательность вывода товаров?
Но это не совсем то, точнее совсем не то))) Суть реализации такова - Есть форма.при передвижении табов должно меняться поле sort в модели.(это пишется на чистом js) Когда нажимаешь сохранить. Модели массово сохраняются с новыми значениями sort.
Re: Как изменить последовательность вывода товаров?
Я его сам только что нашёл)delgus писал(а): ↑2018.06.14, 11:21 https://github.com/kartik-v/yii2-sortable
Я вот это нашел. Но сам не пробовал это расширение, но думаю что его применить будет легче чем писать свое
Сейчас буду смотреть, но всё равно если у кого то есть мысли то этой теме высказывайтесь
Re: Как изменить последовательность вывода товаров?
Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже
Re: Как изменить последовательность вывода товаров?
Это будет не совсем удобно, я хочу сделать так, что бы при переносе товара на новую позицию он изменял своё значение sort(то есть когда отпускаешь мышку его sort изменяется).
но тут у меня возникаю вопросы:
1) При переносе объекта как он будет сохранять новую позицию (AJAX?)
2) Как он будет определять что ты его перетащить и от будет находится например между 2 и 3 объектом?
3) Самый не понятный. Допустим у тебя объект идёт 11 в списке, ты его перетащил на 3 позицию. Вопрос, кто встанет на 11 позицию? По идее нужно будет все объекты с 3 по 10 передвинуть вниз(то есть sort - 1)
Re: Как изменить последовательность вывода товаров?
О круто)mkramer писал(а): ↑2018.06.14, 11:31 Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже
А демки нету?
Re: Как изменить последовательность вывода товаров?
Нафига? Этот мужик каждый шаг описал, в подробностях. Если по внешнему виду, то там http://jqueryui.com/sortable/ под капотом
Re: Как изменить последовательность вывода товаров?
Сейчас буду пробоватьmkramer писал(а): ↑2018.06.14, 11:48Нафига? Этот мужик каждый шаг описал, в подробностях. Если по внешнему виду, то там http://jqueryui.com/sortable/ под капотом
Re: Как изменить последовательность вывода товаров?
Можете подсказать, я установил эту библиотеку, добавил в таблицу поле sort, объекты двигаются, ajax с key и pos приходят. Но вот вопрос, как и по какой логике мне изменять полу sort в бд?mkramer писал(а): ↑2018.06.14, 11:31 Я пользуюсь https://github.com/sjaakp/yii2-sortable-behavior (к тому же, там есть и мой вклад). В отличие от картика, здесь уже сделана вся работа и на уровне базы данных тоже
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Как изменить последовательность вывода товаров?
Простейшая реализация
подключаем jquery-ui.js удобным способом
подключаем 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: Как изменить последовательность вывода товаров?
Вы прочитали README из репы? Там описано всё. Если вы поле назвали не ord, а sort, надо установить orderAttribute у поведения. После этого контроллеры делаете по образцам из README и всё работает
Re: Как изменить последовательность вывода товаров?
У меня вопрос, после перемещения "товаров" у меня ширина столбцов постоянно изменяется, с чём это может быть связано?
Настройки css не помогают