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

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

Был в сети 17 апреля 2025, 16:31
Заказы не принимаю
Для такой конфигурации (el)site.com/ и site.com/en/ я так сделал:
<base href="
{if $_modx->config.cultureKey != 'el'}
	{$site_url = $_modx->config.site_url ~ $_modx->config.cultureKey ~ '/'}
{else}
	{$site_url = $_modx->config.site_url}
{/if}
">
Тебе скорее всего подойдет такой вариант:
{$site_url = $_modx->config.site_url ~ $_modx->config.cultureKey ~ '/'}
Ниже уже можешь использовать переменную $site_url
В итоге расширил класс:
<?php
class myOrderHandler extends msOrderHandler {
    public function validate($key, $value) {
        switch ($key) {
            case 'receiver':
                // убираем регулярку и просто проверяем чтобы поле не было пустым
                if (empty($value)) {
                    $value = false;
                }
            break;
            // Конечно, также можно переопределить и другие валидаторы
    
            // Если прислано поле, которого тут нет - отправляем в дефолтный класс
            default:
                return parent::validate($key, $value);
        }
        if ($value === false) {
            $value = '';
        }
    
        return $value;
    }
}
В итоге записывал старую цену в опции.
На странице товара:
<input type="hidden" name="options[old_price]" value="{$old_price | calcPrice}">
В корзине:
<div class="cpi__price-final"> <span class="price">{$product.price} {$.cookie['currency']}</span> </div>
{if $product.options[old_price]?}
    <div class="cgray"> <s> <span class="price">{$product.options[old_price]} {$.cookie['currency']}</span> </s> </div>
{/if}
Я вот так сделал. Костыль, но работает:

<base href="{if $_modx->config.cultureKey == 'el'}{$site_url = $_modx->config.site_url}{else}{$site_url = $_modx->config.site_url ~ $_modx->config.cultureKey ~ '/'}{/if}">
el заменить на cultureKey основного языка.

И уже ниже можно использовать {$site_url} для правильной ссылки на главную.
Нужно было через runProcessor делать:
$response = $modx->runProcessor('resource/create', array(
    'pagetitle' => $pagetitle
    ,'class_key' => 'msProduct'
    ,'uri' => $url
    ,'show_in_tree' => 0
    ,'uri_override' => 1
    ,'published' => 1
    ,'source' => 3
    ,'createdon' => time()
    ,'template' => 4
    ,'parent' => $parent
    ,'price' => $cur_price
    ,'old_price' => $old_price
    ,'article' => $article
    ,'tags' => $tags
    ,'color' => $color
    ,'size' => $size
    ,'options-width' => $width
    ,'options-shank' => $shank
    ,'introtext' => $introtext
    ,'content' => $content
    ,'tv21' => $keywords
));

$id = $response->response['object']['id']; //id товара

if($id){
    // добавляем картинки в галерею
    $response = $modx->runProcessor('gallery/upload', $data, [
        'processors_path' => MODX_CORE_PATH . 'components/minishop2/processors/mgr/',
    ]);

    if ($response->isError()) {
      print_r($response->getResponse());
    }
}
Спасибо! Этот плагин ведь не работает, если языковые версии сделаны через папки (site.ru/en/)?

Попытался сделать с учетом папок, но тоже не хочет работать…:
<?php
$eventName = $modx->event->name;

switch($eventName) {
    case 'msOnBeforeAddToCart':
    case 'msOnBeforeRemoveFromCart':
    case 'msOnBeforeChangeInCart':
    case 'msOnSubmitOrder':
        $http_host = $_SERVER['HTTP_HOST'];
        $uri = $_SERVER['REQUEST_URI'];
        if(substr($uri, 0, 1)) {
            $uri = mb_substr($uri, 1);
            $tmp = explode('/', $uri);
            if($path = $tmp[0]) {
                $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%/{$path}/"));
                if($tmp == '') {
                    $tmp = $modx->getObject('localizatorLanguage', array('http_host:LIKE' => "%{$http_host}"));
                }
            }
        }
        $lang = $tmp->key;
        $modx->setOption('cultureKey', $lang);
        $modx->lexicon->load($lang . ':minishop2:cart');
        break;
}

return;
Подскажи еще пожалуйста. Правильно запускаю процессор?
<?php
$resources = $modx->getIterator('modResource', array('class_key'=>'msProduct'));
foreach($resources as $resource) {
    print $resource->pagetitle;
    $processorProps = array(
        'resource_id' => $resource->id
    );
    $otherProps = array(
        'processors_path' => $modx->getOption('core_path') . 'components/localizator/processors/'
    );
    $response = $modx->runProcessor('mgr/content/translate', $processorProps, $otherProps);
    return $response->response;
}
На выходе получаю просто `Array`