Беспокойный section php. Как использовать секционные элементы HTML5

). Каждый тэг {section} должен иметь пару {/section} . Обязательными параметрами являются name и loop . Имя цикла {section} может быть любым, состоящим из букв, цифр и знаков подчеркивания. Циклы {section} могут быть вложенными и имена вложенных {section} должны быть уникакльными между собой. Переменная loop (обычно - массив значений) определяет количество итераций цикла. При печати переменных внутри секции, имя секции должно быть указано рядом с именем переменной внутри квадратных скобок . {sectionelse} выполняется в том случае, если параметр loop не содержит значений.

Имя атрибута Тип Обязателен По умолчанию Описание
name string Да n/a Название секции
loop mixed Да n/a Значение, определяющее количество итераций цикла.
start integer Нет 0 Индекс позиции, с которой будет начинаться цикл. Если значение отрицательное, то начальная позиция вычисляется от конца массива. Например, если в переменной цикла 7 элементов и значение атрибута start равно -2, то начальный индекс будет 5. Неверные значения (значения, вне массива) автоматически обрезаются до ближайшего верного значения.
step integer Нет 1 Значение шага, которое используется для прохода по массиву. Например, step=2 указывает обход массива по элементам 0,2,4... Если шаг отрицателен, то обход массива будет производится в обратном направлении.
max integer Нет 1 Максимальное количество итераций цикла.
show boolean Нет true Указывает, показывать или нет эту секцию

Note

Начиная с версии Smarty 1.5.0, синтаксис переменных свойств сессий был изменен с {%sectionname.varname%} на {$smarty.section.sectionname.varname}. Старый синтаксис всё ещё поддерживается, но вы увидите лишь примеры нового синтаксиса.

index используется для отображения текущего индекса массива, начиная с нуля (или с атрибута start, если он был указан) и увеличиваясь на единицу (или на значение атрибута step, если он был указан).

Техническое Замечание

Если атрибуты step и start не указаны, то index аналогичен атрибуту секции iteration, кроме того, что начинается с 0, а не с 1.

iteration используется для отображения текущего номера итерации цикла.

Note

Это значение не зависит от свойств start, step и max, в отличие от свойства index . Кроме того, итерации начинаются с единицы, а не с нуля, как индексы. rownum - это синоним к свойству iteration, они работают одинаково.

Example 7.38. свойство {section} iteration

assign("custid",$id); ?> {section name=cu loop=$custid start=5 step=2} iteration={$smarty.section.cu.iteration} index={$smarty.section.cu.index} id={$custid}
{/section}

Результат выполнения данного примера:

Iteration=1 index=5 id=3005
iteration=2 index=7 id=3007
iteration=3 index=9 id=3009
iteration=4 index=11 id=3011
iteration=5 index=13 id=3013
iteration=6 index=15 id=3015

Этот пример использует свойство iteration для вывода заголовка таблицы через каждые пять строчек (использует {if} с оператором mod - остаток от деления).

{section name=co loop=$contacts} {if $smarty.section.co.iteration % 5 == 1} {/if} {/section}
Name>HomeCellEmail
view {$contacts.name} {$contacts.home} {$contacts.cell} {$contacts.email}


Из данной статьи вы узнаете как можно построить навигационную цепочку зная один лишь символьный код раздела.

Как по символьному коду раздела построить хлебные крошки в Битриксе

Перед прочтением данной статьи советую почитать Как добавить в хлебные крошки название . Прочитали? Тогда идем дальше.

В старых компонентах бывали случаи, когда в массиве хранится только символьный код раздела. Данная переменная называлась .

Если на вашем сайте символьные коды разделов уникальны (что рекомендуется всегда выставлять в настройках инфоблока), то проблем не будет. Для начала находим файл section.php вашего компонента.

$rsSect = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "=CODE" => $arResult["VARIABLES"]["SECTION_CODE"]), false, array("ID", "NAME", "UF_TEXT_TOP", "DEPTH_LEVEL", "SECTION_PAGE_URL")); if ($arSect = $rsSect->GetNext()) { $SEC_LVL = $arSect["DEPTH_LEVEL"]; $SEC_NAME = $arSect["NAME"]; $SEC_URL = $arSect["SECTION_PAGE_URL"]; }

Обратите внимание на строчку ‘=CODE’ => $arResult[‘VARIABLES’][‘SECTION_CODE’] . Также, мы используем if , вместо привычного цикла while, т.к. нам нужны данные только по одному разделу.

Записываем 3 переменные, которые нам понадобятся:
— уровень вложенности, DEPTH_LEVEL
— имя, NAME
— ссылка на раздел, SECTION_PAGE_URL

ВАЖНО . Перед следующим этапом отключите в своем компоненте настройку «добавлять раздел\инфоблок в цепочку навигации»

В самом конце файла section.php добавляем код:

