Евгений Ц.

Евгений Ц.

Был в сети 26 мая 2024, 16:25
Заказы не принимаю
Так как url более не доступен, то приведу код Руслана с небольшим дополнением: товары, добавленные в корзину до входа, добавляются в сохранённую корзину.
switch ($modx->event->name) {
    case 'msOnAddToCart':
    case 'msOnChangeInCart':
    case 'msOnEmptyCart':
    case 'msOnRemoveFromCart':
        if ($user = $modx->getAuthenticatedUser('web') and $ms2 = $modx->getService('minishop2')) {
            $ms2->initialize($modx->context->key);
            $profile = $user->getOne('Profile');
            $extended = $profile->get('extended');
            $extended['ms2cart'] = $ms2->cart->get();
            $profile->set('extended', $extended);
            $profile->save();
        }
        break;
        
    case 'OnWebPageInit':
    case 'OnWebLogin':
        if ( $user = $modx->getAuthenticatedUser('web') and  $ms2 = $modx->getService('minishop2')) {
            $ms2->initialize($modx->context->key);
            $profile = $user->getOne('Profile');
            $extended = $profile->get('extended');
            if ( isset($extended['ms2cart']) && !empty($extended['ms2cart']) ) {
                $mycart = array_merge($extended['ms2cart'], $ms2->cart->get());
                $ms2->cart->set($mycart);
            }
        }
        break;
}
Костыльный, но всё же вариант — писать рейтинг в TV и потом по этому TV фильтровать. Создаем TV, например product_rating и в файл assets/components/simplerating/action.php после
$simpleRating->save();
вставляем
$res = $modx->getObject('modResource',$id);
$res->setTVValue('product_rating',$ratingNewValue);
Правда при таком варианте в случае обновления компонента код надо будет вставлять заново.
Я сделал через TV, плагин на событие msOnCreateOrder
<?php
$products = $msOrder->getMany('Products');
foreach ($products as $item) {
    $product = $item->getOne('Product');
    $product_id = $product->id;
    $product_qty = $item->count;
    $res = $modx->getObject('modResource',$product_id);
    $count = $res->getTVValue('ProductSalesQty');
    $count = $count + $product_qty;
    $res->setTVValue('ProductSalesQty', $count);
}