Переключатель валюты в каталоге 1С-Битрикс

Просмотров: 2073

Задача: Дать пользователю возможность самостоятельно выбирать валюту, в которой он хочет видеть цены, в разделе каталога интернет-магазина.



Получение списка валют из модуля "Валюты"

Для реализации этой задачи необходимо получить список всех доступных валют и вывести их в форму, которая будет записывать выбранную валюту в COOKIE.

Над выводом компонента catalog.section, например, в section.php комплексного компонента каталога, добавляем следующий код:

<form id="currencyForm" action="" method="post">
        <span>Выберите валюту:</span>
        <select name="CURRENCY_ID" id="currencySelect">
                <?php
                Loader::includeModule('currency');
                $currencyList = CCurrency::GetList(
                    (
                    $by = 'NAME' // Можно по SORT если хотите переставить option местами
                    ),
                    (
                    $order = 'ASC'
                    )
                );
                while ($currency = $currencyList->Fetch()) {
                    ?>
                    <option value="<?= $currency['CURRENCY'] ?>"
                        <?= ($_COOKIE['SELECTED_CURRENCY_ID'] == $currency['CURRENCY']) ? 'selected' : '' ?>>
                        <?= $currency['CURRENCY'] ?>
                    </option>
                    <?php
                }
                ?>
        </select>
</form>
<script>
        document.addEventListener('DOMContentLoaded', function () {
                // Получаем ссылки на форму и на поле выбора валюты
                var form = document.getElementById('currencyForm');
                var select = document.getElementById('currencySelect');

                // Добавляем обработчик события изменения значения в поле выбора
                select.addEventListener('change', function () {
                    // Отправляем форму
                    form.submit();
                    // Получаем выбранное значение
                    var selectedCurrency = select.value;
                    // Записываем выбранное значение в куки
                    document.cookie = "SELECTED_CURRENCY_ID=" + selectedCurrency;
                    // Для медленных сайтов показываем иммитацию отправки
                    // $('.loading_body').addClass('loading_body_show');
                    // Перезагружаем страницу
                    location.reload();
                });
        });
</script>
<?
  if ($_COOKIE['SELECTED_CURRENCY_ID']) {
        $arParams['CONVERT_CURRENCY'] = "Y";
        $arParams['CURRENCY_ID'] = $_COOKIE['SELECTED_CURRENCY_ID'];
  }
?>

Здесь мы используем метод CCurrency::GetList для получения всех доступных валют и заполняем ими select.

С помощью JavaScript отправляем форму, когда пользователь выбирает любой из вариантов, и записываем выбранную валюту в COOKIE SELECTED_CURRENCY_ID. Для имитации ajax-эффекта используем location.reload();, чтобы страница перезагружалась в том же месте.

Если ваш сайт медленный, можно добавить какой-нибудь спиннер, чтобы пользователям было комфортнее. Для этого раскомментируйте $('.loading_body').addClass('loading_body_show') и реализуйте показ этого блока с индикатором отправки.

Выбор валюты битрикс

Далее проверяем наличие $_COOKIE['SELECTED_CURRENCY_ID'] и, если оно существует, устанавливаем параметры "Показывать цены в одной валюте" и "Валюта, в которую будут сконвертированы цены". Если COOKIE не установлено-то автоматически используются параметры из настроек каталога.

То же самое условие необходимо вставить в element.php, чтобы и в детальной карточке показывалась установленная пользователем валюта. Если необходимо, добавляем форму выбора валюты и в шаблон детальной карточки.

На этом всё. Чтобы сделать приведенный пример более универсальным и легко применимым на разных страницах, можно завернуть его в компонент и вызывать в нужных местах сайта.

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 400 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 250 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 300 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 30 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.