Всего 123 809 комментариев

seosavspb
22 декабря 2022, 11:43
0
Ну вот для меня это сейчас задача сложная((( буду грызть гранит науки спасибо большое
Lori
22 декабря 2022, 11:14
0
Ответ на вопрос, который ты написал в ЛС (сообщения у тебя закрыты):
Да, я написал плагин на событие msOnChangeInCart и менял вес товара в корзине. Код скинуть не смогу, ибо это было давно и доступы у меня не сохранились, скажу лишь, что тогда задача казалось сложной, ибо в PHP я был не силен, сейчас же это на 5-10 минут от силы, стоит лишь почитать доку minishop2 и потренироваться. Успехов
Алексей Шумаев
22 декабря 2022, 11:11
0
Насколько я помню, 1500 товаров нормально работают на мин тарифе бегета с suggestions. Если фильтров не очень много, конечно. Таких сайтов в своё время море наделано было.
Pavel Zarubin
22 декабря 2022, 10:08
+3
Странное решение честно говоря
1) Зачем тут использовать laravel? Какие он преимущества даст, кроме собственного удовлетворения что теперь то «все красиво»
2) В быстрой фильтрации важнее правильные индексы и в принципе архитектура бд, laravel на это никак не повлияет
3) «Микросервисы» на PHP сложно назвать микросевисами, хотя бы потому, что они обмениваются по json api (вместо gRPC например) который медленный и сильно нагружает сеть, я уже молчу о том, что сам laravel сильно тяжелее того же modx

По мне лучше бы показал как интегрировать какой нибудь легковесный полнотекстовой поиск, по типу meilisearch и на основе него уже построить фильтрацию, а уже что там будешь использовать для обращения к api meilisearch laravel, modx или нативный php уже не важно
Так хотя бы профит будет
Александр Туниеков
22 декабря 2022, 07:35
0
У меня на поддержке осталось несколько магазинов, например:
1) 96000 товаров и 12 фильтров
2) 9000 и 55 фильтров (индексы в мускуле для msProductData уже закончились) :-)
modhost на максимальном тарифе, проблем нет, всё и всегда нормально работает, каких-то заметных задержек в фильтрах нет. Все свойства реализованы расширением msProductData.
Ну я вот на производительных серверах не тестировал. Интересно насколько влияет проиводительность сервера.
Вообще говоря для каталогов с больше 1500 товаров по умолчанию отключается suggestions и скорость значительно выше. Но фильтр значительно не удобнее.
Разработчик
22 декабря 2022, 01:40
0
Спасибо за ответ) Мне тут помогли немного, когда поставил Fenom, то все получилось сделать)) Ранее пробовал сделать без него и очень не хватало свободы))
Разработчик
22 декабря 2022, 01:38
0
Спасибо за ответ)

Тут не совсем стандартный проект, тут получается как каталог продуктов, что-то вроде рейтинга. Как такового каталога там нет.

Я решил проблему через where у pdoResources

Может косячно, но пока работает

1. Вот тут я собрал все контейнеры (папки) в которых лежат ресурсы. Так как все ресурсы выводятся на одной странице по папкам. Где первый элемент наверху, остальные скрыты в контейнере, то сделал так.

<div class="py-8 bg-light">
                <div class="container">
                    <div class="group-last-child">
                        [[!pdoResources?
                           &depth=`1`
                           &where=`{"isfolder":"1"}`
                           &tvPrefix=``
                           &tpl=`Tpl-lvl-1-catalog-All-Deposits`
                           &sortby=`{"menuindex":"ASC"}`
                           &includeTVs=`valuta, time-if-deposit`
                        ]]       
                    </div>
                </div>
            </div>

На этот этапе я фильтрую результат, сделав сниппет-обертку
Total — мне нужно для того, чтобы знать сколько элементов в папке и сравнивать с последним. Сравнивать с последним нужно для закрывающего тэга обертки. А открывается тег обертки на втором.

[[!mySnippetFilter?
   &parents=`[[+id]]`
   &depth=`5`
   &tplFirst=``
   &resources=``
   &tvPrefix=``
   &tpl=`Tpl-lvl-2-Bank-All-Deposits`
   &sortby=`{"menuindex":"ASC"}`
   &includeTVs=`valuta, time-if-deposit, from-sum-deposit, bet-for-deposit`
   &setTotal=`1`
   &toPlaceholder=`myOut`
]]  
[[+myOut]]

Данный снипет является оберткой над pdoResources, нужен для фильтрации результата

Сниппет представляет собой

$where = Array();

