Как реализовать вывод компонента внутри комплексного компонента новостей?
Суть вопроса.
Есть каталог (комплексный компонент каталога), я сделал выборку свойств каталога через компонент (Top элементов каталога). Так же на сайте куча статей реализованных на компоненте (Комплексный компонент новостей). Господа как Top элементов каталога вставить в news.detail? насколько я знаю битрикс не разрешает вывод компонента в компоненте, но гуру думаю знают как это сделать.
P.s. создание свойства на основе привязки к элементу не пойдет, в каталоге куча свойств, выборка делалась по жеским критериям.
Алексей, я не работал component_epilog.php, какой там код вызова будет? или просто вызов компонента туда воткнуть и все? можете немного подробнее подсказать
Elios: Да, просто создаёте файл component_epilog.php, вставляете в него код вызова компонента top. Всё что находится в component_epilog.php будет выполнено минуя кэш родительского компонента. В этом файле будут доступны значения arResult и arParams.
Также на забудьте в начало добавить if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();, чтобы component_epilog.php нельзя было отдельно вызвать.
Elios: так если никак не связаны, то как "У меня на разных страницах нужно делать разные выборки должны быть" ? Если на разных страницах должны выводиться разные данные, то для них на разных страницах должны быть разные условия.
вопрос в том и состоит как эти условия реализовать. Можно конечно пойти по пути джидая и сделать привязку элементов из этого ИБ (т.е каталога). Но там не будет сортировки, и данные будут статичны.
У меня каталог проектов. Статьи ммм, их много и они разные. Например статья об определенном стиле дома. Вот я бы хотел вывести этот определенный стиль из каталога в эту статью. Т.е мне нужна возможность вставки компонента в новость (news.detail). В каталоге проектов целая куча свойств около 40. Мне бы хотелось выборку вставлять туда куда мне нужно. выборку я делал через top элементов каталога, путем фильтрации и сортировки. Автоматически этого не должно происходить. Только там где я вставлю вызов компонента, ну если это вообще возможно. Или что то может в сам ИБ новостей добавить какое-то свойство. Блин целая проблема получилось.
<?
GLOBAL $arrFilterTop;
$elementID = 159;
$arrFilterTop = array(
'PROPERTY_474' => $elementID,
);
?>
вот код который отфильтровывает, стиль задан в свойстве списком. получается я выбираю id свойства и id свойства из списка. Получается что всего 1 свойство.
Elios: св-во PROPERTY_474 имеет тип "список" или "привязка к элементу в виде списка", потому что судя по коду у вас второй вариант, что облегчает задачу.
Elios: В ИБ "статей" добавляете такое же св-во выпадающий список как и в "проектах", в него добавляете те же значения. Далее в статьях указываете в списке "стиль". В component_epilog.php значение этого св-ва передаёте как параметр фильтрации в компонент top. Только фильтровать нужно по значению св-ва списка (т.е. PROPERTY_SID_VALUE).
Алексей Емельянов: Алексей простите за нубство. Не совсем понял, постараюсь описать что понял, а что нет.
1) В ИБ новостей создаю свойство (список) со стилями.
2) В статьях где нужно я проставляю релевантный стиль. (я так понимаю в шаблоне новости выводить стиль не обязательно?)
3)Как в component_epilog.php передать параметр фильтрации top?
Не совсем понимаю как в этой схеме у меня появится список необходимых мне по критериям проектов? Или свойство списка в ИБ новостей мне делать привязку в виде списка? тут немного логичнее.
1.У вас должно быть одинаковое св-во (список) со стилями и в ИБ новостях, и в ИБ проектах. В этих св-вах должен быть одинаковый перечень значений. (именно значений! не XML_ID)
2.В новости выбираете определённый стиль, сохраняете её.
3.В настройках компонента news добавляете новое св-во, что бы оно выбиралось из ИБ
4.В component_epilog.php смотрите чтобы в массиве arResult приходило это значение, если его нет см. п.3
5.В component_epilog.php, значение св-ва списка из новости передаёте как дополнительный параметр для фильтрации компонента top.
Если сайт работает в UTF-8, тогда component_epilog.php нужно перевести в эту же кодировку.