Битрикс почему не под админом ломается форма комментариев?
Под админом все работает, стоит выйти - ошибка в консоли TypeError: BX.viewElementBind is not a function at HTMLDocument.
TypeError: window.BXEditor is not a constructor
Это для компонентов forum.topic.reviews (комментарии к товару) и вложенного в него bitrix:main.post.form (тот самый визивиг редактор, к-й выдает ошибку).
С вложенными компонентами в карточке уже была проблема со скриптами и стилями, решилось добавлением параметра $component в IncludeComponent(). Но здесь другое.
Айнур Валиев, значит надо вынести как-то компонент комментариев (куда именно зависит от дизайна и от текущей структуры проекта).
Или подключить принудительно его JS.
Вообще $component в IncludeComponent(). должен помогать в таких случаях. Может где-то не хватает в цепочке вызовов?
Александр Филиппенко, просто там 3 уровеня вложенности
1.bitrix:catalog.element
2. nmsp:reviews.list (кастомный, вывожу отзывы)
3. bitrix:forum.topic.reviews (комменты к отзывам)
может структура папок не та? битрикс же любит матрешки - внутри компонента еще компонент. А у меня все в отд. папках лежат. Не по аналогии комплексного.
Айнур Валиев, ну правильно. Он один раз отработал, вывод записался в кеш среднего компонента этой цепочки, и при последующих обращениях nmsp:reviews.list вместо того чтобы подключать шаблон, находить там вызов компонента bitrix:forum.topic.reviews, и обрабатывать его, тупо брал кусок html из кеша и отдавал.
Айнур Валиев, здравствуйте!
Бьюсь с этой же задачей уже неделю. Прошу помощи.
В комплексном компоненте catalog менял шаблон компонента catalog.element, где вызываю компонент forum.topic.reviews с указанием на $component. При отключенном автокешировании всё работает как надо, при включенном, получаю ошибку "BX.viewElementBind is not a function"
Вы пишете
проблема решилась вынесением вложенных компонентов на один уровень с catalog.element
.
Пожалуйста, поясните подробнее, какие именно компоненты/шаблоны и куда выносили.
Александр, вывод компонента catalog.element кешируется целиком, соответственно, подключённые в его шаблоне компоненты не будут вызваны и их код не выполнится.
Если отзывы в самом низу шаблона, их нужно вынести в element.php комплексного компонента catalog. Тогда они обработаются отдельно от catalog.element, и код подключения скриптов выполнится.
Я вас понял. Вы предлагаете менять компонент. Я не настолько компетентен в PHP и Битриксе, чтобы делать это уверенно, поэтому все кастомизации делаю в шаблонах. Кроме того, мне важно развитие компонент, а кастомизированные компоненты не обновляются.
Александр, нет, я не предлагаю менять компонент, только шаблоны. Кусок кода с вызовом forum.topic.reviews (о нём же речь?) вырезать из template.php компонента catalog.element, и.вставить в element.php комплексного компонента catalog.
А статьи 2010 года, я не знаю как сейчас, но проблема точно была актуальная в 2018.
Точнее так: стили и скрипты дочернего компонента действительно подключаются, но только на 1 уровень вглубь. А нужно на 2. Собственно суть решения в том, чтобы подключать 2 компонента на 1 уровене вложенности.
Александр, $component добавлял 4-м параметром, не помогло.
Если возможно, поясните, пожалуйста, в двух словах как используется шаблон element.php внутри комплексного компонента catalog, если вся разметка страницы хранится в шаблоне template.php компонента catalog.element? Я не понимаю, куда в element.php мне вставить вызов forum.topic.reviews, если вся разметка для него находится template.php
Александр, у вас есть страница где подключен комплексный компонент. Если запрос в соответствии с правилами роутинга попадает на эту страницу, и определяется как детальная страница товара, то используется файл element.php из шаблона комплексного компонента. А в нём уже подключается catalog.element. Там может быть ещё какая-то разметка, может не быть, но нужно вставить подключение проблемного компонента туда.
Теперь, если позволите, вопрос, как вставить компонент forum.topic.reviews в element.php (компонент catalog) так, чтобы результат его вызова попал в нужное место шаблона template.php (компонент catalog.element)?
Александр, вообще для этого есть отложенный вывод https://dev.1c-bitrix.ru/api_help/main/reference/c...
Но с кешем оно тоже не работает)
Мне подошло, потому что у меня отзывы были в самом конце шаблона по дизайну.
Возможно у вас получится перетасовать вёрстку так, чтобы из element.php собирался нужный html в нужном порядке.
Большое спасибо за подробные объяснения, вы очень помогли!
У меня вёрстка с вкладками (tabs) на основе шаблона bootstrap_v4, отзывы на одной из вкладок.
В общем пока я придумал костыль - вызывать forum.topic.reviews два раза, но результат первого вызова из element.php прятать в комментарии HTML, а второй вызов из template.php помещать в нужно место шаблона.
Понимаю, что не оптимально (хотя сжатие html при повторе фрагментов, полагаю уменьшит эту неоптимальность), но всё равно сильно быстрее, чем без кеширования вовсе.
Александр, можно сделать ещё лучше, найти какой js файл не подключается с кешем, и подключить его где-то в другом месте, чтобы он точно был, по идее в element.php должно сработать. Тогда не будет двойного рендеринга компонентов, и двойных походов в базу при отсутствии кеша.
Александр, идея хорошая, пытался найти, но нашел только список js-файлов /bitrix/js/fileman/html_editor/html-XXX помимо скриптов компонента forum.topic.reviews, который, кстати, подключается и при кешировании. Но дело похоже не в них.
У меня подозрение, что недостаёт какого-то скрипта html-редактора, который включаются внутрь какого-нибудь условного core.js.