if(count($_POST['tv'])) {
    $where = array_merge($where, $_POST['tv'] );
    if (count($where['from-sum-deposit:<='])) {
        unset($where['from-sum-deposit:<=']);
    };  
    if (!empty($where['srok']) and $where['srok'] == 'all' ) {
        unset($where['srok']);
    }
}

$scriptProperties['where'] = json_encode($where);
$html = $modx->runSnippet('pdoResources', $scriptProperties);
echo $html;

А вывожу я все это при помощи Fenom на странице

{set $total = $_modx->getPlaceholder('total')} Присваиваю последний элемент переменной
{if $idx == 1} // Если это первый элемент, для него определенный вывод
Тут код чанка для первого элемента
{else}
{$idx == 2? 'код открытия оболочки для второго и последующих элементов, эта оболочка появляется и скрывается по кнопке' : ' '}
код для элементов внутренних, начиная от второго и дальше
{$idx == $total? 'проверка на последний элемент, получается если total равен idx тогда он последний и я закрываю два дива':''}
{/if}
Конечно тут накручено, но кое как с помощью получилось мне получить последний элемент в выдаче pdoResources))) Пока работает, в целом как мне нужно
Разработчик
22 декабря 2022, 01:28
0
Не совсем, точнее это было нужно немного для другого ))

У меня на странице выводятся все продукты компании. Но эти продукты группируются по папкам. Получается на одной странице есть результаты из каждой папки, при том у второго и последнего блока должны быть div обертки. Проблему решил следующим образом

<div class="py-8 bg-light">
                <div class="container">
                    <div class="group-last-child">
                        [[!pdoResources?
                           &depth=`1`
                           &where=`{"isfolder":"1"}`
                           &tvPrefix=``
                           &tpl=`Tpl-lvl-1-catalog-All-Deposits`
                           &sortby=`{"menuindex":"ASC"}`
                           &includeTVs=`valuta, time-if-deposit`
                        ]]       
                    </div>
                </div>
            </div>

Это сниппет — Tpl-lvl-1-catalog-All-Deposits

[[!mySnippetFilter?
   &parents=`[[+id]]`
   &depth=`5`
   &tplFirst=``
   &resources=``
   &tvPrefix=``
   &tpl=`Tpl-lvl-2-Bank-All-Deposits`
   &sortby=`{"menuindex":"ASC"}`
   &includeTVs=`valuta, time-if-deposit, from-sum-deposit, bet-for-deposit`
   &setTotal=`1`
   &toPlaceholder=`myOut`
]]  
[[+myOut]]

Данный снипет является оберткой над pdoResources, нужен для фильтрации результата

Сниппет представляет собой

$where = Array();

if(count($_POST['tv'])) {
    $where = array_merge($where, $_POST['tv'] );
    if (count($where['from-sum-deposit:<='])) {
        unset($where['from-sum-deposit:<=']);
    };  
    if (!empty($where['srok']) and $where['srok'] == 'all' ) {
        unset($where['srok']);
    }
}

$scriptProperties['where'] = json_encode($where);
$html = $modx->runSnippet('pdoResources', $scriptProperties);
echo $html;

А вывожу я все это при помощи Fenom на странице

{set $total = $_modx->getPlaceholder('total')}
{if $idx == 1}
Тут код чанка для первого элемента
{else}
{$idx == 2? 'код открытия оболочки для второго и поледующих элементов, эта оболочка появляется и скрывается по кнопке' : ' '}
код для элементов внутренних, начиная от второго и дальше
{$idx == $total? 'проверка на последний элемент, получается если total равен idx тогда он последний и я закрываю два дива':''}
{/if}

Конечно тут накручено, но кое как с помощью получилось мне получить последний элемент в выдаче pdoResources))) Может и косячно, но пока работает)
Алексей Шумаев
21 декабря 2022, 20:48
+3
Инструкция полезная по-любому, хотя бы для расширения кругозора.

Сдаётся мне, что весь сыр-бор с передачей функционала mSearch2 «на сторону» разгорелся вокруг нехватки ресурсов хоста, на котором крутится магазин + не оптимальной настройке сайта. Хотя, я достаточно давно от Modx отошёл, может быть, не совсем верно понял проблему.

У меня на поддержке осталось несколько магазинов, например:
1) 96000 товаров и 12 фильтров
2) 9000 и 55 фильтров (индексы в мускуле для msProductData уже закончились) :-)
modhost на максимальном тарифе, проблем нет, всё и всегда нормально работает, каких-то заметных задержек в фильтрах нет. Все свойства реализованы расширением msProductData.

