Sinless Abschnitt php. Einschließen von Dateien in PHP mit include und require. Einschränkungen bei Verwendung des Abschnittselements

). Jedes Tag (Sektion) muss ein Paar haben (/ Sektion) ... Die erforderlichen Parameter sind name und schleife ... Der Name der Schleife (Abschnitt) kann ein beliebiger Name sein, der aus Buchstaben, Zahlen und Unterstrichen besteht. Fahrräder (Sektion) kann verschachtelt sein und verschachtelte Namen (Abschnitt) müssen untereinander eindeutig sein. Variable schleife (normalerweise ein Array von Werten) bestimmt die Anzahl der Schleifeniterationen. Beim Drucken von Variablen innerhalb eines Abschnitts muss der Abschnittsname neben dem Variablennamen in eckigen Klammern angegeben werden. (abschnittsweise) wird ausgeführt, wenn der Parameter schleife enthält keine Werte.

Attributname Eine Art Verpflichtend Default Beschreibung
name zeichenfolge Ja n / a Abteilungsname
schleife gemischt Ja n / a Ein Wert, der die Anzahl der Schleifeniterationen bestimmt.
start ganze Zahl Nein 0 Der Index der Position, an der die Schleife beginnt. Wenn der Wert negativ ist, wird die Startposition ab dem Ende des Arrays berechnet. Wenn die Schleifenvariable beispielsweise 7 Elemente enthält und der Startattributwert -2 ist, ist der Startindex 5. Ungültige Werte (Werte außerhalb des Arrays) werden automatisch auf den nächsten gültigen Wert abgeschnitten.
schritt ganze Zahl Nein 1 Der Schrittwert, der zum Durchlaufen des Arrays verwendet wird. Zum Beispiel gibt Schritt \u003d 2 eine Durchquerung des Arrays durch die Elemente 0,2,4 an ... Wenn der Schritt negativ ist, wird das Array in die entgegengesetzte Richtung durchlaufen.
max ganze Zahl Nein 1 Die maximale Anzahl von Schleifeniterationen.
show boolescher Wert Nein wahr Gibt an, ob dieser Abschnitt angezeigt werden soll oder nicht

Hinweis

Ab Smarty 1.5.0 wurde die Syntax für Sitzungseigenschaftsvariablen von (% sectionname.varname%) in ($ smarty.section.sectionname.varname) geändert. Die alte Syntax wird weiterhin unterstützt, es werden jedoch nur Beispiele für die neue Syntax angezeigt.

der Index wird verwendet, um den aktuellen Index des Arrays anzuzeigen, beginnend bei Null (oder am Startattribut, falls angegeben) und um eins erhöht (oder um den Wert des Schrittattributs, falls angegeben).

Technischer Hinweis

Wenn die Schritt- und Startattribute nicht angegeben sind, entspricht der Index dem Attribut im Iterationsabschnitt, außer dass er bei 0 und nicht bei 1 beginnt.

die Iteration wird verwendet, um die aktuelle Iterationsnummer der Schleife anzuzeigen.

Hinweis

Dieser Wert ist im Gegensatz zur Indexeigenschaft unabhängig von den Eigenschaften start, step und max. Außerdem beginnen Iterationen bei Eins und nicht wie Indizes bei Null. rownum ist ein Synonym für die Iterationseigenschaft, sie funktionieren genauso.

Beispiel 7.38. Eigenschaft (Abschnitt) Iteration

zuweisen ("custid", $ id); ?\u003e (Abschnittsname \u003d cu loop \u003d $ custid start \u003d 5 step \u003d 2) iteration \u003d ($ smarty.section.cu.iteration) index \u003d ($ smarty.section.cu.index) id \u003d ($ custid)
(/ Sektion)

Das Ergebnis dieses Beispiels:

Iteration \u003d 1 Index \u003d 5 ID \u003d 3005
Iteration \u003d 2 Index \u003d 7 ID \u003d 3007
Iteration \u003d 3 Index \u003d 9 ID \u003d 3009
Iteration \u003d 4 Index \u003d 11 ID \u003d 3011
Iteration \u003d 5 Index \u003d 13 ID \u003d 3013
Iteration \u003d 6 Index \u003d 15 ID \u003d 3015

In diesem Beispiel wird die Iterationseigenschaft verwendet, um den Tabellentitel alle fünf Zeilen zu drucken (verwendet (if) mit dem Mod-Operator).

(Abschnittsname \u003d Co-Schleife \u003d $ Kontakte) (wenn $ smarty.section.co.iteration% 5 \u003d\u003d 1) (/ wenn) (/ Sektion)
Name\u003eZuhauseZelleEmail
aussicht ($ contacts.name) ($ contacts.home) ($ contacts.cell) ($ contacts.email)


Inhaltsverzeichnis dokumentieren

1. config_load Funktion

Syntax:
(config_load file \u003d "Dateiname")

Diese Funktion wird verwendet, um Variablen aus Konfigurationsdateien in eine Vorlage zu laden. Neben dem Namen der geladenen Datei kann diese Funktion mehrere zusätzliche Parameter enthalten. Beispiel: Der Abschnittsparameter, der den Namen des zu ladenden Abschnitts angibt. Weitere Informationen zu diesen und anderen Parametern finden Sie in der Smarty-Dokumentation.

Beispiel:
(config_load file \u003d "task.conf")

2. Aufnahmefunktion

Syntax:

(Capture Name \u003d "Blockname"
assign \u003d "Variablenname") ...
(/ Erfassung)

Diese Funktion dient dazu, die Vorlagenausgabe in einer Variablen zu sammeln, anstatt sie auf dem Bildschirm anzuzeigen.

Alles zwischen (capture name \u003d "varname") und (/ capture) wird in eine Variable namens varname geschrieben. Der auf diese Weise erfasste Inhalt kann in der Vorlage mithilfe der speziellen Variablen $ smarty.capture.varname verwendet werden, wobei varname der Wert ist, der an das name-Attribut der Erfassungsfunktion übergeben wird. Wenn kein Variablenname angegeben ist, wird der Standardname verwendet.

Der zweite Parameter assign gibt den Namen der Variablen an, der der erfasste Ausgabewert zugewiesen wird. Dieser Parameter ist wie der Name optional.

3. Abschnittsfunktion

Syntax:

(Abschnittsname \u003d "Abschnittsname"
loop \u003d "variable_for_out_number_iterations"
[, start \u003d "start_position_index"]
[, step \u003d "step"] [, max \u003d "maximum_iterations"]
[, show \u003d "show_or_section"]) ...
(/ Sektion)

Abschnitt Abschnitt ist eine Schleife zum Durchlaufen von Array-Elementen. Die erforderlichen Parameter sind name, mit dem der Name des Abschnitts festgelegt wird, und loop, eine Variable, die die Anzahl der Schleifeniterationen bestimmt.

In der Regel ist loop eine Arrayvariable, und die Anzahl der Abschnittsiterationen entspricht der Anzahl der Elemente dieses Arrays. Um eine Variable in einer Schleife anzuzeigen, müssen Sie den Abschnittsnamen in eckigen Klammern nach dem Variablennamen angeben.

(Abschnittsname \u003d Kunstschleife \u003d $ Titel)

Titel: ($ title)

(/ Sektion)

Beispiel 15.8. Schleife zum Durchlaufen von Array-Elementen

4. Die foreach-Funktion

Syntax:

(foreach from \u003d "array_name"
item \u003d "aktueller_item_name")
... (/ für jeden)

Darüber hinaus können Sie den zusätzlichen Attributschlüssel verwenden - den Namen des Schlüssels für das aktuelle Element des Arrays und den Namen - den Namen der Schleife, mit der Sie auf deren Eigenschaften zugreifen können. Die Attribute from und item sind erforderlich.

Foreach-Schleifen sind eine Alternative zu Abschnittsschleifen. Die foreach-Funktion ist der PHP-foreach-Schleife sehr ähnlich.
(foreach from \u003d $ articles item \u003d art)
Titel: ($ art)

(/ für jeden)

Beispiel 15.9. Foreach-Schleife

Foreach-Schleifen haben ihre eigenen Eigenschaften. Auf sie kann folgendermaßen zugegriffen werden: ($ smarty.foreach.foreachname.varname), wobei foreachname der Name der durch den Parameter name angegebenen Schleife und varname der Name der Eigenschaft ist.

5. Operator if, elseif, else

Syntax:

(wenn Ausdruck) action_block
(elseif expression1) action_block1
(else) action_block2
(/ wenn)

Die Operatoraktion entspricht fast der des PHP-Operators, wenn ... elseif ... else.

Die folgenden Vergleichsoperatoren können in Ausdrücken verwendet werden: eq, ne, neq, gt, lt, lte, le, gte, ge, ist gerade, ist ungerade, ist nicht gerade, ist nicht ungerade, nicht, mod, div durch, gerade durch, ungerade von, \u003d\u003d,! \u003d,\u003e,<, <=, >\u003d. Jeder von ihnen muss durch Leerzeichen von den umgebenden Werten getrennt sein. Sie können Klammern in Ausdrücken verwenden und PHP-Funktionen aufrufen.

(wenn $ name eq "Vasya")
Willkommen, Vasya.
(elseif $ name eq "Petya")
Willkommen, Petja.
(sonst)
Willkommen zurück. Und wer sind Sie?
(/ wenn)

Beispiel 15.10. If, elseif, else-Anweisungen

(* Dieses Beispiel funktioniert nicht, da die Vergleichsoperatoren keine Leerzeichen enthalten. *)
(wenn $ name \u003d\u003d "Vasya" || $ name \u003d\u003d "Petya")
...
(/ wenn)
Beispiel 15.11. Gebrochenes Beispiel

