Detailed explanation of the import method of thinkPHP2.1 custom tag library_php example

WBOY
Release: 2016-08-04 08:56:51
Original
977 people have browsed it

This article details the import method of thinkPHP2.1 custom tag library. Share it with everyone for your reference, the details are as follows:

TP’s manual seems to be unable to keep up with the pace. It only has a few words about custom tags. After fumbling for a long time, I finally imported the custom tags. My thoughts are as follows:

1. Situation: Create a new custom tag library class: @.Mylib.Tag.TagLibTest — Those who understand TP should know the path represented by this

Use the Tag demo file under Examples

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

Copy after login

Then create a new taglibs.php file in the Conf directory under the project, content:

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

Copy after login

This way you can use it in the template:

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

Copy after login

This is a very simple situation, but my idea is to require the custom tag library to be automatically imported, so that there is no need to add tags like in the first line of each template

Just encountered a little problem

2. Automatically import custom tag library

Add in the config.php file:

'TAGLIB_PRE_LOAD' => 'article' ,

Copy after login

Clear cache, prompt error "Instantiate a non-existent class!" ;

I searched around the TP official forum for a few times and found that there is only one way to solve it: import using aliases, that is, add the import path under commonn/alias.php in the TP framework:

For example:

Copy the code The code is as follows:
'TagLibArticle' => THINK_PATH.'/Lib/Think/Template/TagLib/TagLibArticle.class.php',

There are also some solutions to modify the source code of the Template class, which are not easy to use — because usually I don’t want to modify the core for a small problem.

So I thought of the import of Action:

Add import into your project base class BaseAction.class.php:

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

Copy after login

Refresh cache, problem solved...

This solution is simple and easy to use.

Added:

Using TP’s automatic loading configuration is faster:

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

Copy after login

Final plan:

1. Create Mylibs.Tag.TagLibTest — custom tag library

2. Configuration:

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

Copy after login

You can use it normally after deleting the cache.

Readers who are interested in more thinkPHP related content can check out the special topics of this site: "ThinkPHP Getting Started Tutorial", "ThinkPHP Template Operation Skills Summary", "ThinkPHP Common Methods Summary", "Smarty Template Basic Tutorial" and "PHP Template Technology" Summarize".

I hope this article will be helpful to everyone’s PHP program design based on the ThinkPHP framework.

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!