FacetSearch - быстрый фасетный поиск с сервисом facetsearch.ru

У MODX есть один компонент фасетного поиска – mFilter2. Но на больших каталогах (от 10 000 товаров) mFilter2 работает очень медленно. Загрузка страницы и фильтрация могут занимать 6–10 секунд, даже с кэшем. Современные поисковые системы используют специальные базы данных – ElasticSearch, Sphinx и другие. На сервисе FacetSearch.ru развернут OpenSearch (fork ElasticSearch). Компонент FacetSeach для MODX загружает данные в базу OpenSearch и выводит на сайты с MODX форму фасетного поиска, фильтрующую товары и ресурсы с помощью запросов в сервис.



FacetSearch фильтрует большые каталоги за 0,6-0,9 секунды.
Александр Туниеков
07 декабря 2022, 09:08
modx.pro
3
2 072
+10

Ручная сортировка строчек товаров в msCategory не работает

MODX Revolution 2.8.3-pl (traditional)
miniShop2 2.5.0-pl

Столкнулся с тем, что список товаров в категории после нажатия на заголовок столбца для сортировки по цене или названию перестает реагировать на ручной drug and drop, товар тащится, но не остается там, где я его ставлю в списке.

Как победить эту неведомую хрень? Может у кого было подобное.

Заказчику удобно перетаскивать вручную, но при этом если случайно нажать заголовок столбца, надо откатывать базу, чтобы восстановить работоспособность админки
Sergey
07 декабря 2022, 06:27
modx.pro
509
0

На сайте com-stil.com нужно обнаружить и удалить вирус....

Внимание, тревога!

На вашем сайте обнаружены подозрительные файлы.

Сайт s1924
  — www/server/php/files/2b.jpg заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…
  — www/server/php/files/2b (1).jpg заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…
  — www/server/php/files/2b.inc заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…
  — www/server/php/files/2b.phar заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…
  — www/server/php/files/2b.cfm заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…
  — www/server/php/files/2b.jsp заражен ...9:CDEFGHIJSTUVWXYZcdefghijs…

На сайте com-stil.com нужно обнаружить и удалить вирус…
alex
06 декабря 2022, 18:25
modx.pro
483
0

Плагин на событие mSyncOnProductOffers

2 1
Добрый день!
Помогите написать не большой плагин на событие mSyncOnProductOffers.
Что бы при выгрузке из 1с обновлялось поле у товара, созданное через msFieldsManager (поле называется remain).

Установлен компонент для учета остатков msProductRemains (он работает по такому-же событию и обновляет свои остатки)

case 'mSyncOnProductOffers':
		$xml = $modx->getOption('xml', $scriptProperties);
		$field = $modx->getOption('mspr_msync_field', $scriptProperties, 'Количество');
		if ( !is_object($xml) || !isset($xml->$field) ) break;
		$product = $modx->getOption('resource', $scriptProperties);
		$msProductRemains->saveRemains(array_merge($product->get('options')?:array(), array(
			'product_id' => $product->get('id')
			,'count' => (float) $xml->$field
			,'set' => true
		)));
		break;
Нужно что бы при обновлении товара, добавлялось количество в поле remain, сейчас это работает на сохранение товара.

Есть плагин, которые работает при сохранении товара.
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        if ($resource->get('class_key') == 'msProduct') {
                $modx->addPackage('msproductremains', $modx->getOption('msproductremains.core_path',null,$modx->getOption('core_path').'components/msproductremains/').'model/');
                $stock = 0;
                $sql = "SELECT remains FROM {$modx->getTableName('msprRemains')} WHERE product_id = ".$id;
                $query = $modx->prepare($sql);
                $query->execute(array(0));
                $remains = $query->fetchAll(PDO::FETCH_ASSOC);
                foreach ($remains as $remain) {
                    $stock += $remain['remains'];
                }
             // $resource->setTVValue('stock', $stock);
                $resource->set('remain', $stock);
                $resource->save();
            }
        break;
}
Сергей
06 декабря 2022, 14:28
modx.pro
438
0

Плагин на событие mSyncOnProductOffers

Добрый день!
Помогите написать не большой плагин на событие mSyncOnProductOffers.
Что бы при выгрузке из 1с обновлялось поле у товара, созданное через msFieldsManager (поле называется remain).

Установлен компонент для учета остатков msProductRemains (он работает по такому-же событию и обновляет свои остатки)

