Цена в рублях по курсу доллара в miniShop2
Как выводить в miniShop2 сумму товара в рублях, если цена указана в долларах? Есть плагин парсера курса валют.
Найдено на просторах интернета, изменено под свои нужды
Плагин cbr:
Сниппет cbrDollar
Сниппет cbrEuro (про запас)
Вызовы:
Как использовать полученный курс для конвертирования цены товара в рубли?
Найдено на просторах интернета, изменено под свои нужды
Плагин cbr:
<?php
/*
** Получение курса валют с СБ
*/
$e = &$modx->Event;
if ($e->name == 'OnParseDocument' &&
!isset($GLOBALS['currentUSDrate'])) {
$cburl='http://www.cbr.ru/scripts/'.'XML_daily.asp?date_req=';
$cbfile = "assets/cache/cbr.php";
$nocbFile=false;
if (file_exists($cbfile))
include_once ($cbfile);
else
$nocbFile=true;
if ($nocbFile OR
date("d/m/Y",$currentFileDate)!=date("d/m/Y")) {
$currentFileDate=time();
$data = file_get_contents ($cburl.date("d/m/Y", $currentFileDate));
$xml = new SimpleXMLElement($data);
foreach ($xml->Valute as $Valute) {
if ((integer)$Valute->NumCode==840)
$currentUSD=floatval(str_replace(",",".",(string)$Valute->Value));
if ((integer)$Valute->NumCode==978)
$currentEURO=floatval(str_replace(",",".",(string)$Valute->Value));
}
$fileContent='<?php
$currentFileDate='.$currentFileDate.';
$currentUSD='.number_format($currentUSD,2,'.','').';
$currentEURO='.number_format($currentEURO,2,'.','').';
?>';
file_put_contents ($cbfile, $fileContent);
}
$GLOBALS['currentUSDrate']=$currentUSD;
$GLOBALS['currentEUROrate']=$currentEURO;
$modx->setPlaceholder('USD',number_format($GLOBALS['currentUSDrate'], 2, '.', ''));
$modx->setPlaceholder('EURO',number_format($GLOBALS['currentEUROrate'], 2, '.', ''));
}
?>
Сниппет cbrDollar
<?php
return (number_format($GLOBALS['currentUSDrate'],2,'.',''));
Сниппет cbrEuro (про запас)
<?php
return (number_format($GLOBALS['currentEUROrate'],2,'.',''));
Вызовы:
$[[!cbrDollar?]]
€[[!cbrEuro?]]
Как использовать полученный курс для конвертирования цены товара в рубли?
Комментарии: 57
1. Создаете сниппет, в котором получаете курс валют на сегодня и сохраняете его в системные настройки MODx.
2. Этот сниппет вызываете по crontab раз в сутки, ведь курс меняется раз в сутки
3. Выводите цену с учетом этого курса. В miniShop2 есть специальная настройка в параметрах, позволяющая указать свой сниппет для обработки товара (точно не помню, но она есть, посмотрите). В этом сниппете цену и считаете с учетом курса.
2. Этот сниппет вызываете по crontab раз в сутки, ведь курс меняется раз в сутки
3. Выводите цену с учетом этого курса. В miniShop2 есть специальная настройка в параметрах, позволяющая указать свой сниппет для обработки товара (точно не помню, но она есть, посмотрите). В этом сниппете цену и считаете с учетом курса.
У меня получение курсов идёт в плагине. В сниппет получаю готовые данные. Зачем лишние действия, если «до тех пор, пока не изменится дата, информация будет браться из кэша, а обращение к сайту ЦБ и разбор повторно выполняться не будут»
Системная настройка правильно сделана?
Где бы найти
Системная настройка правильно сделана?
Где бы найти
настройка в параметрах, позволяющая указать свой сниппет для обработки товара
Ох…
1. Система-Настройки системы: ключ ms2_price_snippet, указываем значение modifyPrice
2. Делаем сниппет modifyPrice:
ну у меня тут несколько другая ситуация, цены на товары вбиты в поля price — в евро, в old_price — в долларах.
4. Создаем сниппет updateRates:
5. Создаем файл components/cbrf/ExchangeRatesCBRF.class.php:
rate_euro
rate_usd
7. Открываем первый раз ресурс с шага 3 и проверяем, что он сработал и в настройках курсы обновились.
Это мое решение с одного из сайтов, успешно работающее.
1. Система-Настройки системы: ключ ms2_price_snippet, указываем значение modifyPrice
2. Делаем сниппет modifyPrice:
ну у меня тут несколько другая ситуация, цены на товары вбиты в поля price — в евро, в old_price — в долларах.
<?php
$priceEURO = $product->get('price');
$priceUSD = $product->get('old_price');
$rateEURO = $modx->getOption('rate_euro');
$rateUSD = $modx->getOption('rate_usd');
if($priceEURO > 0){
return $priceEURO * $rateEURO;
}
if($priceUSD > 0){
return $priceUSD * $rateUSD;
}
return 0;
3. Создаем ресурс, публикуем его, скрываем из меню, добавляем ему в контент: [[!updateRates]]
и этот ресурс на хостинге вешаем по его url на кронтаб раз в сутки.4. Создаем сниппет updateRates:
require_once($modx->getOption('assets_path').'components/cbrf/ExchangeRatesCBRF.class.php');
$rates = new ExchangeRatesCBRF();
$usd = $rates->GetRate("USD");
$euro = $rates->GetRate("EUR");
$setting = $modx->getObject('modSystemSetting', 'rate_euro');
$setting->set('value', $euro);
$setting->save();
$setting = $modx->getObject('modSystemSetting', 'rate_usd');
$setting->set('value', $usd);
$setting->save();
// обновляем колонку price_rur
$sql1 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$euro)." * `price` WHERE `price` > 0";
$sql2 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$usd)." * `old_price` WHERE `old_price` > 0";
$q = $modx->prepare($sql1);
$q->execute();
$q = $modx->prepare($sql2);
$q->execute();
//$cacheRefreshOptions = array( 'system_settings' => array() );
//$modx->cacheManager->refresh($cacheRefreshOptions);
$modx->cacheManager->refresh();
echo 'Курс USD: '.$usd;
echo '<br />';
echo 'Курс EURO: '.$euro;
Я в этом сниппете еще кеш чищу в конце всего сайта, мне так нужно.5. Создаем файл components/cbrf/ExchangeRatesCBRF.class.php:
<?php
class ExchangeRatesCBRF
{
var $rates;
function __construct($date = null)
//В PHP версии ниже 5 это метод объекта следует переименовать в ExchangeRatesCBRF
{
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
if (!isset($date)) $date = date("Y-m-d");
$curs = $client->GetCursOnDate(array("On_date" => $date));
$this->rates = new SimpleXMLElement($curs->GetCursOnDateResult->any);
}
function GetRate ($code)
{
//Этот метод получает в качестве параметра цифровой или буквенный код валюты и возвращает ее курс
$code1 = (int)$code;
if ($code1!=0)
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/Vcode[.='.$code.']/parent::*');
}
else
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/VchCode[.="'.$code.'"]/parent::*');
}
if (!$result)
{
return false;
}
else
{
$vc = (float)$result[0]->Vcurs;
$vn = (int)$result[0]->Vnom;
return ($vc/$vn);
}
}
}
6. Создаем 2 системные настройки:rate_euro
rate_usd
7. Открываем первый раз ресурс с шага 3 и проверяем, что он сработал и в настройках курсы обновились.
Это мое решение с одного из сайтов, успешно работающее.
А, ну и еще у меня у товара добавлена колонка
price_rur, в ней я храню цену товара в рублях,
вот этот код из сниппета updateRates пересчитывает эту цену:
price_rur, в ней я храню цену товара в рублях,
вот этот код из сниппета updateRates пересчитывает эту цену:
// обновляем колонку price_rur
$sql1 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$euro)." * `price` WHERE `price` > 0";
$sql2 = "UPDATE ".$modx->getTableName('msProductData')." SET `price_rur` = ".str_replace(',','.',$usd)." * `old_price` WHERE `old_price` > 0";
$q = $modx->prepare($sql1);
$q->execute();
$q = $modx->prepare($sql2);
$q->execute();
Благодарю за такой объёмный ответ, посмотрю обязательно ваше решение
А не подскажите как решить такую проблему:
У заказчика часть товаров с ценами только в рублях а часть только в евро (которые на сайте должны отображаться в рублях).
Конвертацию из евро в рубли, как здесь описано, я сделал и все отлично работает.
У заказчика часть товаров с ценами только в рублях а часть только в евро (которые на сайте должны отображаться в рублях).
Конвертацию из евро в рубли, как здесь описано, я сделал и все отлично работает.
Помогите пожалуйста понять где допустил ошибку. Нужно, чтобы в таблицу сохранялся результат с округлением. Но почему-то он не хочет (
$sql1 = «UPDATE ».$modx->getTableName('msProductData')." SET `price` = ".round(`price_usd`* $usd,0)." WHERE `price_usd` > 0"
$sql1 = «UPDATE ».$modx->getTableName('msProductData')." SET `price` = ".round(`price_usd`* $usd,0)." WHERE `price_usd` > 0"
Добрый день! А как вызвать сниппет по crontab?
1. Система-Настройки системы: ключ ms2_price_snippet, указываем значение modifyPriceТо ли лыжи не едут, то ли я…
Не могу я найти это ключ. Версия miniShop2 2 2.1.6pl3
Не знаю…
в гитхабе в исходниках он есть: github.com/bezumkin/miniShop2/search?q=ms2_price_snippet&ref=cmdform
в гитхабе в исходниках он есть: github.com/bezumkin/miniShop2/search?q=ms2_price_snippet&ref=cmdform
Судя по этому комментарию, модификатор цены был убран…
Хм… у меня возможно старая версия минишоп.
Тогда я бы сделал так:
Через этот механизм bezumkin.ru/modx/minishop2/classes/910/ добавил колонку к товару price_rur.
И раз в день пересчитывал бы ее. Т.е. фактически оставил бы пункты 3,4,5 и из 4 убрал бы сохранение в настройки курса.
Т.е. у нас 2 поля для цены у товара. Одна для USD, заполняется менеджером, другая для RUR, пересчитывается полностью автоматически.
Тогда я бы сделал так:
Через этот механизм bezumkin.ru/modx/minishop2/classes/910/ добавил колонку к товару price_rur.
И раз в день пересчитывал бы ее. Т.е. фактически оставил бы пункты 3,4,5 и из 4 убрал бы сохранение в настройки курса.
Т.е. у нас 2 поля для цены у товара. Одна для USD, заполняется менеджером, другая для RUR, пересчитывается полностью автоматически.
Алексей, спасибо за участие. Для меня это пока в процессе изучения, так что буду ковырять и разбираться.
Лишние поля не нужны, нужно обычное переопределение цены, типа примитивного вычисления
Лишние поля не нужны, нужно обычное переопределение цены, типа примитивного вычисления
$price = $price*$cbrDollar;
делаешь сниппет содержания такого как выше привел, и во всех шаблонах вместо [[+price]] выводишь [[!price-ru? &price='[[+price]]']]. Камни подводные могут быть, но вроде работает.
Я понимаю, что задолбал вопросами, прошу простить мои слабые, пока что, знания ModX.
Я получил с помощью сниппета updateRates и класса ExchangeRatesCBRF.class.php курсы валют. Также они есть в системе и отображаются. В ресурсе, где вызывается [[!updateRates]] также показываются курсы доллара и евро.
Вот после этого возникли вопросы:
Я правильно понял, что в этом случае мне не нужна работа с базой и не храню там никаких цен?
Нужен ли сниппет modifyPrice «с математикой» и откуда берётся [[!price-ru]]
Что я забыл или сделал не так?
Я получил с помощью сниппета updateRates и класса ExchangeRatesCBRF.class.php курсы валют. Также они есть в системе и отображаются. В ресурсе, где вызывается [[!updateRates]] также показываются курсы доллара и евро.
выводишь [[!price-ru? &price='[[+price]]']]Ничего не вывело
Вот после этого возникли вопросы:
Я правильно понял, что в этом случае мне не нужна работа с базой и не храню там никаких цен?
Нужен ли сниппет modifyPrice «с математикой» и откуда берётся [[!price-ru]]
Что я забыл или сделал не так?
Тут лучше сделать так (опишу логику, думаю разберешся).
1. В конце сниппета [[!updateRates]] задать системную настройку, например kurs (как я не помню, гугли)
2. Сниппет с курсом вызывать раз в день (по крону например, или еще как-то), он будет обновлять настройку.
3. В сниппете [[!price-ru? &price='[[+price]]']] получить настройку и умножить.
1. В конце сниппета [[!updateRates]] задать системную настройку, например kurs (как я не помню, гугли)
2. Сниппет с курсом вызывать раз в день (по крону например, или еще как-то), он будет обновлять настройку.
3. В сниппете [[!price-ru? &price='[[+price]]']] получить настройку и умножить.
$kurs = $modx->getConfig('kurs');
return $price * $kurs;
Ну а осталное как писал — просто вызываешь вместо [[+price]].В конце сниппета [[!updateRates]] задать системную настройку, например kursЕсли я правильно понял, то системная настройка установлена:
$setting = $modx->getObject('modSystemSetting', 'rate_usd');
$setting->set('value', $usd);
$setting->save();
Или это не оно?
Очень похоже что именно оно.
Немного потерялся.
Ранее я добавил системные настройки:
И новый сниппет priceRu
Ранее я добавил системные настройки:
6. Создаем 2 системные настройки:
rate_euro
rate_usd
Добавил в updateRates$course = $setting->get('value');
хотя у нас есть уже переменная $usdИ новый сниппет priceRu
<?php
$course = $modx->getConfig('rate_usd');
return $price*$course;
В товаре вывел[[!priceRu? &price='[[+price]]']]
И ничего не получил. Что не так? В чём ошибка?
Скорее всего в кавычках — я с телефона писал и не те поставил — `` такие надо &price=`[[+price]]`
Эх, тильду я сослепу просмотрел.
Ошибка была в
Большое человеческое спасибо!
Ошибка была в
<?php
$course = $modx->getConfig('rate_usd');
return $price * $course;
Должно быть так<?php
$course = $modx->getOption('rate_usd');
return $price * $course;
Искренне благодарю за потраченное время. Всё работает. Большое человеческое спасибо!
УРА!
Прошу прощения.
А как быть с [[+total_cost]], как там посчитать с учётом курса?
Посчитать таким методом:
А как быть с [[+total_cost]], как там посчитать с учётом курса?
Посчитать таким методом:
[[!priceRu? &price=`[[+total_cost]]`]]
?
Всё, решено.
Ещё раз спасибо!
Надеюсь тот, кому понадобится подобный функционал. разберётся в коде, написанным выше
Ещё раз спасибо!
Надеюсь тот, кому понадобится подобный функционал. разберётся в коде, написанным выше
Добрый день! У меня вопрос, какие настройки Вы ставили для этих созданных переменных в настройках переменных?
У меня в это случае
$course = $modx->getOption('rate_euro'); return $price*$course;Если скажем значение переменной = 5 выводит результат = 5, как буд-то $price = 1, но если так написать
return $price;то выводит нормальную цены продукта.
Все настроил, скрипт рабочий, курсы прописываются и на странице и в самой системе в переменных, но вот эту вышеописанную проблему так решить и не смог. Очень нужна помощь. Заранее спасибо.
Переменная $price выводится как строка прекрасно, если изменить код сниппета
Тут вообще есть кто-нибудь?)))
$course = $modx->getOption('rate_euro'); return $price.$course;Почему так!
Тут вообще есть кто-нибудь?)))
Никого здесь нет, никому не хочется разбираться с обрывками информации. Какой скрипт, куда ты его вставляешь, зачем? Вызов в чанке сниппета msProducts или pdoResources? Зачем там вызывать, это никак не повлияет на цену в корзине.
Есть специальное событие, через которое проходит вывод каждого товара и на странице, и в корзине и в заказе. Менять цену нужно плагином. Если непонятно как именно — задай отдельный, внятный вопрос.
Есть специальное событие, через которое проходит вывод каждого товара и на странице, и в корзине и в заказе. Менять цену нужно плагином. Если непонятно как именно — задай отдельный, внятный вопрос.
Решил проблему, установив и прописав модификатор цены ms2_price_snippet, вот с такими параметрами
Ключ: ms2_price_snippet
Имя: setting_ms2_price_snippet
Описание: setting_ms2_price_snippet_desc
Тип поля: текстовое поле
Пространство имён: minishop2
Запись словаря для раздела: оставил пустым
Значение: priceRu
Где priceRu это название вашего сниппета, который обрабатывает цену
Причем, когда его сохраняешь, то он там есть, его заглавие выскакивает сразу: Модификатор цены
Ключ: ms2_price_snippet
Имя: setting_ms2_price_snippet
Описание: setting_ms2_price_snippet_desc
Тип поля: текстовое поле
Пространство имён: minishop2
Запись словаря для раздела: оставил пустым
Значение: priceRu
Где priceRu это название вашего сниппета, который обрабатывает цену
Причем, когда его сохраняешь, то он там есть, его заглавие выскакивает сразу: Модификатор цены
Добрый день, Василий! С плагином разобраться не смог пока что, знаний не хватает, пришлось обходить стороной. Спасибо ребятам, создавшим эту тему, решение внятное с курсами валют только у них для minishop2.
А Вам за магазин огромное спасибо! Очень продуманно создан.
Господа парсинг-гуру (даже не modx =] ), подскажите такую вещь, пожалуйста…
Работал скрип обновление валют, описанный тут выше в комментариях, а сегодня, при попытке запуска выдал:
Собственно, в 7ой строке:
Вопрос в чём… либо проблемы в работе скрипта, либо ЦБР что-то поменял… либо куда копать намекните хоть?
Работал скрип обновление валют, описанный тут выше в комментариях, а сегодня, при попытке запуска выдал:
Fatal error:
Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't find <definitions>
in 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'
in /home/****/www/assets/components/cbrf/ExchangeRatesCBRF.class.php:7
Stack trace:
#0 /home/****/www/assets/components/cbrf/ExchangeRatesCBRF.class.php(7): SoapClient->SoapClient('http://www.cbr....')
#1 /home/****/www/updrates.php(38): ExchangeRatesCBRF->__construct()
#2 {main} thrown in /home/****/www/assets/components/cbrf/ExchangeRatesCBRF.class.php on line 7
Собственно, в 7ой строке:
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
Вопрос в чём… либо проблемы в работе скрипта, либо ЦБР что-то поменял… либо куда копать намекните хоть?
Было такое вчера. Сегодня все ОК. Возможно они там что-то временно поломали.
Еще люди говорят, что ЦБ любит банить по IP без причин на сутки.
Оживлю тему. Может, кому еще интересно.
Задача была такая:
На сайте цены на часть товаров представлены в рублях, а часть в долларах. Но продавать их нужно в рублях.
Хотел было воспользоваться этим советом, но не нашел системной настройки ms2_price_snippet, взял эту инструкцию за основу.
Сразу скажу, программист из меня никакой, поэтому прошу не пинать.
Предположим, цены в долларах указаны в old_price.
Выполняем пункт №5 из того же решения, пишем сниппет (например, USD-cource):
P.S. Пора бы уже год в футере поменять...
Задача была такая:
На сайте цены на часть товаров представлены в рублях, а часть в долларах. Но продавать их нужно в рублях.
Хотел было воспользоваться этим советом, но не нашел системной настройки ms2_price_snippet, взял эту инструкцию за основу.
Сразу скажу, программист из меня никакой, поэтому прошу не пинать.
Предположим, цены в долларах указаны в old_price.
Выполняем пункт №5 из того же решения, пишем сниппет (например, USD-cource):
<?php
//Получаем курсы валют
require_once($modx->getOption('assets_path').'components/cbrf/ExchangeRatesCBRF.class.php');
$rates = new ExchangeRatesCBRF();
$usd = $rates->GetRate("USD");
$euro = $rates->GetRate("EUR");//а вдруг пригодится
//Записываем в системные настройки (оставил на всякий случай). Соответственно эти настройки нужно создать, ссылка выше
$setting = $modx->getObject('modSystemSetting', 'rate_euro');
$setting->set('value', $euro);
$setting->save();
$setting = $modx->getObject('modSystemSetting', 'rate_usd');
$setting->set('value', $usd);
$setting->save();
//Меняем цены где нужно
$resources = $modx->getCollection('msProduct',array('id:>' => 0));
//$rateUSD = $modx->getOption('rate_usd');
foreach ($resources as $res) {
$usdprice = $res->get('old_price');
$val = round($usdprice*$usd-100,-2); //Мне нужно их еще округлить до суммы кратной 100 в меньшую сторону
if ($usdprice) {
$res->set('price', $val);
$res->save();
}
}
//Чистим кэш
$modx->cacheManager->refresh();
3. Создаем ресурс, публикуем его, скрываем из меню, добавляем ему в контент:[[!USD-cource]]
и этот ресурс на хостинге вешаем по его url на кронтаб раз в сутки.Наверняка, решение не идеальное, но вроде работает. Кто оптимизирует — тот молодец.
P.S. Пора бы уже год в футере поменять...
Кстати, кому интересно, вот задание для CRON, а то нигде найти не мог:
0 0 * * * wget --force-html --delete-after http://site.ru/price-update.html
При выполнении вышеуказанного сниппета обнуляются все опции товаров созданные Minishop.
Помогите пожалуйста!) Как это убрать.
Помогите пожалуйста!) Как это убрать.
Сразу скажу, программист из меня никакой, поэтому прошу не пинать.Рад бы помочь…
Может Вы об этом? Версия MODx какая?
добрый день!
при использовании, плагин выдаёт ошибку Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
в строке $currentUSD='.number_format($currentUSD,2,'.','').';
почему, ведь вроде бы всё написано правильно?
при использовании, плагин выдаёт ошибку Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING
в строке $currentUSD='.number_format($currentUSD,2,'.','').';
почему, ведь вроде бы всё написано правильно?
не появилось каких-то более простых способов сделать мультивалютность? попался сайт на минишопе, дошел до момента что цену на сайте забивать в usd надо, а выводить в рублях по курсу. а тут какой-то полный крах с этим. функция повсеместно востребованная у тех кто на импорте сидит, а внести изменения стандартными методами modx не прокатывает. выше инструкция — никаких сниппетов не обнаружено для корректировки цены в настройках. сниппет сurrencyrate установлен, локально в корзине или в выводе меняет цену, но там еще глубже где-то надо вносить изменения — в заказ все равно падает цена без пересчета и непонятно где ее менять. день потрачен на такую мелочь и безрезультатно. кто разобрался, как это делать без танцев с бубном?
тыщу раз изжовано…
под валютные цены заводите свои поля у продукта, скрипт на крон для пересчета цен в рубли и пишите их в поле price товара. Всюду у вас работают стандартные механизмы для вывода цен и тд.
под валютные цены заводите свои поля у продукта, скрипт на крон для пересчета цен в рубли и пишите их в поле price товара. Всюду у вас работают стандартные механизмы для вывода цен и тд.
спасибо! но только где это разжевано было? сверху — обрывки историй каждого кто пытался сделать. в документации на сам minishop — ни слова про это
пожалуйста!
но только где это разжевано было?да тут, в сообществе. Не раз поднималась такая тема. Пользуйтесь поиском и читайте на здоровье.
еще раз огромное спасибо — оказалось делов на 5 минут:)
осталось только с кроном у хостера разобраться
осталось только с кроном у хостера разобраться
пожалуйста
вот вчера этому день посвятил, в итоге без вопросов не обошлось)
в документации фигурирует некий файл msproductdata.inc.php — сори, но опять по человечески не сказано где его искать то… не подскажите?
в документации фигурирует некий файл msproductdata.inc.php — сори, но опять по человечески не сказано где его искать то…смотря в каком контексте (не контекст modx) этот файл фигурирует.
если речь о плагинах docs.modx.pro/components/minishop2/development/plug-ins-products
то это файл в каком либо месте, выбирайте самостоятельно куда положить, который вы затем подключаете через метод miniShop2->addPlugin и в нем уже указываете путь.
да, именно в этом контексте. хочу, как там написано, изменить одно из полей товара под свои цели.
если изменять поле, то файл уже этот где-то должен быть получается?
если изменять поле, то файл уже этот где-то должен быть получается?
да, файл нужно создать…
Просто там пишут:
«Расширение модели
Всё нужное для изменения модели мы загружаем из файла msproductdata.inc.php:»
смутило слово «загружаем» — то есть где-то уже лежит как бы
«Расширение модели
Всё нужное для изменения модели мы загружаем из файла msproductdata.inc.php:»
смутило слово «загружаем» — то есть где-то уже лежит как бы
все верно, создаем файл, описываем мапу, затем загружаем…
смутило слово «загружаем»
эка вы стеснительный)))
что сверху не читал, как делал я:
у товара цены в $
файл для получения валют и запись значений в опции контекста (сажать на крон):
Плагин на msOnGetProductPrice
p.s. в моем примере в каждый товар заводить доп.поле не вижу смысла, ибо выводится 5-9 карточек товара.
у товара цены в $
файл для получения валют и запись значений в опции контекста (сажать на крон):
<?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 карточек товара.
тайские баты?)
Они самые
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.