Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Аналогия с LEFTMENU, но по отношению к блоку новостей

00 голосов
7
Привет всем!!!
Опишу проблему сразу.
Есть необходимость выводить анонс новостей в левой колонке, но, они должны выводиться в соответствии с выбраной страницой, т.е. на странице о компании - новости компании, на странице каталога - новости каталога.
Как выбрать информационный блок я понял... а вот как передать переменную "Код информационного блока" в соответствии с видимой страницой, чтобы выводился необходимый блок - увы... может подскажете.

Для аналогии: левое меню выводится если в каталоге необходимой страницы присутствует файл "Меню типа «left»"... соответственно и выводится его содержимое, привязанное к данной странице, но само левое меню прописано в шаблоне, там же в шаблоне мне необходимо прописать и анонс новостей, а вот как это сделать???
С уважением !
Игорь.
спросил 31 Авг, 13 от Hellix (320 баллов)

7 Ответы

00 голосов
Добрый день, Игорь.
Вы можете передать в компонент переменную "Код информационного блока" либо определив ее "вручную" в исходном коде скрипта (перед вызовом header.php):
например,
Код
$NEWS_IBLOCK_ID = 2;

и затем передавать эту переменную в компонент, либо задавать ID инфоблока свойством папки сайта (не страницы!) и получать его с использованием функции $APPLICATION->GetProperty(), чтобы затем передать в компонент.
ответил 31 Авг, 13 от Damani (1,180 баллов)
00 голосов
Воспользовался вторым вариантом... переменная определяется нормально, посредством свойств папки, но вот дальше у меня ничего не получилось, как эту переменную передать??? помогите пожалуйста

[td]
<? echo $APPLICATION->GetProperty("NEWS_IBLOCK_ID");?>// для проверки передачи значения переменной
<?
$APPLICATION->IncludeFile("iblock/news/news_line.php", Array(
"IBLOCK_TYPE"=>"news",//Тип информационного блока (используется только для проверки)
"IBLOCK"=>Array("
??????"),//Код информационного блока
"NEWS_COUNT"=>"20",// Количество новостей в странице
"SORT_BY1"=>"ACTIVE_FROM",// Поле для первой сортировки новостей
"SORT_ORDER1"=>"DESC", // Направление для первой сортировки новостей
"SORT_BY2"=>"SORT", // Поле для второй сортировки новостей
"SORT_ORDER2"=>"ASC", // Направление для второй сортировки новостей
"CACHE_TIME"=>"0", // Время кэширования (0 - не кэшировать)
)
);?>
<? echo $APPLICATION->GetProperty("IBLOCK_TYPE");?>
[/td]
ответил 21 Ноя, 13 от Hellix (320 баллов)
00 голосов
Вам необходимо передавать в параметре "IBLOCK" массив ID инфоблоков, содержимое которых нужно показать:
Код
<? $NEWS_BLOCK_ID = $APPLICATION->GetProperty("NEWS_IBLOCK_ID");?>
<? 
$APPLICATION->IncludeFile("iblock/news/news_line.php", Array( 
"IBLOCK_TYPE"=>"news",//Тип информационного блока (используется только для проверки) 
"IBLOCK"=>Array($NEWS_BLOCK_ID),//Код информационного блока 
"NEWS_COUNT"=>"20",// Количество новостей в странице 
"SORT_BY1"=>"ACTIVE_FROM",// Поле для первой сортировки новостей 
"SORT_ORDER1"=>"DESC", // Направление для первой сортировки новостей 
"SORT_BY2"=>"SORT", // Поле для второй сортировки новостей 
"SORT_ORDER2"=>"ASC", // Направление для второй сортировки новостей 
"CACHE_TIME"=>"0", // Время кэширования (0 - не кэшировать) 
) 
);?> 
ответил 02 Март, 14 от Damani (1,180 баллов)
00 голосов
Спасибо... получилось... но теперь встал вопрос как отобразить все заголовки новостей (необходимо на главной странице)...
поскольку раньше для этого было достаточно написать

"IBLOCK"=>Array(""),//Код информационного блока

то теперь при пустой переменной вообще ничего не показывается... можно это как то сделать через условие IF ELSE ENDIF, т.е. если $NEWS_BLOCK_ID>0 то отображается что то конкретно, а если =0 или ничему то все новости.

Ну что то типа:

<?
$NEWS_BLOCK_ID = $APPLICATION->GetProperty("NEWS_IBLOCK_ID");
?>
<?
$APPLICATION->IncludeFile("iblock/news/news_line.php", Array(
"IBLOCK_TYPE" => "news", //Тип информационного блока (используется только для проверки)


if ("NEWS_BLOCK_ID" < 1)
"IBLOCK" => Array(""), //Код информационного блока
else:
"IBLOCK" => Array($NEWS_BLOCK_ID),//Код информационного блока
endif;


"NEWS_COUNT" => "20", // Количество новостей в странице
...)
);?>


С уважением.
Игорь.
ответил 22 Июнь, 14 от Hellix (320 баллов)
00 голосов
Задайте в качестве параметра массив всех инфоблоков, новости из которых необходимо вывести:
Код
"IBLOCK"=>Array($NEWS_BLOCK_ID1, $NEWS_BLOCK_ID2, $NEWS_BLOCK_ID3, ...),
ответил 21 Окт, 14 от Damani (1,180 баллов)
00 голосов
Извините, но я совсем не силен в PHP, а потому нельзя ли показать код применительно к моему случаю , поскольку для меня понятие "Задайте в качестве параметра массив всех инфоблоков" честно говоря ни о чем не говорит...
Дико извиняюсь за свое ламерство.
ответил 20 Фев, 15 от Hellix (320 баллов)
00 голосов
Когда Вы задаете в качестве параметра компонента
"IBLOCK"=>Array($NEWS_BLOCK_ID), подразумевается, что, скажем, $NEWS_IBLOCK_ID = 2;
Т.е. выбираются все элементы инфоблока с ID=2.
Если же Вам нужно выбрать элементы из всех инфоблоков новостей, задайте параметром при вызове:
"IBLOCK"=>Array(2,5,7),
где 2, 5 и 7 - ID инфоблоков, содержащих новости, элементы которых Вам необходимо вывести.
ответил 30 Май, 15 от Damani (1,180 баллов)