but1head

but1head

Был в сети 04 ноября 2021, 20:02
Заказы принимаю
что сверху не читал, как делал я:
у товара цены в $

файл для получения валют и запись значений в опции контекста (сажать на крон):
<?php
define('MODX_API_MODE', true);
require 'www/index.php';
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

$currency = array(
	'rub' => convertCurrency(1, 'USD', 'RUB'),
	'thb' => convertCurrency(1, 'USD', 'THB'),
);

foreach($currency as $key => $value) {
	$tmp = $modx->getObject('modContextSetting', array('context_key' => 'web', 'key' => $key));
	$tmp->set('value', $value);
	$tmp->save();
}

function convertCurrency($amount, $from, $to){
    $url  = "https://www.google.com/finance/converter?a=$amount&from=$from&to=$to";
    $data = file_get_contents($url);
    preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
    $converted = preg_replace("/[^0-9.]/", "", $converted[1]);
    return round($converted, 3);
}

Плагин на msOnGetProductPrice
switch($modx->event->name) {
    case 'msOnGetProductPrice':
        $values = & $modx->event->returnedValues;
        
        if($_REQUEST['currency'] == 'THB') {
            $values['price'] = round($price * $modx->getOption('thb'));
        } else if($_REQUEST['currency'] == 'RUB') {
            $values['price'] = round($price * $modx->getOption('rub'));
        } else {
            $values['price'] = $price;
        }
        
        break;
}
Смена валюты нужна была только при ручном выборе этой валюты, можно хранить в кэше выбранную.

p.s. в моем примере в каждый товар заводить доп.поле не вижу смысла, ибо выводится 5-9 карточек товара.
В вашем случае надо:
2 «контекста», ru и en. localizator_default_language = ru. У ресурса заполняется ru, нажимаете авто-перевод — получаете en. Смотрите в лог ошибок, там все должно быть написано. Возможно ключ заблокирован (не дает больше 1кк переводить в сутки). Если уж совсем все плохо контакты в профиле.
1.0.3-pl
вывел из беты, у меня на 10 магазинах проблем не возникло, тестовые сайты на modhost тоже проблем не вызвали. Добавил грид истории транзакий (сколько кто потратил и получил), + грид счетов пользователй (можно подкинуть бонусов с админки).

как вариант ставить куку lang=en, писать плагин на onhandlerequest где переключать язык на язык из куки. пока что локализатор под msearch2 не подстраивал.

логика такая, только тут еще запрос именно msearch2 бы выловить.
<?php
if($modx->event->name != 'OnHandleRequest') return;
$lang = $_COOKIE['lang'];
if(!$lang) return;
$modx->setOption('cultureKey', $lang);