Beim Erstellen von Websites mit Selbstschreiben (ohne Verwendung von Frameworks, CMS und anderen modischen Dingen, die Webentwicklern das Leben erleichtern) stehen wir vor dem Problem, Änderungen an der Website vorzunehmen, wenn viele Seiten vorhanden sind.

Damit wir nicht in jeder Auslagerungsdatei dieselben Teile der Site ändern müssen, können wir praktische PHP-Anweisungen verwenden, mit denen wir Dateien mit dem erforderlichen Code auf allen Seiten mit buchstäblich einer Codezeile einfügen können. Durch Ändern des Inhalts der enthaltenen Datei ändern wir dann den Code auf allen Seiten der Site. Praktisch, egal wie Sie aussehen.

Schauen wir uns nun genauer an, wie Dateien verbunden werden:

Verwenden Sie include und require

Sie werden nicht in der Lage sein, mit all Ihren Wünschen einen grundlegenden Unterschied zwischen diesen beiden Anweisungen zu finden, aber es gibt Nuancen:

Wenn während der Ausführung des Befehls require ein Fehler auftritt, erhält der Parser eine schwerwiegende Fehlerantwort und die Ausführung des Seitencodes wird gestoppt, während include nur eine Warnung ausgibt und die Dateiausführung fortgesetzt wird (die Datei wird einfach nicht verbunden).

Nehmen wir ein einfaches Beispiel, um das Thema besser zu verstehen.

Wir haben unsere Minisite, in der Kopf- und Fußzeile auf allen Seiten gleich sind und sich der Hauptteil des Dokuments ändert.

Wir erstellen die Dateien header.php und footer.php, in die wir den Code einfügen, der auf allen Seiten gleich ist, und in den Dateien index.php und newpage.php verbinden wir die statischen Teile. Als Ergebnis erhalten wir:

Header.php Inhalt

< header> < nav> < a href= "newpage1.php" title= "menüpunkt" > Menüpunkt < a href= "newpage2.php" title= "menüpunkt" > Menüpunkt < a href= "newpage3.php" title= "menüpunkt" > Menüpunkt

Footer.php Inhalt

< footer> < p> Von uns gemacht

Inhalt anderer Seiten

Minisite

Viele nützliche Informationen

Durch das Laden unserer Seite erhalten wir folgendes Bild:

Wie wir sehen können, funktioniert alles super.

Beachten Sie, dass wir das Beispiel auf dem lokalen Denwer-Server ausgeführt haben, da für PHP ein Server erforderlich ist, der PHP unterstützt. Wenn Sie eine Website in einem einfachen Ordner auf einem PC erstellen, funktioniert nichts.

Im obigen Beispiel haben wir die erforderliche Kopf- und Fußzeile verwendet. Was Sie auf Ihren Websites verwenden, liegt bei Ihnen. Wie bereits erwähnt, gibt es keinen großen Unterschied zwischen ihnen. Sofern nicht erforderlich, wird dies als etwas strengere Aussage angesehen.

In der Tat die Linie Kopiert einfach den gesamten Inhalt der Datei, den Pfad, auf den wir angeben, in das Dokument, in dem sie sich befindet.

Verwenden Sie include _once und erfordern Sie _once

Bei der Arbeit an einer Site können Probleme auftreten, da derselbe Code wiederholt in einer Datei enthalten ist.

Angenommen, dies geschah aufgrund der Tatsache, dass mehrere Personen auf der Website gearbeitet haben, und als die Codes zusammengeführt wurden, kam ein solcher Vorfall heraus ...

Entwickler verwenden häufig die Anweisungen include_once und require_once, um die Möglichkeit solcher Probleme auszuschließen. Das Funktionsprinzip für sie ist genau das gleiche wie für include with require, aber wenn die Datei in einer solchen Anweisung bereits mit unserer verbunden wurde, findet keine erneute Verbindung statt.

Zu den Nachteilen dieser Methode gehört die Tatsache, dass sie langsamer und rechenintensiver arbeitet als ihre Vorgänger mit require, da alle erforderlichen Dateien gespeichert und verglichen werden müssen, um Codeduplikationen zu vermeiden.

Auf eine Notiz

  • Um die Unterscheidung zwischen den Dateien der Websiteseiten und den Dateien ihrer Fragmente, die wir in sie aufnehmen, zu vereinfachen, fügen die normalerweise enthaltenen Dateien dem Namen ein Inc-Partikel hinzu. Wenn wir diesen Ansatz in unserem Beispiel berücksichtigen, erhalten wir die Datei header.inc.php aus der Datei header.php und so weiter. Dieser Ansatz kann es in Zukunft viel einfacher machen, die Struktur der Site zu verstehen.
  • Der Code aus der Datei, die wir verbinden, erbt den Umfang der Zeile, in der er verbunden ist. Tobish hat nur innerhalb der Seite einen globalen Bereich und innerhalb der Funktion einen lokalen.
  • Wir können include mit require verwenden, wo immer wir wollen. Auch in Skripten.