Maison > développement back-end > tutoriel php > Moteur de modèle PHP Fonction intégrée Smarty pour chaque utilisation, utilisation de foreachelse et exemple d'analyse

Moteur de modèle PHP Fonction intégrée Smarty pour chaque utilisation, utilisation de foreachelse et exemple d'analyse

墨辰丷
Libérer: 2023-03-29 15:58:02
original
1809 Les gens l'ont consulté

Cet article présente principalement l'utilisation des fonctions intégrées foreach et foreachelse du moteur de template PHP Smarty. Il analyse les fonctions et techniques d'utilisation spécifiques de foreach et foreachelse sous forme d'exemples.

dans Smarty Dans un modèle, vous pouvez utiliser foreach pour répéter un bloc. Dans le modèle, un tableau doit être alloué depuis PHP. Ce tableau peut être un tableau multidimensionnel. La balise {foreach} dans Smarty est la même que la balise foreach en PHP, sauf que l'une d'elles est utilisée dans le fichier modèle et l'autre est utilisée dans le script PHP. La syntaxe sera donc différente. Cependant, ils font tous la même chose, c'est-à-dire parcourir le contenu d'un tableau. Il existe également une balise {foreachelse} en face de la balise {foreach}. La fonction de la balise {foreachelse} est la suivante : si le tableau est vide, alors le contenu de la balise est exécuté. {foreach} et {/foreach} doivent apparaître par paires dans le modèle. Il comporte quatre paramètres, dont deux paramètres from et item sont nécessaires. Veuillez consulter la liste suivante pour ses paramètres :


n/a

chaîne
Attribut Type Est-ce requis ? Valeur par défaut Description
à partir de chaîne Oui n/a
属性 类型 是否必须 缺省值 描述
from string Yes n/a 待循环数组的名称
item string Yes n/a 当前处理元素的变量名称
key string No n/a

当前处理元素的键名

name string No n/a 该循环的名称,用于访问该循环
Nom du tableau à boucler
item chaîne Oui Nom de la variable de l'élément actuellement traité
clé chaîne Non n/a
td>

Nom de clé de l'élément actuellement traité

name Non td> n/a

Le nom de la boucle, utilisé pour accéder à la boucle

Nous passons un exemple pour démontrer l'utilisation de {foreach} et {foreachelse} dans Smarty.

Exemple d'idée : récupérer le contenu de la base de données, l'affecter à une variable de tableau $_html, attribuer cette variable de tableau au modèle, puis parcourir le tableau dans le modèle

--
-- 表的结构 `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');
Copier après la connexion
test.sql (Données SQL utilisées)

<?php
 define(&#39;ROOT_PATH&#39;, dirname(__FILE__)); //设置网站根目录
 require ROOT_PATH.&#39;/libs/Smarty.class.php&#39;; //加载 Smarty 模板引擎
 $_tpl = new Smarty(); //创建一个实例对象
 $_tpl->template_dir = ROOT_PATH.&#39;/tpl/&#39;; //重新指定模板目录
 $_tpl->compile_dir = ROOT_PATH.&#39;./com/&#39;; //重新指定编译目录
 $_tpl->left_delimiter = &#39;<{&#39;; //重新指定左定界符
 $_tpl->right_delimiter = &#39;}>&#39;; //重新指定右定界符
?>
Copier après la connexion
init.inc.php (fichier d'initialisation du modèle)

<?php
 require &#39;init.inc.php&#39;; //引入模板初始化文件
 global $_tpl;
 $_mysqli = new mysqli(); //创建一个 mysqli() 对象
 $_mysqli->connect(&#39;localhost&#39;,&#39;root&#39;,&#39;数据库密码&#39;,&#39;数据库名&#39;); //连接数据库,请您自行设置
 $_mysqli->set_charset(&#39;utf8&#39;); //设置编码
 $_result = $_mysqli->query("select username,email,addTime from user order by id asc");
 $_html = array();
 while (!!$_row=$_result->fetch_assoc()) {
  $_html[] = $_row;
 }
 $_tpl->assign(&#39;data&#39;,$_html); //把数组分配到模板中
 $_tpl->display(&#39;index.tpl&#39;); //引入模板
 $_mysqli->close(); //关闭数据库,释放资源
?>
Copier après la connexion
index.php (fichier principal)

<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>
Copier après la connexion
tpl/index.tpl (modèle du fichier principal index.php Fichier )

Résultat de l'exécution :

Enfin, le fichier principal index.php Le tableau passé dans $_html est un tableau à deux dimensions. L'utilisation des variables réservées $smarty.foreach est basée sur l'attribut name dans la balise {foreach}. Les attributs de variable réservée utilisés sont : first (premier enregistrement), last (dernier enregistrement), itération (commence toujours à partir de 1, chaque exécution. augmente de 1), total (utilisé pour afficher le nombre d'exécutions de boucles)

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun. Recommandations associées :

php

Précautions et exemple d'analyse de la modification de la clé de tableau dans array_unshift()

php

Méthode pour convertir le format html au format texte

php

Utilisez curl pour implémenter la méthode d'obtention de données via proxy

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal