208 похожих чатов

В общем у меня настолько бомбануло что я тему на

форуме создал. нигде в интернетах нет нормального решения этой проблемы на чистом битриксе без всяких модулей и костылей. https://dev.1c-bitrix.ru/support/forum/messages/forum6/topic146588/message707924/?result=new#message707924

24 ответов

90 просмотров

Как ориентир посмотри аспровские шаблоны. Не помню точно в каких именно аспро, но там реализована региональность на одном сайте. Я как-то делал такую штуку, но мне хватило события onGetOptimalPrice и проброса в каталог нужного типа цен. Там был небольшой каталог и полностью вся инфа, включая скидки, приходила из 1с, поэтому никаких проблем не возникало.

Itachi-Vergil Автор вопроса
Alexey Nazarov
Как ориентир посмотри аспровские шаблоны. Не помню...

onGetOptimalPrice использовать некорректно. у меня и сейчас используются скидки и в будущем начнут вводить какую нибудь акционность и придётся постоянно этот обработчик переделывать и получать люлей за косяки с ценами. я делаю так чтобы оно дальше без вмешательств работало с остальным функционалом битрикса.

Itachi Vergil
onGetOptimalPrice использовать некорректно. у меня...

Ограничить выбор типа цены с сохранением всего остального функционала - элементарная задача на этом событии. Из минусов только падение производительности при выгрузке в яндекс, например. Метод на вход цены получает. Вызовите его еще раз, передав только те цены, что нужно.

Itachi-Vergil Автор вопроса
Eugene Zhukov
Ограничить выбор типа цены с сохранением всего ост...

спасибо за совет. мне стандартный компонент где он вызывается перезаписать или где его вызвать повторно?

Itachi Vergil
спасибо за совет. мне стандартный компонент где он...

Вот теперь я не понял. Вам только в конкретном месте нужно ограничивать или общую работу модифицировать (чтобы везде действовало)?

Itachi-Vergil Автор вопроса
Eugene Zhukov
Вот теперь я не понял. Вам только в конкретном мес...

сейчас у меня проблема только с оформлением заказа. в корзине применяется цена наименьшая. в каких других местах может ещё вызываться getoptimalprice я не знаю. ядро не изучал так глубоко.

Itachi Vergil
сейчас у меня проблема только с оформлением заказа...

Вот и сделайте обработчик, который сам будет вызывать этот метод, но с измененными параметрами. Как избежать зацикливания - давно изложено.

Itachi-Vergil Автор вопроса
Eugene Zhukov
Вот и сделайте обработчик, который сам будет вызыв...

Спасибо. а как мне узнать чтобы мой вызов точно был последним и после него не вызвался ещё где-то этот метод? возможно переопределить этот метод в init.php и написать логику для выбора цены там? чтобы из любого места где он впоследствии будет вызываться он вызывался с моей исправленной логикой?

Itachi Vergil
Спасибо. а как мне узнать чтобы мой вызов точно бы...

А зачем вам это знать? Про переопределение я вообще молчу.

Itachi-Vergil Автор вопроса
Eugene Zhukov
А зачем вам это знать? Про переопределение я вообщ...

ну чтобы после моего вызова не произошёл повторный расчёт цены. если потом какие то другие виды скидок подключат например

Itachi Vergil
ну чтобы после моего вызова не произошёл повторный...

Абсолютно не нужно. Если ваш обработчик вернет цену, остальные не выполнятся.

Itachi Vergil
Спасибо. а как мне узнать чтобы мой вызов точно бы...

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

Itachi-Vergil Автор вопроса
Михаил Сычев
зарегистрируйте свой метод к событию onGetOptimalP...

мне не нужно менять цены. мне нужно чтобы метод CCatalogProduct::GetOptimalPrice откуда бы он не вызывался в ядре, учитывал тип цены по моему условию (брал ID из кешированной сессии). а не собирал все типы цен доступные текущему пользователю. вот что мне нужно. переопределение цены в самом этом событии не подходит для случаев когда я хочу оставить рабочими все остальные механизмы скидок, уценок и т.п.

Itachi Vergil
мне не нужно менять цены. мне нужно чтобы метод CC...

если я правильно понимаю onGetOptimalPrice, один раз определив его, вы уже замените updateUserHandlerOptimalPrice, и сможете собрать ваши цены, которые в дальнейшем будут обрабатываться и если кто-то захочет еще что-то к этому методу прикрепить, то это наложится сверху, или сначала кто-то заменит, а затем ваш метод отработает, в зависимости от сортировки регистрации в итоге в любом случае вы получите необходимый результат

Itachi-Vergil Автор вопроса
Михаил Сычев
если я правильно понимаю onGetOptimalPrice, один р...

Спасибо, завтра на свежую голову посмотрю ещё раз внимательно. Возможно я что то не правильно понял в этом обработчике.

Itachi Vergil
Спасибо, завтра на свежую голову посмотрю ещё раз ...

Ты наверное путаешь вызов события и вызов метода. Метод CCatalogProduct::GetOptimalPrice может быть вызван гле угодно, сколько угодно раз, но каждый его вызов повлечёт вызов события OnGetOptimalPrice, на которое ты будешь подписан и твой обработчик вернёт из него нужный тебе тип цен, в зависимости от города, который сохранён в сессии. То есть твой обработчик в любом случае перехватит событие, откуда бы и сколько раз оно ни было вызвано.

Itachi-Vergil Автор вопроса
Alexey Nazarov
Ты наверное путаешь вызов события и вызов метода. ...

Это я как раз понимаю. Вот только в обработчике я не видел возможности заменить входящий в метод список цен. Обработчик возвращает либо тру либо фолс либо массив с наименьшей ценой. И всё

Itachi Vergil
Это я как раз понимаю. Вот только в обработчике я ...

Ну. Так ты внутри обработчика получи все типы цен, выбери из них нужный тебе и верни его.

Itachi-Vergil Автор вопроса
Alexey Nazarov
Ну. Так ты внутри обработчика получи все типы цен,...

И дальше что? На эту цену не применится никакая скидка из админки битрикса

Itachi Vergil
И дальше что? На эту цену не применится никакая ск...

Второй элемент возвращаемого массива - 'DISCOUNT' А в обработчик тебе прилетает одним из параметров $arDiscountCoupons Так что, скорей всего можно.

Itachi-Vergil Автор вопроса
Itachi Vergil
Я это всё делал и это не работает

Вот именно со скидками я не делал, поэтому не могу утверждать.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта