Вывод массива за исключением одного элемента (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 шт):

Автор решения: Firsov36

Самый простой способ, это сделать раздел "Уцененные товары" не активным в админке Битрикса и сбросить кеш меню.

Но если товары из разделы все же нужны в другом месте, то один из "костылей" простых что можно сделать, то дописать код после 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 и просто загружал нужные данные, а не использовал универсальный компонент, который делает кучу лишних запросов.

→ Ссылка
Автор решения: DenDy

Да всё просто!

  1. Создаём свойства для раздела - "Скрывать в меню"
  2. Затем копируем шаблон bitrix:menu.sections
  3. В цикле прячем этот раздел где указанно свойство "Скрывать в меню" = Y

По коду сами разберётесь.

→ Ссылка