Задача: дать возможность пользователю интернет-магазина выбрать валюту, в которой он хотел бы видеть цены товаров в каталоге[spoiler]. Пока штатного решения нет, но реализуется довольно просто, для этого требуется кастомизация компонента каталога и его шаблона. Покажу вариант реализации на примере компонента catalog.element.
1. Копируем компонент bitrix:catalog.element в свою папку, например /bitrix/components/supercomponents/ 2.Открываем на редактирование файл /bitrix/components/supercomponents/catalog.element/component.php и ищем строку строку, где вызывается метод CIBlockPriceTools::GetItemPrices(). Сразу же после этой строки вставляем следующий код:
Здесь осуществляется запись выбраной валюты в сессию и конвертирование цен продукта в выбранную валюту. Как вариант можно писАть идентификатор в куки. На этом кастомизация компонента закончена.
3. Открываем на редактирование файл шаблона /bitrix/components/supercomponents/catalog.element/.default/template.php и в самоми начале после строчки '<div class="catalog-element">' (хотя это на ваше усмотрение) добавляем следующее код:
Это форма со списком валют сайта. Пользователь может выбрать валюту, нажать на "Выбрать", в сессию записывается идентификатор валюты, в компоненте цены конвертируется в эту валюту.
Результат:
Всё действия, которые выполнялись в component.php можно выполнят в файле result_modifier.php. В этом случае, понадобится только кастомизация шаблона стандартного компонента. Шаблон компонента нужно скопировать в шаблон сайта, в папке шаблона создать файл result_modifier.php и изменить $arResult аналогично описанному выше.
Это пример для одного компонента каталога, т.е. подобные модификации следует сделать в каждом нужном компоненте. Компонент корзины тоже нужно кастомизировать.
В частности, цена позиции будет отображаться в выбранной валюте если в коде компонента
Также можно оформить выбор валюты как отдельный компонент, а в остальных компонентах (каталог, корзина) учитывать ID валюты записанный в сессии(куках).
Добавил архив с компонентом. Исправил в нём ошибку, на которую указал Max Pryazhevsky - теперь перед использованием doubleval() от значение отрезается всё лишнее в соответствие с форматом валюты. Плюс дополнительные параметры компонента. Параметры "Отображать форму выбора валюты" - включает возможность выбора валюты и отображение цен в этой валюте. Параметр "Валюта" - указывается валюта, в которой компонент будет отображать цены, если пользователь не выбирал валюту или такая возможность отключена опцией "Отображать форму выбора валюты". Параметр "Не показывать старую цену, если есть скидка" - применяется в шаблоне, если флаг установлен, то "зачеркнутая цена" не отображается, а показывается только цена с учётом скидки.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».