Бездельный section php. Подключение файлов в PHP используя include и require. Назначение элемента section

Статья, в которой рассматривается HTML-элемент section из категории sectioning.

Назначение элемента section

Элемент section используется для создания секции в документе, которая группирует некоторый тематический контент вместе. Для каждой секции в документе следует указывать её название (тему). Это, как правило, осуществляется с помощью заголовков (элементов h1 - h6).

Заголовок секции

Содержимое секции…

Элементы section , обычно применяются в следующих случаях:

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

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

Применение элемента section

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

Название статьи

Комментарии

Заголовок комментария

Текст комментария...

Заголовок комментария

Текст комментария...

Название статьи Комментарии Заголовок комментария Заголовок комментария

Например, рассмотрим применение элементов section для создания разделов внутри элемента article:

Название книги

Первая глава

Вторая глава

Третья глава

Приложение A

Приложение B

Вышеприведенный пример будет иметь следующую структуру (outline):

Название книги Первая глава Вторая глава Третья глава Приложение A Приложение B

Ограничения при использовании элемента section

Элемент section в HTML 5 не является универсальным элементом для группировки содержимого, т.е. его не следует использовать для оборачивания любого понравившегося контента. Его основное назначение это добавление семантики в документ и создание его структуры (outline).

Когда автору необходимо сгруппировать контент, только для того, чтобы применить к нему стили или поработать с ним в сценарии JavaScript, ему в этом случае лучше всего будет воспользоваться элементом div . Элемент div в отличие от элемента section , не добавляет семантики в документ и не участвует в создании его структуры (outline).

Отличие между элементами section и article

Элементы section и article хоть и кажутся на первый взгляд очень похожими, но имеют различное семантическое значение. Элемент article предназначен для группирования контента, который представляет собой нечто завершённое, самостоятельное и которое может рассматриваться отдельно от остального содержимого страницы. А элемент section несёт в себе другой семантический смысл, он предназначен для группировки контента, который является составной частью чего-то другого.

Но как автору узнать, что собой представляет некоторый контент на странице? Давайте рассмотрим это на примере фрагмента статьи. Фрагмент - это часть статьи и, следовательно, для группировки его контента необходимо применять элемент section . Но этот же фрагмент, уже оставленный в качестве комментария, будет представлять собой нечто целое, завершенное. Следовательно, в этом контексте для его группировки можно использовать элемент article . Но рассуждать, конечно, можно и наоборот. Поэтому, какой элемент использовать для группировки контента, в большинстве случаев зависит от вашего субъективного мнения как автора. Но самое главное в этом подходе поддерживаться выбранной позиции. Поэтому чем автор будет более последовательным в создании структуры, тем он сможет больше смысла в неё вложить.

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

Для того, чтобы нам не приходилось менять одинаковые части сайта в каждом из файлов страниц, мы можем применять удобные инструкции PHP, которые дают нам возможность подключать файлы с необходимым кодом во все страницы при помощи буквально одной строки кода. Затем, меняя содержимое подключенного файла, мы изменяем код на всех страницах сайта. Удобно, как не посмотри.

Теперь же рассмотрим способы подключения файлов подробнее:

Использование include и require

Принципиальной разницы между этими двумя инструкциями Вам обнаружить не удастся при всем желании, но нюансы присутствуют:

В случае возникновения ошибки во время выполнения команды require парсер получит ответ fatal error и произойдет остановка выполнения кода страницы, в то время как include выдаст лишь warning и выполнение файла продолжится (просто не произойдет подключение файла).

Давайте для лучшего понимания темы разберем простейший пример.

У нас есть наш минисайт в котором хедер и футер одинаковые на всех страницах, а тело документа меняется.

Создаем файлы header.php и footer.php в которые помещаем код, который будет на всех страницах одинаковым, а в файлах index.php и newpage.php выполним подключение статичных частей. В итоге получаем:

Содержимое header.php

< header> < nav> < a href= "newpage1.php" title= "пункт меню" > пункт меню < a href= "newpage2.php" title= "пункт меню" > пункт меню < a href= "newpage3.php" title= "пункт меню" > пункт меню

Содержимое footer.php

< footer> < p> Сделано нами

Содержимое прочих страниц сайта

Минисайт

Много-много полезной информации

В результате загрузки нашей страницы получаем следующую картину:

Как мы видим, все прекрасно работает.

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

