Вывод массива за исключением одного элемента (php)
Есть вот такой код
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$aMenuLinksExt = array();
if(CModule::IncludeModule('iblock'))
{
$arFilter = array(
//"TYPE" => "catalog",
"ID" => CATALOG_ID,
);
$dbIBlock = CIBlock::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), $arFilter);
$dbIBlock = new CIBlockResult($dbIBlock);
if ($arIBlock = $dbIBlock->GetNext())
{
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_".$arIBlock["ID"]);
if($arIBlock["ACTIVE"] == "Y")
{
$aMenuLinksExt = $APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
"IS_SEF" => "Y",
"SEF_BASE_URL" => "",
"SECTION_PAGE_URL" => $arIBlock['SECTION_PAGE_URL'],
"DETAIL_PAGE_URL" => $arIBlock['DETAIL_PAGE_URL'],
"IBLOCK_TYPE" => $arIBlock['IBLOCK_TYPE_ID'],
"IBLOCK_ID" => $arIBlock['ID'],
"DEPTH_LEVEL" => "2",
"CACHE_TYPE" => "N",
), false, Array('HIDE_ICONS' => 'Y'));
}
}
if(defined("BX_COMP_MANAGED_CACHE"))
$GLOBALS["CACHE_MANAGER"]->RegisterTag("iblock_id_new");
}
foreach ($aMenuLinksExt as $key=>$item){
if(strpos($item[1],'%2F')){
$aMenuLinksExt[$key][1] = str_replace('%2F','/',$item[1]);
}
}
// \Pai\Tools\CDev::pre($aMenuLinksExt);
$aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt);
?>
он выводит все пункты меню, надо убрать один элемент "Уцененные товары" либо его захайдить, либо вообще не выводить
Ответы (2 шт):
Самый простой способ, это сделать раздел "Уцененные товары" не активным в админке Битрикса и сбросить кеш меню.
Но если товары из разделы все же нужны в другом месте, то один из "костылей" простых что можно сделать, то дописать код после foreach ($aMenuLinksExt as $key=>$item){ , который смотрит, что название совпадает с название "Уцененные товары" и убирает данные из массива.
if($item[0] == "Уцененные товары")
{
unset($aMenuLinksExt[$key]);
continue;
}
т.е. блок foreach получится таким:
foreach ($aMenuLinksExt as $key=>$item){
if($item[0] == "Уцененные товары")
{
unset($aMenuLinksExt[$key]);
continue;
}
if(strpos($item[1],'%2F')){
$aMenuLinksExt[$key][1] = str_replace('%2F','/',$item[1]);
}
}
По хорошему я бы весь этот код переписал под d7 и просто загружал нужные данные, а не использовал универсальный компонент, который делает кучу лишних запросов.
Да всё просто!
- Создаём свойства для раздела - "Скрывать в меню"
- Затем копируем шаблон bitrix:menu.sections
- В цикле прячем этот раздел где указанно свойство "Скрывать в меню" = Y
По коду сами разберётесь.