= 2) { $rsSect = CIBlockSection::GetList(array(), array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "=CODE" => $arResult["VARIABLES"]["SECTION_CODE"]), false, array("ID", "NAME", "SECTION_PAGE_URL")); while ($arSect2 = $rsSect->GetNext()) { if (strstr($curSectionURL, $arSect2["SECTION_PAGE_URL"])) { $SEC_NAME = $arSect2["NAME"]; $SEC_URL = $arSect2["SECTION_PAGE_URL"]; break; } } $result = array(); $ibsTreeResource = CIBlockSection::GetNavChain(false, $arSect2["ID"], array("ID", "NAME")); $c = 0; while($sectionItem = $ibsTreeResource->Fetch()){ $result[$c]["NAME"] = $sectionItem["NAME"]; $res = CIBlockSection::GetByID($sectionItem["ID"]); if($ar_res = $res->GetNext()) { $url = $ar_res["SECTION_PAGE_URL"]; } $result[$c]["URL"] = $url; $c++; } foreach ($result as $arItem) { $APPLICATION->AddChainItem($arItem["NAME"], $arItem["URL"]); } } else { $APPLICATION->AddChainItem($SEC_NAME, $SEC_URL); } ?>

При помощи CIBlockSection::GetNavChain выстраиваем полный путь до родительского раздела (если это подраздел), и добавляем через цикл в цепочку навигации Название и Ссылку . Если эже это раздел 1-го уровня, то просто добавляем его Название и Ссылку .

Например, наш код равен armstrong . Полученный результат выглядит приблизительно следующим образом:
Каталог / Офисные светодиодные светильники / Светильники Армстронг

URL при этом имеет вид:

/catalog/ofisnye-svetilniki/armstrong/

Ссылка на Каталог проставляется сама.
Офисные светодиодные светильники — это главный раздел.
Светильники Армстронг — раздел, в котором мы сейчас находимся. Компонент хлебных крошек не ставит ссылку на него.

Вот и всё, надеюсь у вас всё получилось:). ПС код не идеален и применялся для старых проектов, его можно улучшить.

Данный материал является вольным переводом статьи:
Ire Aderinokun SECTIONING CONTENT IN HTML5 - DIV OR SECTION OR ARTICLE?

HTML5 стал важной ступенькой для концепции семантического кода. Он отстаивает идею, что документ должен быть структурирован и используемые вами теги должны передавать смысл.

Помимо прочего, теги

и
были введены чтобы сделать области с контентом более значимыми, чем просто
. Но в каком случае мы должны использовать эти новые элементы и когда обычный
предпочтительнее?

Обзор элементов

DIV

Элемент

является элементом общего назначения. Но это не имеет особого смысла. Его цель заключается в группировке контента, который семантически не связан между собой. По сути, это совершенно бессмысленно для скрин ридеров, поэтому пользоваться данным методом нужно с осторожностью.

Элемент

в основном используется для группировки контента и и позиционирования при помощи CSS. Например, как контейнер для других элементов.

SECTION

Элемент

является немного более конкретным, чем элемент
. Он применяется к общему разделу контента, который может быть сгруппирован семантически.

Главное правило заключается в том, что элемент section уместно использовать только тогда, когда его содержимое может быть явно сгруппировано.

Поскольку содержимое тега

имеет смысл только когда сгруппировано вместе, оно должно иметь «тему». «Тема» должна быть определена путем включения заголовка в содержимое, часто сразу после открывающего тега.

Subscribe to the Newsletter


ARTICLE

Тег

является даже более конкретным, чем тег
. Он так же применяется к семантически связанному разделу контента и должен иметь заголовок. Тем не менее его содержимое должно быть самодостаточным. Это означает что будучи изолированным от остальной части страницы оно по прежнему должно иметь смысл.

Цель тега

в маркировке контента, например, в разметке блога.


Article Title



Quae similitudo in genere etiam humano apparet. Est, ut dicis, inquam...


DIV или SECTION или ARTICLE?

Так какой из тегов когда нужно использовать?

Если содержимое не является семантически связанным, стоит использовать

. Если семантически связанное содержимое может быть автономным, то используйте тег
. В противном случае используйте
.

Комбинирование элементов

Попытаемся объединить различные элементы вместе.

Article в article

Элементы article можно вкладывать друг в друга. И хотя они по прежнему являются самодостаточными, предполагается, что содержимое внутреннего

связано с внешним.

Article Title

John Smith

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Another Article

Jane Doe

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.


Article в section

Мы можем так же несколько тегов

разместить внутри
. Хорошим примером будет являться страница блога, на которой отображаются последние сообщения. Контейнером для всех последних постов будет тег
, в то время как каждый отдельный отрывок записи может быть размечен тегом
.

Latest Blog Posts

Blog Post Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Blog Post Title

Lorem ipsum dolor sit amet, consectetur adipiscing elit.


Section в article

Каждый индивидуальный тег

может содержать в себе раздел section. Например, данный пост мог бы быть размечен следующим образом


Sectioning Content in HTML5 - div or section or article?


Overview of the Elements



div


The div element is the most general purpose element.




Семантические элементы HTML5 доступно описывают свой смысл или назначение как для браузеров, так и для веб-разработчиков.
До появления стандарта HTML5 вся разметка страниц осуществлялась преимущественно с помощью элементов

, которым присваивали классы class или идентификаторы id для наглядности разметки (например,