Безгрешен раздел php. Включването на файлове в PHP чрез include и require

Когато създаваме сайтове за самостоятелно писане (без да използваме рамки, CMS и други модерни неща, които улесняват живота на уеб разработчиците), ние сме изправени пред проблема с редактирането на сайта, когато има много страници.

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

Сега нека разгледаме по -отблизо как да свържете файлове:

Използването включва и изисква

Няма да можете да намерите фундаментална разлика между тези две инструкции с цялото си желание, но има нюанси:

Ако възникне грешка по време на изпълнението на командата require, анализаторът ще получи фатален отговор за грешка и изпълнението на кода на страницата ще спре, докато include ще издаде само предупреждение и изпълнението на файла ще продължи (файлът просто няма да бъде свързан).

Нека вземем прост пример за по -добро разбиране на темата.

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

Създаваме файлове 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 изисква сървър с неговата поддръжка за PHP, за да работи. Ако създадете уебсайт в обикновена папка на компютър, нищо няма да работи.

В горния пример използвахме заглавката require и долния колонтитул include. Какво да използвате на вашите сайтове зависи от вас. Както вече споменахме, няма голяма разлика между тях. Освен ако изискването не се счита за малко по -строго твърдение.

Всъщност линията просто копира цялото съдържание на файла, пътя, който посочваме, в документа, в който се намира.

Използването включва _once и изисква _once

При работа на сайта могат да възникнат проблеми, свързани с факта, че едно и също парче код е включено многократно в един и същ файл.

Да предположим, че това се е случило поради факта, че няколко души са работили на сайта и когато кодовете бяха обединени, излезе такъв инцидент ...

Разработчиците често използват инструкции include_once и require_once, за да премахнат възможността за подобни проблеми. Принципът на действие за тях е точно същият като за include with require, но ако файлът в такава инструкция вече е свързан с нашия, тогава повторното свързване няма да се случи.

Недостатъците на този метод включват факта, че той работи по -бавно и по -интензивно в изчисленията, отколкото предшествениците му включват с require, тъй като става необходимо да се запомнят всички включени файлове и да се сравнят, за да се избегне дублиране на код.

На бележка

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

1. функция config_load

Синтаксис:
(config_load файл = "име на файл")

Тази функция се използва за зареждане на променливи от конфигурационни файлове в шаблон. В допълнение към името на заредения файл, тази функция може да има няколко допълнителни параметри. Например параметърът на секцията, който определя името на секцията, която да се зареди. Повече информация за тези и други параметри можете да получите от документацията на Smarty.

Пример:
(config_load файл = "task.conf")

2. Функция за улавяне

Синтаксис:

(име на улавяне = "име на блок"
assign = "име на променлива") ...
(/ улавяне)

Тази функция е предназначена да събира изхода на шаблона в променлива, вместо да го показва на екрана.

Всичко между (улавяне на име = "varname") и (/ улавяне) ще бъде записано в променлива с име varname. Уловеното по този начин съдържание може да се използва в шаблона с помощта на специалната променлива $ smarty.capture.varname, където varname е стойността, предадена на атрибута name на функцията за улавяне. Ако не е посочено име на променлива, ще се използва името по подразбиране.

Вторият параметър задава името на променливата, на която ще бъде присвоена заснетата изходна стойност. Този параметър, подобно на името, не е задължителен.

3. Функция на секция

Синтаксис:

(име на раздел = "име на раздел"
loop = "variable_for_out_number_iterations"
[, start = "start_position_index"]
[, step = "step"] [, max = "maximum_iterations"]
[, show = "show_or_section"]) ...
(/ раздел)

Section Секцията е цикъл за пресичане на елементи от масива. Изискваните параметри са име, което се използва за задаване на името на секцията, и цикъл, който е променлива, която определя броя на итерациите на цикъла.

По правило цикълът е променлива от тип масив и броят на итерациите на секции е равен на броя на елементите на този масив. За да покажете променлива вътре в цикъл, трябва да посочите името на секцията в квадратни скоби след името на променливата.

(име на раздел = художествен цикъл = $ заглавие)

Заглавие: ($ заглавие)

