Ситуация:
После последнего обновления перестал работать умный фильтр на паре сайтов. При выборе хоть чего-нибудь в фильтре, вместе с ответом возвращается ошибка
Возвращающий ответ код в component.php стандартный (на одном сайте кастомизированный компонент, на другом - штатный):
Файл ajax.php в шаблонах тоже стандартный и не модифицировался:
В заголовки рвётся кука BITRIX_SM_ABTEST_s1, я так понимаю из модуля A/B-тестирования, который установлен, но не задействован. При удалении модуля ошибка пропадает, но это же не выход. Вот буду я тестирование проводить, и что мне жить с неработающим фильтром всё это время?
Куку пытается записать CMain::FinalActions(), который, естественно, после тела ответа вызывается. На событие OnBeforeRestartBuffer записана только одна функция из ядра и она абсолютно точно ни при чём.
В общем я уже полдня сижу с этим, может глаз замылился. У меня, конечно, много вопросов по этому поводу, но самый главный:Что вообще тут происходит Есть какой-нибудь способ найти, где возникает такая кука (маловероятно, но всё-таки)? Ни в файле component.php, ни в class.php нет ни слова про такую куку или модуль A/B-теста (я не нашёл поиском).
Добавлено:
На всякий случай добавлю - на чистой установке такой проблемы не возникло.
После последнего обновления перестал работать умный фильтр на паре сайтов. При выборе хоть чего-нибудь в фильтре, вместе с ответом возвращается ошибка
| Код |
|---|
Cannot modify header information - headers already sent by (output started at /лалала/сайт.ру/bitrix/components/bitrix/catalog.smart.filter/component.php:937) in /лалала/сайт.ру/bitrix/modules/main/lib/httpresponse.php on line 153 |
Возвращающий ответ код в component.php стандартный (на одном сайте кастомизированный компонент, на другом - штатный):
| Код |
|---|
elseif(isset($_REQUEST["ajax"]) && $_REQUEST["ajax"] === "y")
{
$this->setFrameMode(false);
ob_start();
$this->IncludeComponentTemplate("ajax");
$json = ob_get_contents();
$APPLICATION->RestartBuffer();
while(ob_end_clean());
header('Content-Type: application/x-javascript; charset='.LANG_CHARSET);
echo $json;
CMain::FinalActions();
die();
}
|
Файл ajax.php в шаблонах тоже стандартный и не модифицировался:
| Код |
|---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$APPLICATION->RestartBuffer();
unset($arResult["COMBO"]);
echo CUtil::PHPToJSObject($arResult, true);
?> |
В заголовки рвётся кука BITRIX_SM_ABTEST_s1, я так понимаю из модуля A/B-тестирования, который установлен, но не задействован. При удалении модуля ошибка пропадает, но это же не выход. Вот буду я тестирование проводить, и что мне жить с неработающим фильтром всё это время?
Куку пытается записать CMain::FinalActions(), который, естественно, после тела ответа вызывается. На событие OnBeforeRestartBuffer записана только одна функция из ядра и она абсолютно точно ни при чём.
В общем я уже полдня сижу с этим, может глаз замылился. У меня, конечно, много вопросов по этому поводу, но самый главный:
Добавлено:
На всякий случай добавлю - на чистой установке такой проблемы не возникло.