In diesem Artikel wird hauptsächlich die Importmethode der benutzerdefinierten Tag-Bibliothek von thinkPHP2.1 vorgestellt und die Definition, Verwendung und automatischen Importtechniken der thinkPHP-Tag-Bibliothek im Detail analysiert. Freunde in Not können sich auf
Diesen Artikel beziehen Details Beschreibt die Importmethode der benutzerdefinierten Tag-Bibliothek von thinkPHP2.1. Ich teile es Ihnen als Referenz mit:
Das Handbuch von TP scheint nicht in der Lage zu sein, mit dem Rhythmus Schritt zu halten. Es enthält nur ein paar Worte zu benutzerdefinierten Tags , Ich habe endlich die benutzerdefinierten Tags importiert Kennen Sie den Pfad, der durch
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>
dargestellt wird. Erstellen Sie dann eine neue taglibs.php-Datei im Conf-Verzeichnis unter dem Projekt , Inhalt:
<?php return array( 'article'=>'@.TagLib.TagLibarticle', ); ?>
So können Sie es in der Vorlage verwenden:
<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> <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='3'> <hr> 示例源码<br/>控制器自定义标签类<br/> <php>highlight_file(LIB_PATH.'TagLib/TagLibarticle.class.php');</php></td> </tr> </table> </p> </body> </html>
Dies ist eine sehr einfache Situation, aber ich frage mich: Die definierte Tag-Bibliothek kann automatisch importiert werden, sodass es nicht erforderlich ist, Tags wie
Es ist nur ein kleines Problem aufgetreten
2. Importieren Sie die benutzerdefinierte Tag-Bibliothek automatischFügen Sie sie in die Datei config.php ein :
'TAGLIB_PRE_LOAD' => 'article' ,
Leere den Cache und es erscheint die Fehlermeldung „Instanziiere eine nicht vorhandene Klasse!“ ;
Ich habe im offiziellen TP-Forum gesucht für ein paar Mal und stellte fest, dass es nur einen Weg gibt, das Problem zu lösen: Importieren mit Aliasen, also im TP-Framework. Fügen Sie den Importpfad unter commonn/alias.php hinzu:
wie zum Beispiel:
'TagLibArticle' => THINK_PATH.'/Lib/Think/Template/TagLib/TagLibArticle.class.php',
Es gibt auch einige Lösungen zum Ändern des Quellcodes der Template-Klasse, die nicht einfach zu verwenden sind – da ich mich normalerweise nicht um ein kleines Problem kümmern möchte, das den Kern ändert.
Also dachte ich über den Import von Action nach:
Fügen Sie den Import in Ihrer eigenen Projektbasisklasse BaseAction.class.php hinzu:
function _initialize() { import("@.Mylibs.Tag.TagLibArticle"); }
Cache aktualisieren, Problem gelöst...
Diese Lösung ist einfach und benutzerfreundlich.
Ergänzung:Verwenden Sie die automatische Ladekonfiguration von TP ist schneller:
'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.',
1. Erstellen Sie Mylibs.Tag.TagLibTest – Benutzerdefinierte Tag-Bibliothek2. Konfiguration:
'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.', 'TAGLIB_PRE_LOAD' => 'test' ,
Es kann nach dem Löschen des Caches normal verwendet werden.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Einführung in die Callback-Methode des ThinkPHP-Framework-Andockens an die Sofortzahlungsschnittstelle von AlipayHäufig verwendetes System in thinkphp Einführung in Konstanten und Systemvariablen
ThinkPHPs Methode zum Schreiben von Array-Einfügungen und zum Abrufen der zuletzt eingefügten Daten-ID
Das obige ist der detaillierte Inhalt vonEinführung in die Importmethode der benutzerdefinierten Tag-Bibliothek von thinkPHP2.1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!