(/ раздел)

Пример 15.8. Цикъл за повторение на елементите на масива

4. Функцията foreach

Синтаксис:

(foreach from = "array_name"
item = "current_item_name")
... (/ за всеки)

Освен това можете да използвате ключа за допълнителни атрибути - името на ключа за текущия елемент на масива и името - името на цикъла, с което можете да получите достъп до неговите свойства. Атрибутите from и item са задължителни.

Цикли на Foreach са алтернатива на цикли на секции. Функцията foreach е много подобна на PHP цикъла foreach.
(foreach from = $ articles item = art)
Заглавие: ($ art)

(/ за всеки)

Пример 15.9. Цикъл на Foreach

Цикли Foreach имат свои собствени свойства. Можете да получите достъп до тях по този начин: ($ smarty.foreach.foreachname.varname), където foreachname е името на цикъла, посочено от неговия параметър name, а varname е името на свойството.

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

Синтаксис:

(ако е израз) action_block
(elseif израз1) действие_блок1
(else) action_block2
(/ ако)

Действието на оператора е почти същото като PHP, ако ... elseif ... else оператор.

Следните оператори за сравнение могат да се използват в изрази: eq, ne, neq, gt, lt, lte, le, gte, ge, е четно, нечетно, не е четно, не е нечетно, не, mod, div by, четно по, нечетно по, == ,! =,>,<, <=, >=. Всеки от тях трябва да бъде отделен от околните стойности с интервали. Можете да използвате скоби в изрази и да извиквате php функции.

(ако $ name eq "Вася")
Добре дошъл, Вася.
(иначе $ name eq "Петя")
Добре дошла, Петя.
(друго)
Добре дошли. Кой си ти?
(/ ако)

Пример 15.10. Ако, elseif, else изявления

( * този пример няма да работи, тъй като няма интервали около операторите за сравнение *)
(ако $ name == "Вася" || $ name == "Петя")
...
(/ ако)
Пример 15.11. Счупен пример

Статия, която изследва елемента на HTML секция от категорията секции.

Предназначение на елемента раздел

Елементът section се използва за създаване на раздел в документ, който групира съдържание на някои теми. За всеки раздел в документа трябва да се посочи неговото име (тема). Това обикновено се прави с заглавки (h1-h6 елементи).

Заглавие на раздел

Съдържание на раздел ...

Елементите на секцията обикновено се използват в следните ситуации:

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

По този начин елементът section трябва да се използва само за някакво съдържание, ако има заглавие и е част от нещо друго.

Използване на елемента section

Например, помислете за фрагмент от код на страница, който съдържа статия с коментари. Всеки от коментарите, публикувани от потребителя на страницата, съдържа някакво пълно съдържание и следователно може да се счита за елемент на статия. Но, в същото време, всички коментари представляват определена тематична група и следователно те могат да бъдат поставени в елемента на секцията, т.е. този елемент ще групира всички тези коментари на страницата заедно.

Заглавие на статията

Коментари (1)

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

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

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

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

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

Например, помислете за използването на елементи на секции за създаване на секции в елемент на статия:

Заглавие на книга

Първа глава

Глава втора

Глава трета

Приложение А

Приложение Б

Горният пример ще има следния контур:

Заглавие на книгата Глава първа Глава втора Глава трета Приложение А Приложение Б

Ограничения при използване на елемента раздел

Елементът section в HTML 5 не е общ елемент за групиране на съдържание, т.е. не трябва да се използва за опаковане на съдържание, което харесвате. Основната му цел е да добави семантика към документа и да създаде неговия контур.

Когато авторът трябва да групира съдържание само за да го оформя или манипулира в JavaScript, най -доброто място е той да използва елемента div. Елементът div, за разлика от елемента section, не добавя семантика към документа и не участва в създаването на неговия контур (контур).

Разлика между елементите на раздела и статията

Елементите на раздела и статията, макар на пръв поглед да изглеждат много сходни, имат различни семантични значения. Елементът на статията е предназначен за групиране на пълно, самостоятелно съдържание и може да се разглежда отделно от останалото съдържание на страницата. Елементът раздел има различен смислов смисъл, има за цел да групира съдържание, което е неразделна част от нещо друго.