case 'mSyncOnProductOffers':
		$xml = $modx->getOption('xml', $scriptProperties);
		$field = $modx->getOption('mspr_msync_field', $scriptProperties, 'Количество');
		if ( !is_object($xml) || !isset($xml->$field) ) break;
		$product = $modx->getOption('resource', $scriptProperties);
		$msProductRemains->saveRemains(array_merge($product->get('options')?:array(), array(
			'product_id' => $product->get('id')
			,'count' => (float) $xml->$field
			,'set' => true
		)));
		break;
Нужно что бы при обновлении товара, добавлялось количество в поле remain, сейчас это работает на сохранение товара.

Есть плагин, которые работает при сохранении товара.
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        if ($resource->get('class_key') == 'msProduct') {
                $modx->addPackage('msproductremains', $modx->getOption('msproductremains.core_path',null,$modx->getOption('core_path').'components/msproductremains/').'model/');
                $stock = 0;
                $sql = "SELECT remains FROM {$modx->getTableName('msprRemains')} WHERE product_id = ".$id;
                $query = $modx->prepare($sql);
                $query->execute(array(0));
                $remains = $query->fetchAll(PDO::FETCH_ASSOC);
                foreach ($remains as $remain) {
                    $stock += $remain['remains'];
                }
             // $resource->setTVValue('stock', $stock);
                $resource->set('remain', $stock);
                $resource->save();
            }
        break;
}
Сергей
06 декабря 2022, 13:54
modx.pro
605
0

Кто-нибудь пробовал писать кеширование для mFilter2?

Этот сниппет нужно вызывать некешированным.
Но это потому что стандартный механизм кеша в MODX кеширует слишком… топорно.

Что, если написать свое кеширование, которое будет зависеть от get-параметров? В него будет включена пагинация и примененные фильтры.

Кто-нибудь пробовал? Какие тут подводные камни?

Не хочется потратить несколько часов, а то и дней. И понять, что идея «так себе».
Andry
06 декабря 2022, 00:58
modx.pro
500
0

msfilter2 и скрытие отключенных (disabled) чекбоксов

Добрый всем день.
Есть ли возможность в фильтре скрывать чекбоксы, которые переходят в состояние disabled, после начала фильтрации (изображение 1)?

Попытался скрыть через CSS просто по классу, но вместо отключенных чекбоксов остается пустое место, сдвига выборов не происходит (изображение 2).
Валерий
06 декабря 2022, 00:32
modx.pro
547
0

Возможно ли в сниппете, вызванном из чанка tpl, получить переменные товара, которые устанавливаются при вызове msProducts?

Я вызываю msProducts. В аргументе tpl я указываю чанк. В этом чанке я вызываю сниппет. Как мне в сниппете получить значения, которые msProducts отправил в чанк? Я имею в виду значения конкретного товара (значения опций, pagetitle, longtitle и т.д.).

Их нужно в сниппет самому передавать? Но ведь значений очень много может быть. А еще опции, которые зависят от родителя товара. Просто так все это не передать в сниппет. Тут будут сложности и overhead.

Может, все же есть способы получить данные от msProducts в сниппете, который вызывали в чанке tpl, не передавая их в сниппет явно? Может, в каком-то массиве внутри $modx они содержатся? Или у $modx есть функция для их получения?
Andry
06 декабря 2022, 00:04
modx.pro
484
0

Стоимость доставки, зависящая от суммы заказа и времени доставки

1
Добрый день

Нужно сделать чтобы сумма доставки зависела от выбранного пользователем интервала доставки, а также от общей суммы заказа

Кто возьмется, распишу подробнее
Андрей
05 декабря 2022, 21:58
modx.pro
413
0

Поле из адреса в классе расчета достаки

Добрый день.
пытаюсь сделать расчет стоимости доставки, в зависимости от времени, выбранного пользователем. Для этого добавил поле — Удобное время доставки, в нем интервалы. У каждого интервала своя стоимость плюсом.
Скажите, как данные из этого поля передать в скрипт своего класса расчета стоимости доставки?

Сам расчет стандартный

class msDeliveryCourierHandler extends msDeliveryHandler implements msDeliveryInterface {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $freedeliverysumm = 1299;
        $delivery_time = 28; // Значение интервала
        $cart = $order->ms2->cart->status();
        $zakaz = $order->get();
        $cart_cost = $cart['total_cost'];
        if($cart_cost > $freedeliverysumm){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}
Андрей
05 декабря 2022, 10:37
modx.pro
495
0