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

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

С нами с 29 ноября 2013; Место в рейтинге пользователей: #83
Игорь Терентьев
16 октября 2017, 10:39
+2
Для такой конфигурации (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
Игорь Терентьев
22 сентября 2017, 12:17
0
Не, это не то. Сниппетом необходимый порядок не задашь…
Игорь Терентьев
07 сентября 2017, 21:35
+1
В итоге расширил класс:
<?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;
    }
}
Игорь Терентьев
06 сентября 2017, 21:04
1
0
Вот так вроде тоже должно работать:

<img class="pull-left" src="{("upload/" ~ $tvimage) | phpthumbon : 'w=280&h=210&zc=0&f=jpg&q=80'}" alt="{$pagetitle}">
Игорь Терентьев
06 сентября 2017, 10:22
0
Отмечено как обязательное для заполнения, но MiniShop видит его как пустое, если введены греческие буквы.
Игорь Терентьев
30 августа 2017, 21:10
0
Похоже только в js-файле можно изменить опцию more_tpl.
assets/components/msearch2/js/web/default.js
Игорь Терентьев
15 августа 2017, 12:44
0
Это где-то в шаблоне у тебя js "{clearInterval(interval" поставь пробелы после фигурных скобок или оберни в тег {ignore}{/ignore}
Или используй:
[[+idx:mod=`4`:eq=`0`:then=`</div><div class="gallery-item">`]]
Игорь Терентьев
14 августа 2017, 21:54
0
Вот так правильно
{($idx % 4) ? '' : '</div><div class="gallery-item">'}
Игорь Терентьев
14 августа 2017, 21:41
0
В конце чанка с изображением:
{($idx % 3) ? '</div><div class="gallery-item">' : ''}
Игорь Терентьев
13 августа 2017, 18:54
0
В итоге записывал старую цену в опции.
На странице товара:
<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}
Игорь Терентьев
13 августа 2017, 16:01
0
Я вот так сделал. Костыль, но работает:

<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} для правильной ссылки на главную.
Игорь Терентьев
03 августа 2017, 17:32
0
Нужно было через 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());
    }
}
Игорь Терентьев
01 августа 2017, 16:08
0
Спасибо! Этот плагин ведь не работает, если языковые версии сделаны через папки (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;
Игорь Терентьев
21 июля 2017, 23:07
0
Подскажи еще пожалуйста. Правильно запускаю процессор?
<?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`
Игорь Терентьев
20 июля 2017, 01:33
0
Наверное можно приджойнить.
Если как в топике сделать leftJoin, не работает?
У меня просто не было категорий в фильтре…