В рассмотренном примере мы использовали для подключение хедера require, а футера include. Чем пользоваться на своих сайтах – решать Вам. Как уже говорилось особой разницы между ними нет. Разве что require считается несколько более строгой инструкцией.

По факту строка попросту копирует все содержимое файла, путь к которому мы указываем, внутрь документа в котором находится.

Использование include _once и require _once

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

Предположим это произошло из-за того, что над сайтом работали несколько человек, и когда произошло объединение кодов, то вышел вот такой казус…

Чтобы исключить возможность появления подобных проблем разработчики часто используют инструкции include _once и require _once. Принцип действия у них точно такой же как и у include с require, но если файл в такой инструкции уже был подключен к нашему, то повторного подключения не произойдет.

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

На заметку

  • Чтобы было удобнее различать файлы страниц сайта и файлы их фрагментов, которые мы в них подключаем обычно подключаемым файлам добавляют частичку inc в название. Рассматривая данный подход на нашем примере мы бы из файла header.php получили файл header.inc.php ну и тд. Такой подход способен на порядок упростить понимание структуры сайта в будущем.
  • Код из файла, который мы подключаем, наследует область видимости строки в которой он подключается. Тобишь просто внутри страницы он будет обладать глобальной областью, а внутри функции- локальной.
  • Мы можем использовать include с require где нам угодно. Даже внутри скриптов.
Оглавление документа

1. Функция config_load

Синтаксис:
{config_load file="имя_файла" }

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

Пример:
{config_load file="task.conf"}

2. Функция capture

Синтаксис:

{capture name="имя_блока"
assign="имя_переменной"} ...
{/capture}

Эта функция предназначена для того, чтобы собирать в переменную выходные данные шаблона вместо того, чтобы выводить их на экран.

Все, что находится между {capture name="varname"} и {/capture}, будет записано в переменную с именем varname. Захваченный таким образом контент может быть использован в шаблоне посредством специальной переменной $smarty.capture.varname, где varname - значение, переданное в атрибут name функции capture. Если имя переменной не задано, будет использовано имя default.

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

3. Функция section

Синтаксис:

{section name="имя_секции"
loop="переменная_для_выч-ния_числа_итераций"
[,start="индекс_начальной_позиции"]
[, step="шаг"] [,max="максимум_итераций"]
[,show="показывать_ли_секцию"] }...
{/section}

Секция Section - это цикл для обхода элементов массива. Обязательными являются параметры name, с помощью которого задается имя секции, и loop, который представляет собой переменную, определяющую число итераций цикла.

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

{section name=art loop=$title}

Название: {$title}

{/section}

Пример 15.8. Цикл для обхода элементов массива

4. Функция foreach

Синтаксис:

{foreach from="имя_массива"
item="имя_текущего_элемента"}
... {/foreach}

Кроме того, можно использовать дополнительные атрибуты key - имя ключа для текущего элемента массива и name - имя цикла, с помощью которого можно будет получать доступ к его свойствам. Атрибуты from и item - обязательные.

Циклы foreach являются альтернативой циклам section. Действие функции foreach очень похоже на работу цикла foreach в языке PHP.
{foreach from=$articles item=art}
Title: {$art}

{/foreach}

Пример 15.9. Цикл foreach

Циклы foreach имеют свои собственные свойства. Получить доступ к ним можно таким образом: {$smarty.foreach.foreachname.varname}, где foreachname - это имя цикла, заданное его параметром name, а varname - имя свойства.

5. Оператор if, elseif, else

Синтаксис:

{if выражение} блок_действий
{elseif выражение1} блок_действий1
{else} блок_действий2
{/if}

Действие оператора практически аналогично оператору if...elseif...else языка PHP.

В выражениях могут использоваться следующие операторы сравнения: eq, ne, neq, gt, lt, lte, le, gte, ge, is even, is odd, is not even, is not odd, not, mod, div by, even by, odd by, ==, !=, >, <, <=, >=. Каждый из них обязательно должен быть отделен от окружающих его значений пробелами. В выражениях можно использовать круглые скобки и вызывать php-функции.

{if $name eq «Вася»}
Добро пожаловать, Вася.
{elseif $name eq «Петя»}
Добро пожаловать, Петя.
{else}
Добро пожаловать. А вы кто?
{/if}

Пример 15.10. Операторы if, elseif, else

{* этот пример не будет работать, поскольку не поставлены пробелы вокруг операторов сравнения *}
{if $name=="Вася" || $name=="Петя"}
...
{/if}
Пример 15.11. Неработающий пример

Алгоритм