Максимум веб информации Создать акаунт

Создаем функциональный модуль курсов валют для DLE

06 сен 2026
Модули
20
0
Создаем функциональный модуль курсов валют для DLE

Наличие актуальной финансовой информации — отличный способ повысить поведенческие факторы на вашем сайте. Пользователи часто ищут актуальные котировки доллара, евро или юаня. В этой статье мы разработаем собственный виджет для DataLife Engine (DLE), который не только выводит данные от ЦБ РФ, но и показывает индикаторы тренда (стрелочки вверх/вниз), сравнивая показатели с предыдущим днем.

Почему стоит использовать самописный скрипт, а не сторонние плагины?

Многие вебмастера устанавливают громоздкие сторонние решения или используют iframe-вставки, которые замедляют загрузку страницы. Наш PHP-обработчик работает иначе:

  1. Отсутствие нагрузки на базу данных: Скрипт не делает лишних SQL-запросов.

  2. Агрессивное кэширование: Данные скачиваются всего один раз в час и сохраняются в локальный .tmp файл на сервере.

  3. Использование JSON-формата: Мы будем использовать легкий API-шлюз cbr-xml-daily.ru, который автоматически рассчитывает разницу курсов за вчера и сегодня.

Пошаговая инструкция по установке модуля

Шаг 1. Пишем PHP-логику (бэкенд)

Сначала нам нужно создать файл, который будет отвечать за парсинг и математические расчеты. Создайте файл currency.php и загрузите его на ваш сервер в директорию /engine/modules/.

<?php
/* Модуль курсов валют с индикаторами для DLE */
if (!defined('DATALIFEENGINE')) {
    header("HTTP/1.1 403 Forbidden");
    header('Location: ../../');
    die("Hacking attempt!");
}

$cache_time = 3600; // Кэширование на 3600 секунд (1 час)
$cache_file = ENGINE_DIR . '/cache/currency_json.tmp';
$currency_data = false;

// Проверяем валидность кэша
if (file_exists($cache_file) && (time() - filemtime($cache_file) < $cache_time)) {
    $currency_data = json_decode(file_get_contents($cache_file), true);
} else {
    // Получаем данные через API
    $json_data = @file_get_contents('https://www.cbr-xml-daily.ru/daily_json.js');
    if ($json_data) {
        $data = json_decode($json_data, true);
        if (isset($data['Valute'])) {
            $currency_data = array();
            // Массив необходимых котировок
            $currencies = array('USD', 'EUR', 'CNY', 'KZT'); 
            
            foreach ($currencies as $code) {
                if (isset($data['Valute'][$code])) {
                    $nominal = (int)$data['Valute'][$code]['Nominal'];
                    $val = $data['Valute'][$code]['Value'] / $nominal;
                    $prev = $data['Valute'][$code]['Previous'] / $nominal;
                    
                    $diff = $val - $prev;
                    
                    // Вычисляем направление тренда
                    if ($diff > 0) { $trend = '▲'; $class = 'up'; } 
                    elseif ($diff < 0) { $trend = '▼'; $class = 'down'; } 
                    else { $trend = '▬'; $class = 'flat'; }
                    
                    $currency_data[$code] = array(
                        'value' => number_format($val, 2, '.', ''),
                        'diff'  => number_format(abs($diff), 2, '.', ''),
                        'trend' => $trend,
                        'class' => $class
                    );
                }
            }
            if (!empty($currency_data)) {
                file_put_contents($cache_file, json_encode($currency_data));
            }
        }
    }
}

