La colonne tutorielle suivante de thinkphp vous présentera l'utilisation de l'analyse des balises personnalisées ThinkPHP5.1. J'espère qu'elle sera utile aux amis dans le besoin !
Récemment, certains projets doivent utiliser des balises personnalisées. TP utilise la version 5.1. Veuillez noter que la version 5.1 présente des changements majeurs dans la structure des répertoires et les procédures par rapport à la version 5.0. Faites attention à votre version. Venons-en au fait.
1. Créez le fichier de fonction tag
Créez le répertoire tabLib dans le répertoire modèle, et créez un Cms.php dans le répertoire
namespace app\cms\tagLib; use think\Db; use think\template\TagLib; class Cms extends TagLib{ protected $tags = [ //标签定义: attr 属性列表,close 是否闭合(0或1,默认1),alias标签别名 level嵌套层次 'lists' => ['attr' => 'num,order,sort'], ]; // 当不使用content的时候,闭合标签没有效果 // 修改过此文件后,需要改动下模板的内容,否则模板有缓存不会执行新的内容。 public function tagLists($tag,$content){ $cateID = $tag['cate_id']; //栏目ID $num = $tag['num']; //数量 $order = input($tag['order']); //排序方式 $type = $cateID; $name = $tag['name']; $tableName = 'table_name'; $parse = '<?php $map=[];'; $parse .= '$__LIST__ = Db::name('.$tableName.')->where(["cate_id"=>'. $cateID .']) ->limit('.$num.') ->select(); ?>'; $parse .= '{volist name="__LIST__" id="'. $name .'"}'; $parse .= $content; $parse .= "{/volist}"; return $parse; }
Doutes rencontrées lors du développement :
1. La fonction tagLists ci-dessus correspond à la définition de la balise dans les $tags protégés. Faites attention à la majuscule, sinon la fonction ne sera pas trouvée.
2. Tous les caractères de $parse sont des chaînes assemblées. Cette chaîne sera à nouveau analysée par la balise de modèle de TP, vous pouvez donc y utiliser les balises originales de TP ou les instructions PHP natives. Cependant, vous ne pouvez pas passer un tableau ou un objet externe dans $param en tant que paramètre. Vous devez savoir qu'il s'agit simplement d'une chaîne utilisée pour l'assemblage. Veuillez noter l'utilisation de la variable $__LIST__ Si vous souhaitez lire des données de la base de données, vous devez écrire un code PHP complet. Vous ne pouvez pas exécuter la requête à l'extérieur puis transmettre la liste interrogée en tant que variable.
2. Chargez cette fonction de balise dans les informations de configuration du modèle
Ajoutez une phrase dans le module cms/config/template.php : 'taglib_pre_load' =>
Si vous n'avez pas ce fichier, vous pouvez copier un modèle dans le répertoire config du répertoire racine et le mettre dans le répertoire cms/config.
3. Utilisez des balises dans les modèles.
{cms:lists name="row" num="10" cate_id="5" order="1"} <li>{$row.title}</li> {/cms:lists}
name, num, cate_id et d'autres attributs seront transmis comme premier paramètre $tags des tagLists. Le contenu entre {cms:lists} et {$/cms:lists} sera transmis dans le deuxième paramètre de tagLists sous la forme d'une chaîne complète $content.
Remarque : Il existe des balises fermées et des balises non fermées. S'il s'agit d'une balise fermée, vous devez utiliser le contenu en (1). S'il s'agit d'une balise non fermée, il n'est pas nécessaire de l'utiliser. Si vous n'utilisez pas la variable de contenu, la balise fermée {/cms:lists} sera affichée telle quelle et ne sera pas analysée.
Il y a tellement de confusion en ce moment. La question des listes paginées est toujours à l'étude. Je l'ajouterai une fois l'étude terminée.
Supplément : N'effectuez pas de conversion de type de données sur les données obtenues dans le tableau $tag[] dans tagList, car lorsqu'une variable est passée, cette variable ne prendra pas effet ! ! Il est donc erroné d'utiliser ici intval($tag[num]) .
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!