Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

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


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

Для реализации этой задачи необходимо получить список всех доступных валют и вывести их в форму, которая будет записывать выбранную валюту в 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С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс