Heim > Artikel > Backend-Entwicklung > PHP-Template-Engine. Intelligente integrierte Funktion für die Verwendung von foreach, foreachelse und Beispielanalyse
Dieser Artikel stellt hauptsächlich die Verwendung der integrierten Funktionen foreach und foreachelse der PHP-Template-Engine Smarty vor. Er analysiert die Funktionen und spezifischen Verwendungstechniken von foreach und foreachelse in Form von Beispielen
in Smarty In einer Vorlage können Sie foreach verwenden, um einen Block zu wiederholen. In der Vorlage muss ein Array von PHP zugewiesen werden. Dieses Array kann ein mehrdimensionales Array sein. Das {foreach}-Tag in Smarty ist das gleiche wie foreach in PHP, mit der Ausnahme, dass eines davon in der Vorlagendatei und das andere im PHP-Skript verwendet wird. Daher wird die Syntax unterschiedlich sein. Allerdings machen sie alle das Gleiche, nämlich den Inhalt eines Arrays zu durchlaufen. Es gibt auch ein {foreachelse}-Tag gegenüber dem {foreachelse}-Tag. Die Funktion des {foreachelse}-Tags ist: Wenn das Array leer ist, wird der Inhalt im Tag ausgeführt. {foreach} und {/foreach} müssen paarweise in der Vorlage erscheinen. Sie verfügt über vier Parameter, von denen zwei Parameter from und item erforderlich sind. Die Parameter finden Sie in der folgenden Liste:
Attribut | Typ | Ist es Erforderlich? | Standardwert | Beschreibung | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
von | string | Ja | n/a
|
Name des zu durchlaufenden Arrays | |||||||||||||||||||||||||
item | string | Ja | n/aVariablenname des aktuell verarbeiteten Elements | ||||||||||||||||||||||||||
Schlüssel | string | Nein | n/a td> |
Schlüsselname des aktuell verarbeiteten Elements |
|||||||||||||||||||||||||
name | stringNein td> | n/a | Der Name der Schleife, der für den Zugriff auf die Schleife verwendet wird |
Wir übergeben ein Beispiel, um die Verwendung von {foreach} und {foreachelse} in Smarty zu demonstrieren.
Beispielidee: Rufen Sie den Inhalt aus der Datenbank ab, weisen Sie ihn einer Array-Variablen $_html zu, weisen Sie diese Array-Variable der Vorlage zu und durchlaufen Sie dann das Array in der Vorlage
test.sql (Verwendete SQL-Daten)
-- -- 表的结构 `user` -- CREATE TABLE IF NOT EXISTS `user` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `username` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `addTime` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- -- 转存表中的数据 `user` -- INSERT INTO `user` (`id`, `username`, `email`, `addTime`) VALUES (1, '苍井空', 'canjingkong@sina.com.cn', '2011-10-24 00:00:00'), (2, '樱木花道', 'ymhd@163.com', '2011-10-24 00:00:00'), (3, '赤木晴子', 'chimiqingzi@yahoo.com,cn', '2011-10-24 00:00:00'), (4, '流川枫', 'lcfeng@sina.com', '0000-00-00 00:00:00'), (5, '蜡笔小新', 'labixiaoxin@sina.com', '2011-10-24 00:00:00'), (6, '金刚葫芦娃', 'jghlw@sina.com', '2011-10-24 00:00:00');
init.inc.php (Vorlageninitialisierungsdatei)
<?php define('ROOT_PATH', dirname(__FILE__)); //设置网站根目录 require ROOT_PATH.'/libs/Smarty.class.php'; //加载 Smarty 模板引擎 $_tpl = new Smarty(); //创建一个实例对象 $_tpl->template_dir = ROOT_PATH.'/tpl/'; //重新指定模板目录 $_tpl->compile_dir = ROOT_PATH.'./com/'; //重新指定编译目录 $_tpl->left_delimiter = '<{'; //重新指定左定界符 $_tpl->right_delimiter = '}>'; //重新指定右定界符 ?>
index.php (Hauptdatei)
<?php require 'init.inc.php'; //引入模板初始化文件 global $_tpl; $_mysqli = new mysqli(); //创建一个 mysqli() 对象 $_mysqli->connect('localhost','root','数据库密码','数据库名'); //连接数据库,请您自行设置 $_mysqli->set_charset('utf8'); //设置编码 $_result = $_mysqli->query("select username,email,addTime from user order by id asc"); $_html = array(); while (!!$_row=$_result->fetch_assoc()) { $_html[] = $_row; } $_tpl->assign('data',$_html); //把数组分配到模板中 $_tpl->display('index.tpl'); //引入模板 $_mysqli->close(); //关闭数据库,释放资源 ?>
tpl/index.tpl (Vorlagendatei der Hauptdatei index.php)
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>foreach,foreachelse</title> </head> <body> <table align="center" border="1" width="800"> <{foreach from=$data item="row" name="ls"}> <!-- 这个foreach 循环分配过来的数组有几行数据 --> <!-- 在此,我们做几个保留变量 $smarty.foreach 的操作 --> <!-- 当数据显示第一条的时候,第一行的表格背景为黄色,使用属性:first --> <!-- 当数据显示最后一条的时候,最后一行的表格背景为蓝色,使用属性:last --> <!-- 显示下分配过来的数组的总个数,使用属性:total --> <{if $smarty.foreach.ls.first}> <tr bgcolor="#FFFF00"> <!-- 第一行背景为黄色 --> <{elseif $smarty.foreach.ls.last}> <tr bgcolor="#0000FF"> <!-- 最后一行背景为蓝色 --> <{else}> <tr> <{/if}> <td><{$smarty.foreach.ls.iteration}></td><!-- 注意:这里是保留变量 $smarty.foreach 的使用,iteration:总是从 1 开始,每执行一次增加 1 --> <{foreach from=$row item="col" name="lsin"}> <!-- 这个foreach 循环数组内的内容,显示在表格的<td></td>标签里 --> <td><{$col}></td> <{/foreach}> </tr> <{foreachelse}> <!-- 如果分配过来的数组中没有数据,那么就执行下面的操作! --> <tr> <td>对不起!暂时没有数据。</td> </tr> <{/foreach}> <tr> <td colspan="4" align="center">分配数组的总记录数为:<{$smarty.foreach.ls.total}>条</td> </tr> </table> </body> </html>Ausführungsergebnis:
Zusammenfassend lässt sich abschließend sagen, dass das in der Hauptdatei index.php übergebene Array $_html Zwei ist -dimensionales Array. Die Verwendung der reservierten Variablen $smarty.foreach basiert auf dem Namensattribut im Tag {foreach}. Die verwendeten reservierten Variablenattribute sind: first (erster Datensatz), last (letzter Datensatz), Iteration (beginnt immer bei 1, jede Ausführung). erhöht sich um 1), insgesamt (wird zur Anzeige der Anzahl der Schleifenausführungen verwendet)
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Lernen aller hilfreich sein wird. Verwandte Empfehlungen:
Vorsichtsmaßnahmen und Beispielanalyse zum Ändern des Array-Schlüssels in array_unshift()
Methode zum Konvertieren des HTML-Formats in das Textformat
Verwenden Sie Curl, um die Methode zum Abrufen von Daten über einen Proxy zu implementieren
Das obige ist der detaillierte Inhalt vonPHP-Template-Engine. Intelligente integrierte Funktion für die Verwendung von foreach, foreachelse und Beispielanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!