Не работают js компоненты в 1С-Битрикс

Рейтинг: 2Ответов: 3Опубликовано: 29.01.2015

Доброго времени всем!

Обнаружилась следующая проблема. В каталоге товаров я хотел добавить рейтинг через блок iblock.vote. Но он у меня упорно не хотел работать. Вернее он подключается и отображается, но никак не работает по назначению. Открыл консоль разработчика - там такие ошибки:

Uncaught ReferenceError: JCCatalogSocnetsComments is not defined
Uncaught ReferenceError: JCCatalogTabs is not defined

После чего я решил проверить другой компонент - catalog.comments. Эффект такой же. То есть надпись - "загрузка комментариев" и все. В консоли точно такая же ошибка. Жалуется на вот такую строчку:

var catalogTabs_soc_comments = new JCCatalogTabs({'activeTabId':'BLOG','tabsContId':'soc_comments','tabList':['BLOG']});

Перевернул весь сайт и все перепроверил, все скрипты и их подключения, но так и не поянл откуда проблема. Гугл тоже не помог. Может кто то сталкивался?

Ответы

▲ 1Принят

Проверьте наличие этих методов в файлах script.js шаблонов bitrix:catalog.comments и bitrix:catalog.tabs.

Ранее встречались подобные ошибки и ответ от разработчиков о исправлении в очередном обновлении.

▲ 2

Аналогичная проблема была, выявил что она основана на композитном кешировании. Из под админа комменарии грузит. При очищении композитного кеша, остальным пользователям единожды отображаются (пока не создана закешированная копия страницы). Как только появляется файл кеша, видно "Загрузка комментариев" и всё. Суть проблемы заключалась в том, что компонент комментариев вызывался в шаблоне компонента catalog.element. Вынес вызов компонента catalog.comments в файл element.php, примерно так получилось:

  1. В шаблоне catalog.element заменяем вызов компонента комментов на ' #REVIEW# '

  2. При выводе компонента catalog.element, забираем ID элемента каталога (возвращается функицей IncludeComponent). Записываем вывод компонента в переменную.

            ob_start();
            $ElementID = $APPLICATION->IncludeComponent(
                "bitrix:catalog.element", '',
                array(
                    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
                    "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                    ...
                ),
                $component
            );
            $content = ob_get_contents();
            ob_end_clean();
    
  3. Записываем в переменную вывод компонента catalog.comments. Там где нужно указать ID элемента, которому выводим комментарии - подставляем $ElementID:

            ob_start();
            $APPLICATION->IncludeComponent(
                "bitrix:catalog.comments", 
                "reviews", 
                array(
                    "IBLOCK_TYPE" => "xmlcatalog",
                    "IBLOCK_ID" => "...",
                    "ELEMENT_ID" => $ElementID,
                    ....
                ),
                false
            );
            $reviewContent = ob_get_contents();
            ob_end_clean();
    
  4. Делаем замену ' #REVIEW ' в выдаче компонента catalog.element на подготовленные комменты, выводим всё что получилось:

            $content = str_replace('#REVIEW#', $reviewContent, $content);
            echo $content;
    
▲ 1

Проверьте, подключили ли в шапке шаблона все, что нужно. В частности

$APPLICATION->ShowHead()