Спасибо, Николай, но не работает, вернее работает, но криво, браузер как выяснилось подставляет закрывающие теги [B]</li>[/B] там где они не выводятся.
Понял когда добавил перед открывающим и закрывающим [B]li[/B] тег [B]div[/B], мне нужно чтобы контент в [B]li[/B] еще дивом обрамлялся. Добавил тег и все нафиг поехало :)
Т.е. чтобы протестить правильно ли работает данный код, нужно тестить в какой-нибудь [B]IDE[/B] чтобы она выводила "реальный" код, без исправлений его браузерами.
Я [B]IDE[/B] не пользуюсь и дабы сэкономить время решил потестить вывод просто добавив перед открывающими и закрывающими тегами слова [B]"start"[/B] [B]"end"[/B], т.е. слова рядом с тегами у нас отобразятся в браузере там где эти теги вывел наш код шаблона, а без слов - там где нам уже браузер доставил теги.
вот что получилось когда я Ваш код потестил подобным образом:
Шаблон с добавленными словами:
[CODE]<div class="catalog-section-list">
<ul>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]){
echo "<ul>";
}elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]){
echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
}else{
echo'end</li>';
}
$CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>
<li>start<a href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?> (<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
<?endforeach?>
</ul>
</div>[/CODE]То что вывел браузер ([B]Firefox 3.6.3[/B]):[CODE]<ul>
end<li>start<a href="#">раздел 1</a>
<ul>
<li>start<a href="#">подраздел 1 раздела 1</a>end</li>
<li>start<a href="#">подраздел 2 раздела 1</a>end</li>
<li>start<a href="#">подраздел 3 раздела 1</a></li>
</ul>
</li>
<li>start<a href="#">раздел 2</a>end</li>
<li>start<a href="#">раздел 3</a>end</li>
<li>start<a href="#">раздел 4</a></li>
</ul>[/CODE]Как видно некоторые закрывающие теги в коде не генерируются и браузер добавляет их сам (отсутствует "end")
Вполне научным методом тыка :) я добавил в некоторые места вывод еще закрывающих тегов [B]li[/B]:
[CODE]<div class="catalog-section-list">
<ul>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"]){
echo "<ul>";
}elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"]){
echo str_repeat("end</li></ul>end</li>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
}
else {
echo'end</li>';
}
$CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>
<li>start<a href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?> (<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
<?endforeach?>
end</li></ul>
</div>[/CODE]Получилось почти то, но не совсем,:[CODE]<ul>
end <li>start<a href="#">раздел 1</a>
<ul>
<li>start<a href="#">подраздел 1 раздела 1</a>end</li>
<li>start<a href="#">подраздел 2 раздела 1</a>end</li>
<li>start<a href="#">подраздел 3 раздела 1</a>end</li>
</ul>end
</li>
<li>start<a href="#">раздел 2</a>end</li>
<li>start<a href="#">раздел 3</a>end</li>
<li>start<a href="#">раздел 4</a>end</li>
</ul>[/CODE]вот этот код:[CODE] else {
echo'end</li>';
}[/CODE] выводит нам закрывающий тег в самом начале открытия самого родительского ul, браузер этот закрывающий тег рубит, так как открывающего нет, это видно по проверочному слову [B]"end"[/B] :)
Это условие добавляет закрывающий тег и в "подсписки" поэтому я не додумался как запрограммировать чтобы оно не пихало закрывающий тег в самое начало самого родительского [B]ul[/B].
Эх помог бы кто добить программную часть.