Я не очень понимаю, чего может не хватать в msSearch2 разработчику, который работает с modx.
Если делаем «серьёзный» магазин и не устраивает msSearch2, то, очевидно, что и modx тут как-то совсем не в тему. Берём туже ларку с эластик. Ну и немного команду разрабов добавляем к себе на зарплату.
Всё имеет свою цену.

К вопросу же «серьёзности»: второй магазин — лидер рынка в «СНГ» в весьма живом сегменте с огромным оборотом. MODX+mSearch2 обеспечивает сайту нормальную работу уже лет 10.
И там за это время столько всего понаделано, аж страшно иногда. Там уже CRM по сути вместо сайта.
И ничего, всё ок.

С другой стороны, сейчас наблюдаю поневоле много сайтов на WP/Bitrix и т.п.
Во где ужас-то в большинстве случаев ) На большинстве таких сайтов я бы никогда ничего не заказал.

Так что на MODX и mSearch2 вполне можно и даже нужно клепать сайты. Только настраивать более-менее и хостинг не совсем бюджетный брать.

Ставить крест на MODX/mSearch2 я бы вообще не стал.
Сейчас, кмк, MODX не хватает продвижения в ru + выпуск 3 версии в момент фактического схлопывания сообщества сильно подгадил.
Алексей Смирнов
21 декабря 2022, 18:45
0
Вы пишите свой сниппет, верно?
И наверняка при выводе одной папки вы знаете кол-во в этой самой папке...?
Просто посчитайте количество и проверьте по условию.
Алексей Смирнов
21 декабря 2022, 18:33
0
По факту вы усложняете тем что хотите ключ один а названия разные — это чревато.
Если у вас свойств примерно 20..30, то лучше создавать опции специально под необходимые параметры. Так и выборки будут быстрее идти и не запутаетесь в опциях одинаковых. И потом поддерживать вам же будет проще.
Если хотите прям принципиально, то лучше уже использовать TV параметры. Там можно с помощью форм переназывать ТВ-шки.
Александр Туниеков
21 декабря 2022, 17:54
+3
Чудесные тут методы пишут :-). Проблема не в том чтобы отфильтровать по какому-то определенному значению. С этим и mysql легко справляется. Вопрос как получить список значений по каким можно фильтровать? И как получить кол-во ресурсов для этих значений? И как получить кол-во ресурсов для этих значений если какое-то значение уже выбрано
Николай Савин
21 декабря 2022, 13:30
0
Откуда взялся MIGX?
Есть же встроенный механизм присвоения категорий опциям.
Используйте его.
Как обойти проблему с вариативностью названий я вам написал.
Артур Шевченко
21 декабря 2022, 13:12
0
Можно его доработать и выбирать тип фильтра по типу опции.
Павел Бигель
21 декабря 2022, 10:12
0
Приходилось ли работать с postgress без прослойки ORM, а напрямую на SQL?
Ну разве что не в PHP проектах.
Синтаксис стопроцентно совпадает с mysql?
Конечно нет :). Если нужен совместимый с MySQL — вам к MariaDB.

Поделитесь пожалуйста, какие преимущества Postgres лично вы можете выделить
В основном они завязаны на вопросе масштабируемости.
В MySQL очень много вещей попросту платные либо нерешаемые относительно постгреса.
Дмитрий
21 декабря 2022, 09:59
0
В категории создано доп поле MIGX prnt.sc/C0ylMEOl15aj там задаю список опций для данной категории, как будет опция назваться и будет ли выводится в фильтре

на frontend я поменял название опций в фильтре, если они выводятся
[[getImageList? &tvname=`filtr_mini` &tpl=`@CODE: [[+option2]]` &where=`{ "option1:=":"{$filter}" }` ]]
Вопрос в том как в админке поменять, чтоб контент менеджер понимал, что заполнять, ведь там выводятся все опции
Дмитрий
21 декабря 2022, 09:50
0
спасибо за ответ. Вариант с SelectFilters оставляю на крайний случай. жаль что не позволяет выбрать фильтра (select, slider)
seosavspb
21 декабря 2022, 09:50
0
Спасибо большое за то что откликнулись. Сейчас попробую накопать что-нибудь по вашим подсказкам. Хорошего дня))
Александр Мельник
21 декабря 2022, 09:03
0
А еще лучше начинать все новые проекты сразу на Postgres. Ваши проекты скажут мне спасибо за совет :)
Поделитесь пожалуйста, какие преимущества Postgres лично вы можете выделить. Не абстрактные, а те с которыми реально столкнулись. Приходилось ли работать с postgress без прослойки ORM, а напрямую на SQL? Синтаксис стопроцентно совпадает с mysql?