Но как един автор може да знае какво е съдържание на страница? Нека разгледаме това с пример за фрагмент от статия. Фрагмент е част от статия и затова елементът на раздел трябва да се използва за групиране на съдържанието му. Но същият фрагмент, вече оставен като коментар, ще представлява нещо цялостно, завършено. Следователно в този контекст елементът на статията може да се използва за неговото групиране. Но, разбира се, човек може да разсъждава и обратно. Следователно кой елемент да се използва за групиране на съдържание в повечето случаи зависи от вашето субективно мнение като автор. Но най -важното в този подход е да се запази избраната позиция. Следователно, колкото по -последователен е авторът в създаването на структурата, толкова повече смисъл може да вложи в нея.

). Всеки етикет (раздел)трябва да има чифт (/ раздел)... Необходимите параметри са имеи цикъл... Името на цикъла (раздел) може да бъде всяко име, състоящо се от букви, цифри и долни черти. Цикли (раздел)могат да бъдат вложени и вложените имена (раздел) трябва да са уникални помежду си. Променлива цикъл(обикновено масив от стойности) определя броя на цикличните итерации. Когато отпечатвате променливи в раздел, името на секцията трябва да бъде посочено до името на променливата в квадратни скоби. (частично)се изпълнява, ако параметърът цикълне съдържа стойности.

Име на атрибут Тип Задължително По подразбиране Описание
име низ Да n / a Име на раздел
цикъл смесен Да n / a Стойност, която определя броя на цикличните итерации.
започнете цяло число Не 0 Индексът на позицията, от която ще започне цикълът. Ако стойността е отрицателна, тогава началната позиция се изчислява от края на масива. Например, ако в променлива на цикъла има 7 елемента и стойността на началния атрибут е -2, тогава началният индекс ще бъде 5. Невалидните стойности (стойности извън масива) автоматично се отрязват до най -близката валидна стойност.
стъпка цяло число Не 1 Стойността на крачка, която се използва за преминаване през масива. Например, стъпка = 2 показва обхождане на масива чрез елементи 0,2,4 ... Ако стъпката е отрицателна, тогава масивът ще бъде преминат в обратна посока.
макс цяло число Не 1 Максималният брой циклични итерации.
шоу булева Не вярно Показва дали този раздел да се показва или не

Забележка

Започвайки със Smarty 1.5.0, синтаксисът на променливите на свойствата на сесията е променен от (% sectionname.varname%) на ($ smarty.section.sectionname.varname). Старият синтаксис все още се поддържа, но ще видите само примери за новия синтаксис.

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

Техническа бележка

Ако атрибутите стъпка и старт не са посочени, тогава индексът е същият като атрибута на секцията за итерация, с изключение на това, че започва с 0 вместо 1.

итерацията се използва за показване на текущия итерационен номер на цикъла.

Забележка

Тази стойност не зависи от свойствата start, step и max, за разлика от свойството index. Също така итерациите започват от единица, а не от нула като индекси. rownum е синоним на свойството за итерация, те работят по същия начин.

Пример 7.38. итерация на свойство (раздел)

assign ("custid", $ id); ?> (име на секция = cu цикъл = $ custid начало = 5 стъпка = 2) итерация = ($ smarty.section.cu.iteration) индекс = ($ smarty.section.cu.index) id = ($ custid)
(/ раздел)

Резултатът от този пример:

Итерация = 1 индекс = 5 id = 3005
итерация = 2 индекс = 7 id = 3007
итерация = 3 индекс = 9 id = 3009
итерация = 4 индекс = 11 id = 3011
итерация = 5 индекс = 13 id = 3013
итерация = 6 индекс = 15 id = 3015

Този пример използва свойството итерация за отпечатване на заглавието на таблицата на всеки пет реда (използва (ако) с оператора mod).

(име на раздел = co loop = $ контакти) (ако $ smarty.section.co.iteration% 5 == 1) (/ ако) (/ раздел)
Име>У домаКлеткаелектронна поща
изглед ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)