Владимир

Владимир

Был в сети 30 апреля 2025, 08:19
Заказы не принимаю
Василий Наумкин
Василий Наумкин
Возможность такая есть, хоть и не совсем очевидная:
{if !$snippet = $_modx->cacheManager->get('cache_key')}
    {set $snippet = $_modx->runSnippet('pdoResources', [
        'parents' => 0,
        'tpl' => '@INLINE {$id} - {$pagetitle}',
        'showLog' => 1,
    ])}
    {set $null = $_modx->cacheManager->set('cache_key', $snippet, 1800)}
{/if}

{$snippet}
С одной стороны — нужно самому управлять кэшем, а с другой стороны — можно произвольно задавать параметры кэширования: ключ, время кэширования (в примере полчаса) и т.д.
Посмотреть этот кэш можно в /core/cache/default/.

set $null
при выставлении кэша нужно, чтобы не выводилась 1 при успешной работе $_modx->cacheManager->set.
Василий Наумкин
Василий Наумкин
Василий Наумкин
Василий Наумкин
Вот, придумал плагин с фиксом на событие OnDocFormPrerender, который не меняет код ни Ace, ни CB:
<?php
$modx->controller->addHtml("<script>
    var config = ace.require('ace/config');
    var acePath = MODx.config['assets_url'] + 'components/ace/ace';
    config.set('basePath', acePath);
</script>");
Теперь, насколько я вижу, всё работает.
Василий Наумкин
Василий Наумкин
Василий Наумкин
Василий Наумкин
Максим Кузнецов
Максим Кузнецов
Получилось.) Вот рабочий код:

[[!mFilter2? &limit=`25` &loadModels=`voteforms` &paginator=`pdoPage` &class=`msProduct` &element=`msProducts` &depth=`0` &sort=`price:asc, rating:desc`
	&where=`{"class_key":"msProduct"}`
	&leftJoin=`{
		"VoteFormThread": {
			"class": "VoteFormThread",
			"on": "msProduct.id = VoteFormThread.resource AND VoteFormThread.form = 1"
		}
	}`
	&select=`{"Data": "*",  "VoteFormThread": "VoteFormThread.rating AS rating, VoteFormThread.users_count AS totalVoted"}`
	&tpls=`item.list.table`
]]
— рейтинг в чанке выводится плейсхолдером [[+rating]].
Максим Кузнецов
Максим Кузнецов
Необходимо создать кастомный класс доставки:

1) Идем в core/components/minishop2/custom/delivery/ и создаем здесь свой пхп файл (допустим, mscustomdeliveryhandler.class.php) со следующим содержимым:

<?php

//Важно: при изменении названия файла, вот в этом месте также нужно изменить класс
class mscustomdeliveryhandler extends msDeliveryHandler{

	public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $cart = $this->ms2->cart->status();
        
	//условие начисление доставки
        if ($cart['total_cost'] < 5000) {
            $add_price = $delivery->get('price');
            if (preg_match('/%$/', $add_price)) {
                $add_price = str_replace('%', '', $add_price);
                $add_price = $cost / 100 * $add_price;
            }
            $cost += $add_price;
        }
        
        return $cost;
    }

}

2) Идем в настройки магазина -> Варианты доставки.
Создаем новый вариант «Доставка» (или редактируем исходный), после чего заполняем в «дополнительную стоимость» требуемое значение (300 рублей), в Класс-обработчик пишем название созданного файла — mscustomdeliveryhandler, заполняем доступные способы оплаты и ставим галочку напротив «включен».