Дабы не нарушать стройную логику работы с различными списками товаров в бекэнде, было бы неплохо расширить перечень хешей, обрабатываемых shopProductsCollection, хэшами типа 'plugin/MyPlugin/data'.
Поддерживаю как автор одной из тем. Хотелось бы иметь возможность фильтровать коллекции и влиять на выборки везде, где эти коллекции применяются: в бекенде и фронтенде.
Не совсем понял про "расширить перечень хешей". Сейчас есть хук "products_collection". С его помощью можно (с некоторыми ограничениями... типа не работает рандомная сортировка) создать свой хэш и свою коллекцию.
С импортом коллекций мне сталкиваться не приходилось, но по прямой ссылке в админке будет открываться нужный список ?action=products#/products/hash=MyPlugin/data
По поводу фильтрации, мне кажется, достаточно такого хука:
https://github.com/webasyst/shop-script/pull/214
Аналогично фильтрам в заказах можно будет добавить исключающие WHERE и JOIN.
В первом поможет именно фильтр коллекции. Я таким заморачивался на примере сокрытия части OUTLET-товаров по геолокации пользователя.
При формировании любой коллекции товаров (даже при помощи дополнительного плагина) у нас есть возможность повлиять на выборку добавив дополнительное условие WHERE p.is_hidden > 0
А во втором посте (твоём) вроде ж решили, что это баг :)
Идея такая:
1. Плагин1 умеет формировать коллекцию.
2. Плагин2 умеет что-то делать с коллекцией (выделить все).
Плагину2 не важно как именно формируется коллекция. Он вызывает shopProductsCollection с нужным хэшом и выполняет действие с коллекцией:
"Плагином2" может быть и стандартный экспорт товаров.
Жень, повторюсь, я с коллекциями знаком достаточно поверхностно, и с топиком о фильтре может действительно пройдет. А вот то что названо багом (во втором топике), так словоблудием просто заниматься не хотелось :) Проблему обозначил и успокоился :) Как мне видится, это не баг, а, скажем так, конструктивное ограничение фреймворка. И вот это вот
Плагину2 не важно как именно формируется коллекция. Он вызывает shopProductsCollection с нужным хэшом и выполняет действие с коллекцией
Плагину2 просто не сделать, т.к. он не сможет получить нужный хэш в связи с тем, что коллекция которая в данный момент на экране не может быть описана ни одним из стандартных хэшей обрабатываемых shopProductsCollection. Как первый пришедший в голову пример, перечень товаров с ценой выше 1000р. Такую коллекцию, насколько понимаю, не описать штатными хэшами.
Это плагин перелинковка тегов, который умеет создавать коллекции товаров, у которых есть ходя бы один тег как у базового товара (условие не проще твоего :) ).
В коллекции у нас 23 товара (в данном случае).
Это плагин Ожидаемая дата поставки. На нём проще показать, т.к. работу с коллекциями я делал сам.
Обработчик onSave диалога отправляет post-запрос к плагину.
В запросе указаны не айдишки товаров, а хэш.
Ну и скрин обработки запроса приводил выше.
Если стандартные функции из "Обработать" работают неправильно - это баг. Но у меня всё работает :)
Достаточно было просто теоретической раскладки, без экспериментов и скриншотов :)
Если выделить все товары на первом скриншоте и жамкнуть Экспорт в CSV, то что экспортируется?
2.1 Если экспортируются не те товары что на экране, то это что, баг?
2.1.1. Если баг, то его можно исправить существующими инструментами или необходимо что-то доделывать?
Тут либо я тебя не до конца понимаю, в довесок не очень ориентируясь в этом месте, либо ты меня :) Проблема именно в передаче этой коллекции дальше, в сервисы из правого столбца. Например, Экспорт в CSV. В своих-то обработчиках понятно, ты можешь творить что хочешь. Но речь о штатных. Экспорт CSV, или (ттт) Удалить товары.
Рискну предположить, что и добавление в категорию и Удаление не работают. Хотя навскидку не пойму откуда дублирование.
Так вот насколько я понимаю, он не может учитывать коллекции ввиду того, что текущая архитектура этого места не предполагает формирования коллекций по произвольным хэшам (читай от плагинов). А не предполагает - в силу ограничений shopProductsCollection. И, собственно, о таком расширении функционала этого класса и речь.
В общем фиг поймешь, пусть от WA кто-нибудь выскажется. Но я про велосипед в свое время спрашивал, на котором объехать это дело можно - в ответ тишина. Ну я и забил пока. А тут снова тема всплыла... :)
Пришлось сесть и покопатся... :) В итоге понял где я ошибся. Впервые столкнулся с этим на плагине Незаполненные товары. В CSV выгружается все махом. Попробовал положить товары не относящиеся ни к одной категории в отдельную категорию - процесс затянулся, и я его прервал, интуитивно предположив что тоже кладет все товары. Собственно отсюда вывод и сделал что все сервисы из правого столбца не работают, а дальше экспериментировал только с экспортом. Сейчас глянул внимательнее, а при попытке положить товары без категории в категорию там просто 500 ошибка вываливается в какой-то момент и процесс зависает. Причем, допускаю, ошибка индивидуальная. А может и нет.
Ну а так-то да, получается проблема исключительно с импортом раз оно так, а стало быть ошибка.
13 комментариев
Поддерживаю как автор одной из тем. Хотелось бы иметь возможность фильтровать коллекции и влиять на выборки везде, где эти коллекции применяются: в бекенде и фронтенде.
Не совсем понял про "расширить перечень хешей". Сейчас есть хук "products_collection". С его помощью можно (с некоторыми ограничениями... типа не работает рандомная сортировка) создать свой хэш и свою коллекцию.
С импортом коллекций мне сталкиваться не приходилось, но по прямой ссылке в админке будет открываться нужный список ?action=products#/products/hash=MyPlugin/data
По поводу фильтрации, мне кажется, достаточно такого хука:
https://github.com/webasyst/shop-script/pull/214
Аналогично фильтрам в заказах можно будет добавить исключающие WHERE и JOIN.
Если я правильно понимаю, то хук "products_collection" не поможет в ситуациях описанных в топиках, ссылки на которые есть в первом посте.
В первом поможет именно фильтр коллекции. Я таким заморачивался на примере сокрытия части OUTLET-товаров по геолокации пользователя.
При формировании любой коллекции товаров (даже при помощи дополнительного плагина) у нас есть возможность повлиять на выборку добавив дополнительное условие WHERE p.is_hidden > 0
А во втором посте (твоём) вроде ж решили, что это баг :)
Идея такая:
1. Плагин1 умеет формировать коллекцию.
2. Плагин2 умеет что-то делать с коллекцией (выделить все).
Плагину2 не важно как именно формируется коллекция. Он вызывает shopProductsCollection с нужным хэшом и выполняет действие с коллекцией:
"Плагином2" может быть и стандартный экспорт товаров.
Жень, повторюсь, я с коллекциями знаком достаточно поверхностно, и с топиком о фильтре может действительно пройдет. А вот то что названо багом (во втором топике), так словоблудием просто заниматься не хотелось :) Проблему обозначил и успокоился :) Как мне видится, это не баг, а, скажем так, конструктивное ограничение фреймворка. И вот это вот
Плагину2 просто не сделать, т.к. он не сможет получить нужный хэш в связи с тем, что коллекция которая в данный момент на экране не может быть описана ни одним из стандартных хэшей обрабатываемых shopProductsCollection. Как первый пришедший в голову пример, перечень товаров с ценой выше 1000р. Такую коллекцию, насколько понимаю, не описать штатными хэшами.
Пришлось устроить эксперимент :)
Это плагин перелинковка тегов, который умеет создавать коллекции товаров, у которых есть ходя бы один тег как у базового товара (условие не проще твоего :) ).
В коллекции у нас 23 товара (в данном случае).
Это плагин Ожидаемая дата поставки. На нём проще показать, т.к. работу с коллекциями я делал сам.
Обработчик onSave диалога отправляет post-запрос к плагину.
В запросе указаны не айдишки товаров, а хэш.
Ну и скрин обработки запроса приводил выше.
Если стандартные функции из "Обработать" работают неправильно - это баг. Но у меня всё работает :)
Вот код вызова диалога
$("#date-plugin-set-date").click(function () { var products = $.product_list.getSelectedProducts(true); if (!products.count) { alert('Пожалуйста, выберите хотя бы один товар.'); return false; } $("#date-plugin-dialog").waDialog({ buttons: '<input type="submit" value="Сохранить" class="button green" /> или <a href="#" class="cancel">отмена</a>', onLoad: function () { $("h1 span.gray", $('#date-plugin-dialog')).html('(' + products.count + ')'); }, onSubmit: function (d) { d.find('a.cancel').after('<i class="icon16 loading"></i>'); $.post('?plugin=date&action=save', $(this).serializeArray().concat(products.serialized), function (response) { if (response.status == 'fail') { alert('Во время сохранения произошла ошибка'); } }, 'json').fail(function () { alert('Во время сохранения произошла ошибка'); }).always(function () { d.trigger('close'); $.products.dispatch(); }); return false; } }); return false; });Вся магия в $.product_list.getSelectedProducts(true);
Жень, 2 момента:
2.1 Если экспортируются не те товары что на экране, то это что, баг?
2.1.1. Если баг, то его можно исправить существующими инструментами или необходимо что-то доделывать?
Тут либо я тебя не до конца понимаю, в довесок не очень ориентируясь в этом месте, либо ты меня :) Проблема именно в передаче этой коллекции дальше, в сервисы из правого столбца. Например, Экспорт в CSV. В своих-то обработчиках понятно, ты можешь творить что хочешь. Но речь о штатных. Экспорт CSV, или (ттт) Удалить товары.
Ну... я провёл эксперимент... :)
Всё кроме экспорта работает.
2 раза дубликаты всей коллекции
Экспорт - баг. Или визуальный (счётчик не нужен). Или доделать нужно, чтобы коллекции учитывал.
Рискну предположить, что и добавление в категорию и Удаление не работают. Хотя навскидку не пойму откуда дублирование.
Так вот насколько я понимаю, он не может учитывать коллекции ввиду того, что текущая архитектура этого места не предполагает формирования коллекций по произвольным хэшам (читай от плагинов). А не предполагает - в силу ограничений shopProductsCollection. И, собственно, о таком расширении функционала этого класса и речь.
В общем фиг поймешь, пусть от WA кто-нибудь выскажется. Но я про велосипед в свое время спрашивал, на котором объехать это дело можно - в ответ тишина. Ну я и забил пока. А тут снова тема всплыла... :)
Всё работает, но не экспорт.
Дубли - это для скриншота. Выделить всё - дублировать - выделить всё - дублировать.
Пришлось сесть и покопатся... :) В итоге понял где я ошибся. Впервые столкнулся с этим на плагине Незаполненные товары. В CSV выгружается все махом. Попробовал положить товары не относящиеся ни к одной категории в отдельную категорию - процесс затянулся, и я его прервал, интуитивно предположив что тоже кладет все товары. Собственно отсюда вывод и сделал что все сервисы из правого столбца не работают, а дальше экспериментировал только с экспортом. Сейчас глянул внимательнее, а при попытке положить товары без категории в категорию там просто 500 ошибка вываливается в какой-то момент и процесс зависает. Причем, допускаю, ошибка индивидуальная. А может и нет.
Ну а так-то да, получается проблема исключительно с импортом раз оно так, а стало быть ошибка.
Добрый день, (не знаю как писать в личку) можешь помочь лэндинг на сайт запилить?