// Интеграция с шаблонизатором DLE
if ($currency_data) {
    $tpl->load_template('currency.tpl');
    
    foreach (array('USD', 'EUR', 'CNY', 'KZT') as $code) {
        $lower_code = strtolower($code);
        $cd = $currency_data[$code] ?? array('value' => '—', 'diff' => '', 'trend' => '', 'class' => 'flat');
        
        $tpl->set('{'.$lower_code.'}', $cd['value']);
        $tpl->set('{'.$lower_code.'_diff}', $cd['diff']);
        $tpl->set('{'.$lower_code.'_trend}', $cd['trend']);
        $tpl->set('{'.$lower_code.'_class}', $cd['class']);
    }
    
    $tpl->compile('currency_module');
    $tpl->clear();
    echo $tpl->result['currency_module'];
}
?>

Важные нюансы

  • Как добавить другие валюты? В файле currency.php найдите строчку array('USD', 'EUR', 'CNY', 'KZT') и добавьте туда буквенный код нужной валюты (например, BYN для белорусского рубля). Затем в currency.tpl добавьте вывод переменной, прописав ей тег в PHP-файле по аналогии с имеющимися.

  • Очистка кэша: При первом запуске или внесении изменений в код PHP, обязательно очистите кэш сайта в админ-панели DLE, чтобы удалить старый файл currency_cbr.tmp.

Шаг 2. Настройка вывода (фронтенд)

Теперь настроим визуальную часть. В папке вашей активной темы (например, /templates/Default/) создайте файл currency.tpl. Здесь мы используем внутренние теги шаблонизатора для вывода переменных.

<style>
    .curr-up { color: #e74c3c; font-size: 0.85em; font-weight: bold; }   
    .curr-down { color: #27ae60; font-size: 0.85em; font-weight: bold; } 
    .curr-flat { color: #95a5a6; font-size: 0.85em; font-weight: bold; } 
</style>

<div class="currency-widget" style="background: #f9f9f9; padding: 15px; border-radius: 8px;">
    <h4>Курсы валют ЦБ РФ</h4>
    <ul style="list-style: none; padding: 0;">
        <li><b style="color: #27ae60;">$</b> USD: {usd} ₽ <span class="curr-{usd_class}">{usd_trend} {usd_diff}</span></li>
        <li><b style="color: #2980b9;">€</b> EUR: {eur} ₽ <span class="curr-{eur_class}">{eur_trend} {eur_diff}</span></li>
        <li><b style="color: #c0392b;">¥</b> CNY: {cny} ₽ <span class="curr-{cny_class}">{cny_trend} {cny_diff}</span></li>
        <li><b style="color: #f39c12;">₸</b> KZT: {kzt} ₽ <span class="curr-{kzt_class}">{kzt_trend} {kzt_diff}</span></li>
    </ul>
</div>

Секрет юзабилити: Красный цвет для роста интуитивно понятен в РФ, так как означает ослабление национальной валюты (рубля).

Шаг 3. Подключение виджета в дизайн сайта

Откройте основной файл вашего дизайна main.tpl. Найдите подходящее место (обычно это сайдбар — блок sidebar) и вставьте строку подключения:

{include file="engine/modules/currency.php"}

После этого обязательно зайдите в админ-панель вашей CMS и выполните очистку кэша.

Итоги

Мы создали легкий и быстрый модуль для вывода котировок. Благодаря локальному кэшированию ваш сервер защищен от блокировок по IP со стороны поставщика данных, а семантическая верстка виджета гармонично впишется в любой дизайн сайта на DLE.

Подписка на публикацию новости
Поблагодарили: 0
Пока никто не поблагодарил
Комментарии
Минимальная длина комментария — 50 знаков. Комментарии модерируются.

Смотрите также в категории: Модули

Мы используем файлы cookie
Сайт (WEB-MAXS.RU) использует файлы cookies и сервисы сбора технических данных посетителей (данные об IP-адресе, местоположении и др.) для обеспечения работоспособности и улучшения качества обслуживания. Продолжая использовать наш сайт, вы автоматически соглашаетесь с использованием данных технологий.
Лучшие предложения для Вашего Wordpress сайта!

Может быть интересно!

Лучшие предложения для Вашего Wordpress сайта!

Выбирайте то,
что действительно нужно!