В шаблон компонента catalog.element выводящий карточку товара. Почему из этого компонента обратная связь криво работает? Если не авторизоваться то хоть вбивай капчу хоть нет все равно реакции 0 и похоже и капча и другие поля закешированные и капча не меняется при обновлении страницы. А из простого инфоблока со вставкой этого модуля из визуального редактора любой страницы index.php все нормально работает.
Создайте в шаблоне компонента файл component_epilog.php и вставьте код обратной связи, должен работать корректно. Если что, попробуйте мой модуль, он точно там работает http://tuning-soft.ru/1c-bitrix/modules/api.feedback/
Спасибо за быстрый ответ (тут с этим проблемы) но я только учусь и никак не понимаю как можно подключить компонент в component_epilog.php модуля component.element (он там есть вот он)
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var array $templateData */
/** @var @global CMain $APPLICATION */
use Bitrix\Main\Loader;
global $APPLICATION;
if (isset($templateData['TEMPLATE_THEME']))
{
$APPLICATION->SetAdditionalCSS($templateData['TEMPLATE_THEME']);
}
if (isset($templateData['TEMPLATE_LIBRARY']) && !empty($templateData['TEMPLATE_LIBRARY']))
{
$loadCurrency = false;
if (!empty($templateData['CURRENCIES']))
$loadCurrency = Loader::includeModule('currency');
CJSCore::Init($templateData['TEMPLATE_LIBRARY']);
if ($loadCurrency)
{
?>
<sc ript type="text/javascript">
BX.Currency.setCurrencies(<? echo $templateData['CURRENCIES']; ?>);
</sc ript>
<?
}
}
if (isset($templateData['JS_OBJ']))
{
?><sc ript type="text/javascript">
BX.ready(BX.defer(function(){
if (!!window.<? echo $templateData['JS_OBJ']; ?>)
{
window.<? echo $templateData['JS_OBJ']; ?>.allowViewedCount(true);
}
}));
</sc ript><?
}
?>
и что бы указать в каком месте шаблона того модуля вставился мой нужный компонент. Тут я просто беру и вставляю в нужный div. Расскажите если не трудно.
Спасибо большое все заработало. Когда не авторизован и обновляю страницу то форма обновляется тоже и не теряет компоновку шаблона. Теперь буду думать как бы аккуратней встроить его а то он встал в самом низу.
Scrooge, а немогли бы вы подсказать заодно и такой момент: Я наконец с помощью интересного видео на ютубе разобрался как делать tabs при помощи подключаемого модуля bitrix:catalog.tabs И все нормально если размещать в отделах tabs все что угодно НО мне нужно разместить подключаемый компонент а вот с этим проблема. Проблема как правильно или возможно ли это, передать элементу массива подключаемый компонент. Вот код который работает и табс создает и размещает все что нужно кроме модулей.
Если я передаю в элемент массива "CONTENT" то что выше без кавычек то компонент работает но отображается выше табс. (см фото Проблема1) Если я ставлю кавычки разные и даже пробую открывающие закрывающие теги php то получается как по фото Проблема2
Все это конечно же я пришу как вы советовали исходя из этого подключаемого модуля в компонент эпилог файле.
Scrooge написал: Все понятно, вызов компонента выводит html и поэтому форма появляется над табами, а во втором случае вызов становится просто стройкой.
Надо сделать вот так:
Код
$main_feedback = '';
ob_start();
$main_feedback = ob_get_contents();
ob_end_clean();
//далее ваш код рабочий
Спасибо. У меня кстати было уже подключено по своему через код сгенерированный Dreamweaver (так как я только учусь) Но я смог подключить все правильно в Битрикс и вот судя по фотке у меня нормально этот модуль жил в табе. По щелчку открывался.
Но вот то что dreamweaver понаписал в сопутствующих файлах css вот там было огромное количество кода.
На счет вашего: Я еще не дошел до изучения ob_start - Включение буферизации вывода поэтому и не мог понять что тут нужно сделать. По тому видео которое объясняло как работают табся в модуле мне было все понятно, тут задай сам ручками, тут впиши. Это передается сюда а то сюда Но видимо подключаемый модуль так просто не передался через другой модуль.
Я так понимаю что после строки ob_start(); Все заносится в какой то буфер а потом переменной $main_feedback = ob_get_contents(); присваивается это содержимое. А так как там код вызова модуля то и переменная будет содержать этот код. Потом идет очистка буфера ob_end_clean(); А далее ключу массива "CONTENT" присваивается переменная $main_feedback
Я то думал что можно присвоить ключу строковое значение со всем содержимым подключаемого модуля.
Ваш код у меня заработал тоже. Вот только непойму почему таб по умолчанию не скрывается когда я присваиваю "ACTIVE" => "N", Я думал это и влияет на изначальное открытие\скрытие таба.
Я так понимаю что после строки ob_start(); Все заносится в какой то буфер а потом переменной $main_feedback = ob_get_contents(); присваивается это содержимое. А так как там код вызова модуля то и переменная будет содержать этот код. Потом идет очистка буфера ob_end_clean(); А далее ключу массива "CONTENT" присваивается переменная $main_feedback
Да, все верно, $APPLICATION->IncludeComponent() - это уже вывод, но бывают такие случаи, когда вывод нужно с помощью буферизации присвоить переменной и использовать ниже по коду. По поводу выполнения кода в строке копайте в сторону eval(), extract(), пример:
Если только изучаете, то никаких кодогенераторов, все вручную, начать писать код лучше в Notepad++, потом, через 1-2 года, когда почувствуется дзен, можно переходить на IDE для ускорения и повышения заработка.
Не, я думаю это не выход так как на этом компоненте основана работа одной из секций шаблона карточки товара. Там выводятся разные комменты и одна из вкладок должна быть открыта что бы была кнопка "Добавить коментарий"