Олег Захаров

Олег Захаров

С нами с 14 октября 2017; Место в рейтинге пользователей: #64
Сергей Лим
25 июня 2015, 01:57
1
0
К сожалению у этого компонента нету истории изменения курса. На данный момент пользуюсь вот этим скриптом

function get_rate($currency) {

$date = getdate();  // получаем ассоциативный массив с данными по дате

$day_of_the_week = $date['wday']; // день недели

    //расчет коэффициента смещения
    switch ($day_of_the_week) {
    case 0:  $k1 = 2 ;  $k2 = 1;  break;   // воскресенье
    case 1:  $k1 = 3 ;  $k2 = 2;  break;   // понедельник
    case 2:  $k1 = 3 ;  $k2 = 0;  break;  // вторник
    default: $k1 = 1 ;  $k2 = 0;  break;   // среда, четверг, пятница, суббота
    }

$month = $date['mon'] ;    // месяц
$day = $date['mday'] ;     // число сегодня
$yesterday = $day - $k1 ;  // число для получения курса на предыдущий день
$today = $day - $k2 ;      // число для получения курса на сегодня
$year = $date['year'] ;    // год


$date_yesterday = date("d/m/Y", mktime(0, 0, 0, $month, $yesterday, $year )); // Генерация даты для курса предыдущего дня
$date_today = date("d/m/Y", mktime(0, 0, 0, $month, $today, $year )); // Генерация даты для курса на сегодня

$rate = array() ;

foreach($currency as $key => $value) {
$url = 'http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$date_yesterday.'&date_req2='.$date_today.'&VAL_NM_RQ='.$value ;
$xml = simplexml_load_file($url);
$rate_today = round(str_replace(',','.',$xml->Record[1]->Value), 2);
$rate_yesterday = round(str_replace(',','.',$xml->Record[0]->Value), 2);
$range = round($rate_today - $rate_yesterday, 2) ;

if ($range > 0) {
$range = '+' . $range;
$img = 'up' ;
} elseif ($range == 0) {
$range = 0 ;
$img = 0 ;
} else {
$img = 'down' ;
}

$rate[$key] = array(
 'today' => $rate_today,
 'change' => $range,
 'img' => $img
);

}

return $rate ;

}



$currency = array(
'dollar' => 'R01235',
'euro' => 'R01239'
);

$rate = get_rate($currency);

foreach ($rate as $key => $value) { ?>

<div class="valuta-logo"><img src="/assets/images/valuta/<?php echo $key; ?>.png" alt="" /></div>

<strong><?php echo $value['today']; ?></strong>

<?php if($value['change']) { ?>

<img src="/assets/images/valuta/<?php echo $value['img']; ?>.png" alt="" /> <?php echo $value['change']; ?>

<?php } ?>

<div style="clear: both"></div>

<?php }

Скажите, насколько он кривой? И я так понимаю, что надо сделать кэшируемость + крон? Я просто в пхп только начинаю разбираться. Автор если направишь меня в нужное направление, то хотел бы помочь усовершенствовать твой компонент на основе этого. Я знаю, что ты это сам можешь, но я хотел бы научиться)
An Si
17 апреля 2015, 11:02
2
+2
мда, логично… затупил с утра. В общем, чтобы обновлять раз в день без крона можно создать плагин на событие OnLoadWebDocument. В плагине просто сравнивать день последнего обновления и сегодняшний день. Если они отличаются, то обновляем, иначе нет.

$lastDayUpdate = strftime('%d',strtotime($modx->getOption('currencyrate_last_date')));
if ($lastDayUpdate!=date('d')) {
    $currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/');
    if (!($currencyrate instanceof currencyrate)) return '';
    $currencyrate->rateIntoDb();
}
return;
Владимир Дремучий
08 декабря 2014, 22:25
1
0
Можно почитать manifest.php

1. Требования
Для использования вам необходим Shopkeeper с использованием FormIt
Тестировалось на Shopkeeper 2.3.5
2. Установка
а) Установить пакет в  "система - управление пакетами".
а)
В чанке формы заказа, в списке способов оплаты указать [[!YandexMoney? &action=`showMethods` ]]
Т.е., например, в чанке shopOrderForm будет:
<select name="payment" style="width:200px;">
	<option value="При получении" [[!+fi.payment:FormItIsSelected=`При получении`]]>При получении</option>
        [[!YandexMoney? &action=`showMethods` ]]
