Помогите пожалуйста решить некоторые проблемы в шаблоне меню. Я написал шаблон вывода меню (правда немного кривовато :) ) . Суть у меня такая есть пользовательское поле категории для проверки выводить пункт меню или нет. Проблема состоит в том что если я не вывожу родительский пункт меню, то его под категории выводятся в предыдущем пункте меню. Как решить эту проблему??? Помогите плз.
Я себе представляю это так. Сделать проверку если родительский эл. не выводится то не выводить его дочерние, но моих знаний в пхп не достаточно.
А вот и сам код (Не ругайте только когда увидите :( )
[CODE]<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
if(CModule::IncludeModule("iblock")){
$ar_result=CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>"3"), false, Array("UF_*","SECTION_PAGE_URL"));
while($res=$ar_result->GetNext()){ $arr[$res["SECTION_PAGE_URL"]] = $res["UF_MAIN_MENU"];}
}
?>
<div class="nav-sub">
<? if (!empty($arResult)):?>
<ul>
<?
$previousLevel = 0;
$arIt = Array();
global $arIt;
static $ii=-1;
foreach($arResult as $arItem):?>
<? foreach ($arr as $key => $val):
if ($key==$arItem["LINK"]):
if ($val!=1):?>
<? if ($arItem["DEPTH_LEVEL"] =="1"){ $arIt[] = $arItem; $ii++;} if($arItem["DEPTH_LEVEL"] =="2"){$arIt[$ii]["LIST_S"][] = $arItem;} ?>
<? if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
<? endif?>
<? if ($arItem["IS_PARENT"]):?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="<?=$arItem["LINK"]?>" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>"><?=$arItem["TEXT"]?></a>
<ul>
<? else:?>
<li<? if ($arItem["SELECTED"]):?> class="item-selected"<? endif?>><a href="<?=$arItem["LINK"]?>" ><?=$arItem["TEXT"]?></a>
<ul>
<? endif?>
<? else:?>
<? if ($arItem["PERMISSION"] > "D"):?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="<?=$arItem["LINK"]?>" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>"><?=$arItem["TEXT"]?></a></li>
<? else:?>
<? if($arItem["DEPTH_LEVEL"] != "3" && $val!="N"):?><li<? if ($arItem["SELECTED"]):?> class="item-selected"<? endif?>><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li><?endif?>
<? endif?>
<? else:?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<? else:?>
<li><a href="" class="denied" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<? endif?>
<? endif?>
<? endif?>
<? $previousLevel = $arItem["DEPTH_LEVEL"];?>
<? endif;?>
<? endif;?>
<? endforeach;?>
<? endforeach?>
<? if ($previousLevel > 1)://close last item tags?>
<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<? endif?>
<?foreach($arResult as $itemIdex => $arItem):?>
<? if ($arItem["ITEM_TYPE"] == "P"):?>
<li<?if ($itemIdex == $lastSelectedIndex):?> class="current"<?endif;?>><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<? endif ?>
<?endforeach;?>
</ul>
</div>
<div class="menu-clear-left"></div>
<? endif?>
[/CODE]
Я себе представляю это так. Сделать проверку если родительский эл. не выводится то не выводить его дочерние, но моих знаний в пхп не достаточно.
А вот и сам код (Не ругайте только когда увидите :( )
[CODE]<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
if(CModule::IncludeModule("iblock")){
$ar_result=CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>"3"), false, Array("UF_*","SECTION_PAGE_URL"));
while($res=$ar_result->GetNext()){ $arr[$res["SECTION_PAGE_URL"]] = $res["UF_MAIN_MENU"];}
}
?>
<div class="nav-sub">
<? if (!empty($arResult)):?>
<ul>
<?
$previousLevel = 0;
$arIt = Array();
global $arIt;
static $ii=-1;
foreach($arResult as $arItem):?>
<? foreach ($arr as $key => $val):
if ($key==$arItem["LINK"]):
if ($val!=1):?>
<? if ($arItem["DEPTH_LEVEL"] =="1"){ $arIt[] = $arItem; $ii++;} if($arItem["DEPTH_LEVEL"] =="2"){$arIt[$ii]["LIST_S"][] = $arItem;} ?>
<? if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel):?>
<?=str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"]));?>
<? endif?>
<? if ($arItem["IS_PARENT"]):?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="<?=$arItem["LINK"]?>" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>"><?=$arItem["TEXT"]?></a>
<ul>
<? else:?>
<li<? if ($arItem["SELECTED"]):?> class="item-selected"<? endif?>><a href="<?=$arItem["LINK"]?>" ><?=$arItem["TEXT"]?></a>
<ul>
<? endif?>
<? else:?>
<? if ($arItem["PERMISSION"] > "D"):?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="<?=$arItem["LINK"]?>" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>"><?=$arItem["TEXT"]?></a></li>
<? else:?>
<? if($arItem["DEPTH_LEVEL"] != "3" && $val!="N"):?><li<? if ($arItem["SELECTED"]):?> class="item-selected"<? endif?>><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li><?endif?>
<? endif?>
<? else:?>
<? if ($arItem["DEPTH_LEVEL"] == 1):?>
<li><a href="" class="<? if ($arItem["SELECTED"]):?>root-item-selected<? else:?>root-item<? endif?>" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<? else:?>
<li><a href="" class="denied" title="<?=GetMessage("MENU_ITEM_ACCESS_DENIED")?>"><?=$arItem["TEXT"]?></a></li>
<? endif?>
<? endif?>
<? endif?>
<? $previousLevel = $arItem["DEPTH_LEVEL"];?>
<? endif;?>
<? endif;?>
<? endforeach;?>
<? endforeach?>
<? if ($previousLevel > 1)://close last item tags?>
<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<? endif?>
<?foreach($arResult as $itemIdex => $arItem):?>
<? if ($arItem["ITEM_TYPE"] == "P"):?>
<li<?if ($itemIdex == $lastSelectedIndex):?> class="current"<?endif;?>><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<? endif ?>
<?endforeach;?>
</ul>
</div>
<div class="menu-clear-left"></div>
<? endif?>
[/CODE]