Closed mrdim closed 6 years ago
Если почитать исходники битрикса, то там в недрах при выводе элементов всё прогоняется через htmlspecialcharsbx. Если ваш html заканчивает путь где-нибудь в $row->AddViewField, то и его ждёт эта незавидная участь. Проследите, что у вас этого не происходит, и результат getMultipleEditHtml во всех случаях рендерится через простой print, а не через битриксовый API. Если где-то битриксовый API мешает - переопределите эти классы и методы. В самом AdminHelper нигде нет экранирования HTML выводимых виджетов.
@ASGAlex, давайте отследим цепочку вызовов: getUrl вызывает AdminBaseHelper::getViewURL, в которой параметр k=>'{{field_id}}' попадая в функцию http_build_query кодируется в строку "k=%7B%7Bfield_id%7D%7D", а её уже не видет шаблонизатор, рассположенный в js-объекте MultipleWidgetHelper. Таким образом переменная k в URL всегда принимает значение "%7B%7Bfield_id%7D%7D"
Нашел время разобраться с виджетом, спасибо за репорт. Там, похоже, в мультипл режиме совсем всё плохо. Сейчас он не умеет удалять связь с объектами, а в текущей реализации вместо просто удаления связи вообще сносится весь связанный объект :-) Буду копать на досуге...
В теле функции getUrl при передаче параметра k=>'{{field_id}}' происходит экраниранирование значения, из-за чего шаблонизатор не делает замену и на выходе некорректная ссылка $popupUrl.
public function getMultipleEditHtml() { ..... $popupUrl = $linkedHelper::getUrl(array_merge( array( 'popup' => 'Y', 'eltitle' => $this->getSettings('TITLE_FIELD_NAME'), 'n' => $name, 'k' => '{{field_id}}' ), $this->getSettings('ADDITIONAL_URL_PARAMS') ));