Вы не пробовали разобраться почему добавление в корзину заканчивается неудачей?
Например сделать обработчик на событие OnBeforeBasketAdd и в нем вернуть false, при этом в корзину ничего не должно добавиться, визуально же это выглядит как ошибка добавления в корзину. Насчет ошибки - у меня ничего не выводится, просто в корзину передается страница. Да и странно, почему пользователь должен видеть вместо корзины такое "чудо", даже если была ошибка. Может нужно что-то включить, чтобы видеть ошибку ?
Насчет OnBeforeLocalRedirect понятно. Остался вопрос - почему при отмене добавления в корзину товара некорректно перерисовывается корзина ? Если посмотреть в исходники, то можно увидеть что LocalRedirect вызывается не всегда, а только при успешном добавлении товара. Если не будет вызвано событие LocalRedirect то корзина никогда корректно не перерисуется (событие OnBeforeLocalRedirect не отработает), но тогда почему разработчики не сделали вызов LocalRedirect всегда, как предложил я ?
потому что LocalRedirect отрабатывает раньше чем устанавливается обработчик OnBeforeLocalRedirect
Т.е. с ваших слов получается что это случайный процесс и мы не управляем, впрочем как и сам bitrix, порядком вызова функции Localredirect и её обработчиком ? Тогда смысл в обработчиках и событийном механизме вцелом, если допустимо такое поведение ? В моем случае все работает корректно, если при добавленнии в корзину не произошли ошибки или само добавление не отменили в обработчике, например в OnBeforeBasketAdd. В документации написано, что в обработчике OnBeforeBasketAdd я могу следующее:
Цитата
OnBeforeBasketAdd - вызывается перед добавлением записи в корзину, может быть использовано для отмены или модификации данных.
Но получается что визуально отмена данных равносильна ошибке при добавлении в корзину. А модифицировать данные тоже нельзя, т.к. после обработки слушателей (которые могу отрабатывать в произвольном порядке и могу переписывать модификации друг-друга) есть ещё методы валидации которые тоже меняют данные ...
Я тестировал на штатном шаблоне, который идет с демо версией сайта. Вы используете штатный или самодельный шаблон ? Если штатный, то скажите его название. В текущем шаблоне, в корзину хоть когда-нибудь добавлялся товар нормально, чтобы показывалась не страница сайта ? Попробуйте сделать шаблон для каталога .default и включить опцию AJAX, я тестировал на этом шаблоне.
проблема в переменной data. В нашем случае в неё приходит весь html код страницы, а должен придти только html с информацией по корзине. Идем дальше. В модуле catalog.section находим кусок кода:
Заметим, что если все идет штатным образом (нет ошибок при добавлении, добавление прошло и его например не отменили в обработчике и т.п.) то у нас корзина показывается корректно. Т.е все дело в функции LocalRedirect(). Видимо нужно обязательно делать редирект, для корректной перерисовки корзины, именно тогда в script.js придет корректная data. Поэтому добавим в конец условия if после комментария //Line 1 вызов LocalRedirect(). В итоге получим:
Код
if (array_key_exists($arParams["ACTION_VARIABLE"], $_REQUEST) && array_key_exists($arParams["PRODUCT_ID_VARIABLE"], $_REQUEST))
{
...
// Line
LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"])));
}
теперь все работает. Остался вопрос для разработчиков - правильно ли была устранена проблема и почему такие вещи, которые уже обсуждали ранее на форуме (например Ранее на форуме) не поправлена в релизе 11, ведь проблема существенная и её легко повторить в демо версии?