Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Importmethode des Beispiels für das benutzerdefinierte Tag „library_php' von thinkPHP2.1
Dieser Artikel beschreibt die Importmethode der benutzerdefinierten Tag-Bibliothek von thinkPHP2.1. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Das Handbuch von TP scheint nicht mit dem Rhythmus mithalten zu können. Es enthält nur ein paar Worte zu benutzerdefinierten Tags. Nach langem Fummeln habe ich die benutzerdefinierten Tags schließlich wie folgt importiert
1. Situation: Erstellen Sie eine neue benutzerdefinierte Tag-Bibliotheksklasse: @.Mylib.Tag.TagLibTest – Wer TP versteht, sollte den Pfad kennen, den dies darstellt
Verwenden Sie die Tag-Demodatei unter Beispiele
<?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('TagLib'); class TagLibArticle extends TagLib{ // 标签定义 protected $tags = array( // 标签定义: //attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次 'article'=>array('attr'=>'name,field,limit,order,where,sql,key,mod','level'=>3), ); //定义查询数据库标签 public function _article($attr,$content) { $tag = $this->parseXmlAttr($attr,'article'); $result = !empty($tag['result'])?$tag['result']:'article'; //定义数据查询的结果存放变量 $key = !empty($tag['key'])?$tag['key']:'i'; $mod = isset($tag['mod'])?$tag['mod']:'2'; if ($tag['name']) { //根据用户输入的值拼接查询条件 $sql = "M('{$tag['name']}')->"; $sql .= ($tag['field'])?"field({$tag['field']})->":''; $sql .= ($tag['order'])?"order({$tag['order']})->":''; $sql .= ($tag['where'])?"where({$tag['where']})->":''; $sql .= "select()"; }else{ if (!$tag['sql']) return ''; //排除没有指定model名称,也没有指定sql语句的情况 $sql .= "M()->query('{$tag['sql']}')"; } //下面拼接输出语句 $parsestr = '<?php $_result='.$sql.'; if ($_result): $'.$key.'=0;'; $parsestr .= 'foreach($_result as $key=>$'.$result.'):'; $parsestr .= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>'; $parsestr .= $content;//解析在article标签中的内容 $parsestr .= '<?php endforeach; endif;?>'; return $parsestr; } } ?></liu21st>
<?php return array( 'article'=>'@.TagLib.TagLibarticle', ); ?>
<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='stylesheet' type='text/css' href='__PUBLIC__/Css/common.css'> </head> <body> <div 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='3'> <hr> 示例源码<br/>控制器自定义标签类<br/> <php>highlight_file(LIB_PATH.'TagLib/TagLibarticle.class.php');</php></td> </tr> </table> </div> </body> </html>
Es ist nur ein kleines Problem
2. Benutzerdefinierte Tag-Bibliothek automatisch importieren
Fügen Sie Folgendes hinzu:zur Datei config.php
'TAGLIB_PRE_LOAD' => 'article' ,
Ich habe ein paar Mal im offiziellen TP-Forum gesucht und festgestellt, dass es nur einen Weg gibt, das Problem zu lösen: Importieren mit Aliasen, das heißt, den Importpfad unter commonn/alias.php im TP-Framework hinzufügen:
Zum Beispiel:
Also dachte ich darüber nach, Action:
zu importieren
Fügen Sie den Import in die Basisklasse Ihres Projekts BaseAction.class.php ein:
function _initialize() { import("@.Mylibs.Tag.TagLibArticle"); }
Diese Lösung ist einfach und benutzerfreundlich.
Ergänzung:
Die Verwendung der automatischen Ladekonfiguration von TP ist schneller:
'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.',
Endgültiger Plan:
1. Erstellen Sie Mylibs.Tag.TagLibTest – benutzerdefinierte Tag-Bibliothek2. Konfiguration:
'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.', 'TAGLIB_PRE_LOAD' => 'test' ,
Leser, die an weiteren thinkPHP-bezogenen Inhalten interessiert sind, können sich die speziellen Themen dieser Website ansehen: „ThinkPHP Erste Schritte Tutorial“, „ThinkPHP Template Operation Skills Summary“, „ThinkPHP Common Methods Summary“, „Smarty Template Basic Tutorial“ und „Zusammenfassung der PHP-Template-Technologie“.
Ich hoffe, dass dieser Artikel für jedermann bei der PHP-Programmierung basierend auf dem ThinkPHP-Framework hilfreich sein wird.