Спасибо, Николай, но не работает, вернее работает, но криво, браузер как выяснилось подставляет закрывающие теги
</li> там где они не выводятся.
Понял когда добавил перед открывающим и закрывающим
li тег
div, мне нужно чтобы контент в
li еще дивом обрамлялся. Добавил тег и все нафиг поехало
Т.е. чтобы протестить правильно ли работает данный код, нужно тестить в какой-нибудь
IDE чтобы она выводила "реальный" код, без исправлений его браузерами.
Я
IDE не пользуюсь и дабы сэкономить время решил потестить вывод просто добавив перед открывающими и закрывающими тегами слова
"start" "end", т.е. слова рядом с тегами у нас отобразятся в браузере там где эти теги вывел наш код шаблона, а без слов - там где нам уже браузер доставил теги.
вот что получилось когда я Ваш код потестил подобным образом:
Шаблон с добавленными словами:
Код |
---|
<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> |
То что вывел браузер (
Firefox 3.6.3):
Код |
---|
<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> |
Как видно некоторые закрывающие теги в коде не генерируются и браузер добавляет их сам (отсутствует "end")
Вполне научным методом тыка
я добавил в некоторые места вывод еще закрывающих тегов
li:
Код |
---|
<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> |
Получилось почти то, но не совсем,:
Код |
---|
<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> |
вот этот код:
Код |
---|
else {
echo'end</li>';
} |
выводит нам закрывающий тег в самом начале открытия самого родительского ul, браузер этот закрывающий тег рубит, так как открывающего нет, это видно по проверочному слову
"end" Это условие добавляет закрывающий тег и в "подсписки" поэтому я не додумался как запрограммировать чтобы оно не пихало закрывающий тег в самое начало самого родительского
ul.
Эх помог бы кто добить программную часть.