Maison  >  Article  >  développement back-end  >  Introduction à la méthode d'importation de la bibliothèque de balises personnalisées thinkPHP2.1

Introduction à la méthode d'importation de la bibliothèque de balises personnalisées thinkPHP2.1

不言
不言original
2018-07-03 16:48:581387parcourir

Cet article présente principalement la méthode d'importation de la bibliothèque de balises personnalisées thinkPHP2.1 et analyse en détail la définition, l'utilisation et les techniques liées à l'importation automatique de la bibliothèque de balises thinkPHP. Les amis dans le besoin peuvent se référer à

Cet article. détails Décrit la méthode d'importation de la bibliothèque de balises personnalisées thinkPHP2.1. Je le partage avec vous pour votre référence. Les détails sont les suivants :

Le manuel de TP semble incapable de suivre le rythme. Il ne contient que quelques mots sur les balises personnalisées. , j'ai finalement importé les balises personnalisées. Mon expérience Comme suit :

1. Situation : Créer une nouvelle classe de bibliothèque de balises personnalisées : @.Mylib.Tag.TagLibTest — Ceux qui comprennent TP devraient connaître le chemin représenté par

Fichier de démonstration de balises sous Exemples

<?php
// +-----------------------------------------------------------
// | ThinkPHP
// +------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +------------------------------------------------------------
// | Author: liu21st <liu21st @gmail.com="">
// +------------------------------------------------------------
// $Id$
import(&#39;TagLib&#39;);
class TagLibArticle extends TagLib{
 // 标签定义
 protected $tags = array(
  // 标签定义:
  //attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
  &#39;article&#39;=>array(&#39;attr&#39;=>&#39;name,field,limit,order,where,sql,key,mod&#39;,&#39;level&#39;=>3),
  );
 //定义查询数据库标签
 public function _article($attr,$content) {
  $tag = $this->parseXmlAttr($attr,&#39;article&#39;);
  $result = !empty($tag[&#39;result&#39;])?$tag[&#39;result&#39;]:&#39;article&#39;; //定义数据查询的结果存放变量
  $key = !empty($tag[&#39;key&#39;])?$tag[&#39;key&#39;]:&#39;i&#39;;
  $mod = isset($tag[&#39;mod&#39;])?$tag[&#39;mod&#39;]:&#39;2&#39;;
  if ($tag[&#39;name&#39;])
  { //根据用户输入的值拼接查询条件
   $sql = "M(&#39;{$tag[&#39;name&#39;]}&#39;)->";
   $sql .= ($tag[&#39;field&#39;])?"field({$tag[&#39;field&#39;]})->":&#39;&#39;;
   $sql .= ($tag[&#39;order&#39;])?"order({$tag[&#39;order&#39;]})->":&#39;&#39;;
   $sql .= ($tag[&#39;where&#39;])?"where({$tag[&#39;where&#39;]})->":&#39;&#39;;
   $sql .= "select()";
  }else{
   if (!$tag[&#39;sql&#39;]) return &#39;&#39;; //排除没有指定model名称,也没有指定sql语句的情况
   $sql .= "M()->query(&#39;{$tag[&#39;sql&#39;]}&#39;)";
  }
  //下面拼接输出语句
  $parsestr = &#39;<?php $_result=&#39;.$sql.&#39;; if ($_result): $&#39;.$key.&#39;=0;&#39;;
  $parsestr .= &#39;foreach($_result as $key=>$&#39;.$result.&#39;):&#39;;
  $parsestr .= &#39;++$&#39;.$key.&#39;;$mod = ($&#39;.$key.&#39; % &#39;.$mod.&#39; );?>&#39;;
  $parsestr .= $content;//解析在article标签中的内容
  $parsestr .= &#39;<?php endforeach; endif;?>&#39;;
  return $parsestr;
 }
}
?></liu21st>

Créez ensuite un nouveau fichier taglibs.php dans le répertoire Conf sous le projet, contenu :

<?php
return array(
 &#39;article&#39;=>&#39;@.TagLib.TagLibarticle&#39;,
);
?>

De cette façon, vous pouvez l'utiliser dans le modèle :

<tagLib name="article" />
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>ThinkPHP示例:自定义标签</title>
<link rel=&#39;stylesheet&#39; type=&#39;text/css&#39; href=&#39;__PUBLIC__/Css/common.css&#39;>
 </head>
 <body>
 <p class="main">
 <h2>ThinkPHP示例之自定义标签:定义查询数据库的标签</h2>
 本示例定义一个查询数据库的标签,可以使模板直接按条件查找指定的数据库并列表显示,本例仅是展示自定义标签的方便之处,可以进一步扩充和完善,打造属于自已的标签体系
 <table cellpadding=2 cellspacing=2>
 <thead>
 <tr>
 <td class="tLeft" width="8%">序列</td><td class="tLeft" width="12%">标题</td><td>内容</td>
 </tr>
</thead>
  <article:article name="form" limit="10">
  <tr>
   <td>{$article.id}</td>
   <td>{$article.title}</td>
   <td>{$article.content}</td>
  </tr>
 </article:article>
<tr>
 <td colspan=&#39;3&#39;>
 <hr> 示例源码<br/>控制器自定义标签类<br/> <php>highlight_file(LIB_PATH.&#39;TagLib/TagLibarticle.class.php&#39;);</php></td>
 </tr>
 </table>
</p>
 </body>
</html>

C'est une situation très simple, mais mon idée est d'exiger que la bibliothèque de balises personnalisées soit automatiquement importée, afin qu'il ne soit pas nécessaire d'ajouter des balises comme b62b76393bf80bcc9a22131e73e6ddfa dans la première ligne de chaque modèle.

est juste Cela a rencontré un petit problème

2 Importer automatiquement la bibliothèque de balises personnalisées

Ajouter dans le. Fichier config.php :

&#39;TAGLIB_PRE_LOAD&#39; => &#39;article&#39; ,

Vider le cache, provoquant l'erreur "Instancier une classe inexistante !";

Utilisé quelques tours sur le forum officiel de TP, et j'ai découvert qu'il n'y a qu'une seule façon de le résoudre : utiliser Alias ​​​​import, c'est-à-dire ajouter le chemin d'importation sous commonn/alias.php dans le framework TP :

comme :

&#39;TagLibArticle&#39; => THINK_PATH.&#39;/Lib/Think/Template/TagLib/TagLibArticle.class.php&#39;,

Il existe également des solutions pour modifier le code source de la classe Template, qui ne sont pas simples à utiliser — Car généralement je ne souhaite pas modifier le noyau pour un petit problème.

J'ai donc pensé à l'importation d'Action :

Ajouter l'importation à ma propre classe de base de projet BaseAction.class.php :

function _initialize() {
 import("@.Mylibs.Tag.TagLibArticle");
}

Actualiser le cache, problème résolu...

Cette solution est simple et facile à utiliser.

Supplément :

L'utilisation de la configuration de chargement automatique de TP est plus rapide :

&#39;APP_AUTOLOAD_PATH&#39;=> &#39;Think.Util.,@.Mylibs.Tag.&#39;,

Solution finale :

1. Mylibs.Tag.TagLibTest - Bibliothèque de balises personnalisées

2. Configuration :

&#39;APP_AUTOLOAD_PATH&#39;=> &#39;Think.Util.,@.Mylibs.Tag.&#39;,
'TAGLIB_PRE_LOAD' => 'test' ,

Après la suppression du cache Il peut être utilisé normalement.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Introduction à la méthode de rappel du framework thinkPHP ancré avec l'interface de paiement instantané d'Alipay

Système couramment utilisé dans thinkphp Introduction aux constantes et aux variables système

Méthode de ThinkPHP pour écrire l'insertion de tableau et obtenir le dernier ID de données inséré

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!

Déclaration:
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