Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Importmethode des Beispiels für das benutzerdefinierte Tag „library_php' von thinkPHP2.1

Detaillierte Erläuterung der Importmethode des Beispiels für das benutzerdefinierte Tag „library_php' von thinkPHP2.1

WBOY
WBOYOriginal
2016-08-04 08:56:51998Durchsuche

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

<&#63;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'])&#63;$tag['result']:'article'; //定义数据查询的结果存放变量
  $key = !empty($tag['key'])&#63;$tag['key']:'i';
  $mod = isset($tag['mod'])&#63;$tag['mod']:'2';
  if ($tag['name'])
  { //根据用户输入的值拼接查询条件
   $sql = "M('{$tag['name']}')->";
   $sql .= ($tag['field'])&#63;"field({$tag['field']})->":'';
   $sql .= ($tag['order'])&#63;"order({$tag['order']})->":'';
   $sql .= ($tag['where'])&#63;"where({$tag['where']})->":'';
   $sql .= "select()";
  }else{
   if (!$tag['sql']) return ''; //排除没有指定model名称,也没有指定sql语句的情况
   $sql .= "M()->query('{$tag['sql']}')";
  }
  //下面拼接输出语句
  $parsestr = '<&#63;php $_result='.$sql.'; if ($_result): $'.$key.'=0;';
  $parsestr .= 'foreach($_result as $key=>$'.$result.'):';
  $parsestr .= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );&#63;>';
  $parsestr .= $content;//解析在article标签中的内容
  $parsestr .= '<&#63;php endforeach; endif;&#63;>';
  return $parsestr;
 }
}
&#63;></liu21st>

Erstellen Sie dann eine neue taglibs.php-Datei im Conf-Verzeichnis unter dem Projekt, Inhalt:

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

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>
 <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>

Dies ist eine sehr einfache Situation, aber meine Idee ist, dass die benutzerdefinierte Tag-Bibliothek automatisch importiert wird, sodass es nicht nötig ist, etwas wie b62b76393bf80bcc9a22131e73e6ddfa hinzuzufügen jeder Vorlage markiert.

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' ,

Cache leeren, Fehlermeldung „Instanziieren einer nicht vorhandenen Klasse!“ ;

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:

Code kopieren Der Code lautet wie folgt:
'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 den Kern normalerweise nicht für ein kleines Problem ändern möchte.

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");
}

Cache aktualisieren, Problem gelöst...

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-Bibliothek

2. Konfiguration:

'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.',
'TAGLIB_PRE_LOAD' => 'test' ,

Sie können es nach dem Löschen des Caches normal verwenden.

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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn