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

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

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

24 ответов

43 просмотра

Как ориентир посмотри аспровские шаблоны. Не помню точно в каких именно аспро, но там реализована региональность на одном сайте. Я как-то делал такую штуку, но мне хватило события 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
Я это всё делал и это не работает

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

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

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

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Господа, а как такое в миграцию засунуть?
Денис Александрович
12
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта