Игорь Терентьев

Игорь Терентьев

Был в сети 17 апреля 2025, 16:31
Заказы не принимаю
Примерно так можно (на примере способов оплаты):

{foreach $payments as $payment}
    <label class="payment input-parent">
        <input type="radio" name="payment" value="{$payment.id}" id="payment_{$payment.id}" {$payment.id == $order.payment ? 'checked' : ''}>
        {set $paymentname = 'po_pay_' ~ $payment.name | translit}
        {$paymentname | lexicon}
        {if $payment.description?}
            {set $paymentdescr = 'po_pay_descr_' ~ $payment.description | translit}
            <small>
                {$paymentdescr | lexicon}
            </small>
        {/if}
    </label>
{/foreach}

translit — сниппет транслитерации.
Может кому пригодится:
<?php
$local = $modx->newObject('localizatorContent');
$local->set('key', 'en');
$local->set('resource_id',35);
$local->set('pagetitle','TEST');
$local->set('content','TEST CONTENT');
$local->set('ative',1);
$local->save();
Доступные поля можно посмотреть в БД
Методом тыка все-таки нашел нужное событие:)
Вот такой плагин получился (возможно что-то лишнее):
<?php
$eventName = $modx->event->name;

switch($eventName) {
    //case 'OnWebPageInit':
        //if ($modx->context->get('key') == 'mgr') {return;}
        //$modx->lexicon->load($modx->cultureKey . ':minishop2:default');
        //break;
    case 'OnParseDocument':
        if ($modx->context->get('key') == 'mgr') {return;}
        $lang = $_COOKIE['lang'];
        if(!$lang) return;
        $modx->setOption('cultureKey', $lang);
        $modx->lexicon->load($lang . ':minishop2:default');
        break;
    case 'OnLoadWebDocument':
        if ($modx->context->get('key') == 'mgr') {return;}
        $value = $modx->getOption('cultureKey');
        setcookie("lang", $value, time() + (86400 * 365));
        break;
}

return;
{$_modx->runSnippet('msVendor', [
        'vendor' => $_modx->resource.pagetitle,
        'tpl' => 'tpl.msVendor',
    ])}
tpl.msVendor:
<img src="[[+logo]]" alt="{$_modx->resource.pagetitle}" width="150px">
                        {$_modx->runSnippet('!msProducts', [
                            'parents' => 58,
                            'limit' => 18,
                            'includeThumbs' => 'medium',
                            'tpl' => 'HomeSliderItemTpl',
                            'optionFilters' => '{ "vendor:=":[[+id]] }',
                        ])}
Сниппет msVendor:
<?php
/**
 * @Author: Anton Jukov
 * https://github.com/2ball/modx/tree/master/msVendor
 * https://bezumkin.ru/sections/tips_and_tricks/2918/
 */
if (!empty($scriptProperties['vendor'])) {
    // $vendor = $modx->getObject('msVendor', $scriptProperties['vendor']);
    $vendor = $modx->getObject('msVendor', array('name' => $scriptProperties['vendor']));

    //Check vendor exist
    if (is_object($vendor)) {
        //Get fields data
        $vendor = $vendor->_fields;

        //Get content
        if ($scriptProperties['includeContent'] == 1) {
            if (!empty($vendor['resource'])) {
                $resource = $modx->getObject('modResource', $vendor['resource']);

                if (is_object($resource)) {
                    $vendor['pagetitle'] = $resource->get('pagetitle');
                    $vendor['introtext'] = $resource->get('introtext');
                    $vendor['content'] = $resource->get('content');
                }
            }
        }

        //How to return?
        if ($scriptProperties['returnData'] == 1) {
            if (!empty($scriptProperties['returnOption'])) {
                return $vendor[$scriptProperties['returnOption']];
            }
            else {
                return $vendor;
            }
        }
        else {
            $output = $modx->getChunk($scriptProperties['tpl'], $vendor);
            return $output;
        }
    }
    else {
        return false;
    }
}
else {
    return false;
}
У меня получилось решить данную проблему.
Во первых нужно удалить ранее зарегистрированные сервисы:
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->removeService('delivery', 'MskDelivery');
}
Создаем файл в core/components/minishop2/custom/delivery/msdeliverycourierhandler.class.php
<?php
if (!class_exists('msDeliveryHandler')) {
	require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msdeliveryhandler.class.php';
}

class msDeliveryCourierHandler extends msDeliveryHandler implements msDeliveryInterface {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0.0) {

        $freedeliverysumm = 90;
        $cart = $order->ms2->cart->status();
        $cart_cost = $cart['total_cost'];

        if($cart_cost > $freedeliverysumm){
            return $cost;
        }else{
            $delivery_cost = parent::getCost($order, $delivery, $cost);
            return $delivery_cost;
        }
    }
}
Регистрируем:
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addService('delivery', 'msDeliveryCourierHandler',
        '{core_path}components/minishop2/custom/delivery/msdeliverycourierhandler.class.php'
    );
}