</select>
б)
В чанке страницы заказа, в список хуков FormIt добавить YandexMoneyHook
Т.е., например, чанк orderform_page
[[!FormIt?
&hooks=`spam,shk_fihook,YandexMoneyHook,email,FormItAutoResponder,redirect`
&submitVar=`order`
&emailTpl=`shopOrderReport`
&fiarTpl=`shopOrderReport`
&emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
&fiarSubject=`Вы сделали заказ в интернет-магазине "[[++site_name]]"`
&emailTo=`[[++emailsender]]`
&redirectTo=`25`
&validate=`address:required,fullname:required,email:email:required,phone:required`
&errTpl=`<br /><span class="error">[[+error]]</span>`
]]
в) Создать 2 страницы: для успешно завершенного платежа и неуспешно завершенного.
3) Настройка
Перейти в параметры сниппета YandexMoney (Элементы -> сниппеты -> YandexMoney - >YandexMoney)
Разблокировать параметры по умолчанию.
Заполнить параметры в соответствии со своими задачами.
Сохранить.
4) Profit.
Ну это по использованию, видимо надо создать транспотрный пакет, типа yandexmoney_modx.transport.zip
Сергей Шлоков
16 октября 2014, 12:38
6
0
Вот важная информация для админов сайтов — Как защитить MODX Revolution от взлома
Вот еще от себя могу добавить —
wld
wld
07 мая 2014, 20:06
5
0
или же не указываем
<base href="[[++base_url]]" />
а в Настройках системы — core — Сайт
Схема URL (link_tag_scheme) установить значение abs
Для справки:
-1: (default value) URL is relative to site_url
0: see http
1: see https
full: URL is absolute, prepended with site_url from config
abs: URL is absolute, prepended with base_url from config
http: URL is absolute, forced to http scheme
https: URL is absolute, forced to https scheme

И при вызове pdoMenu или подобных снипетов указывать:
&scheme=`abs`
По идее, в подобных снипетах можно было бы дергать эту схему урл по дефолту из link_tag_scheme, но почему то так не все так делают(

Отличия:
В первом случае, как указал Василий, при создании якорей, необходимо указывать ссылку на текущую страницу:
<a href="[[~id]]#test">Ссылка</a>
В моем случае, достаточно указать только якорь:
<a href="#test">Ссылка</a>
Володя
04 марта 2014, 11:43
1
0
Василий, опять я тебя побеспокоить хочу…
С сортировкой ладно, вроде разобрались, выводим через msproduct
[[!msProducts?
    &tpl=`tpl_default`
    &includeThumbs=`212x192`
    &sortdir=`asc` 
    &parents=`30` 
    &limit=`100` 
    &innerJoin=`{"msCategory": {"class":"msCategory", "alias":"msCategory", "on":"msProduct.parent = msCategory.id"}}`
    &sortby=`msCategory.menuindex ASC,msProduct.menuindex`
]]
Все хорошо, все как в дереве отсортировано.

Теперь скажи мне пожалуйста как этот порядок сохранить при выводе через mfilter?
пробую — он мне ошибку выдает
0.0006289: Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'asc,msproduct.menuindex asc LIMIT 60, 20' at line 1
или я туплю или хз…
Подскажи пожалуйста! Спасибо!
Василий Наумкин
10 октября 2013, 23:13
1
0
Еще можно указать &resources=`2,3,5,10,1` и пустой &sortby=``, тогда товары выведутся в указанном порядке.

Вчера про это писал.
Андрей Ятин
10 октября 2013, 22:38
1
0
Разобрался. У меня идёт вызов через runSnippet. Может кому пригодится:

$ord = "
            'Выключатели',
            'Розетки электрические',
            'Розетки TV',
            'Розетки телеф/комп',
            'Розетки акустические',
            'Управление жалюзи',
            'Светорегуляторы',
            'Терморегуляторы теплого пола',
            'Датчики движения',
            'Выключатели автоматические',
            'Вывод кабеля',
            'Заглушки'
        ";
    $sortby = "FIELD(Data.product_type,".$ord.")";