この記事では主に thinkPHP2.1 カスタム タグ ライブラリのインポート方法を紹介し、thinkPHP タグ ライブラリの定義、使用方法、および自動インポート関連のテクニックを詳細に分析します。この記事では、thinkPHP2.1カスタムタグライブラリのインポート方法について詳しく説明します。参考までにシェアします。詳細は以下の通りです。
TP のマニュアルはペースが追いついていないようです。カスタムタグについてはほんの少ししか書かれていません。長い間手探りした結果、 、最終的にカスタム タグをインポートしました。私の経験は次のとおりです:
1. 状況: 新しいカスタム タグ ライブラリ クラスを作成します:@.Mylib.Tag.TagLibTest — TP を理解している人は、この で表されるパスを知っているので、Examples
<?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>
にあるタグ デモ ファイルを使用します。次に、次の Conf ディレクトリに新しい taglibs.php ファイルを作成します。プロジェクト、コンテンツ:
<?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> <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>
これは非常に単純な状況ですが、私のアイデアは自問することです。定義されたタグ ライブラリは自動的にインポートできるため、最初の行に b62b76393bf80bcc9a22131e73e6ddfa のようなタグを追加する必要はありません。
##2. カスタム タグ ライブラリを自動的にインポートします。
これを構成に追加します。 php file:'TAGLIB_PRE_LOAD' => 'article' ,キャッシュをクリアすると、「存在しないクラスをインスタンス化します!」というエラーが表示されます ; TP 内を検索しました公式フォーラムを何度か調べたところ、解決方法は 1 つだけであることがわかりました。 エイリアスを使用してインポートする、つまり TP フレームワークでインポートする commonn/alias.php の下にインポート パスを追加します。 例:
'TagLibArticle' => THINK_PATH.'/Lib/Think/Template/TagLib/TagLibArticle.class.php',Template クラスのソース コードを変更するための解決策もいくつかありますが、通常は小さな問題について心配したくないため、これは使いやすいものではありません。コアを変更します。
そこで、Action のインポートを考えました:
インポートを独自のプロジェクトの基本クラス BaseAction.class.php:
function _initialize() { import("@.Mylibs.Tag.TagLibArticle"); }## に追加します。
#キャッシュを更新し、問題は解決しました...
この解決策はシンプルで使いやすいです。
補足:TP の自動を使用します。設定の読み込みが速くなります:
'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.',
1. Mylibs.Tag.TagLibTest の作成 — カスタム タグライブラリ
##2. 構成:##'APP_AUTOLOAD_PATH'=> 'Think.Util.,@.Mylibs.Tag.',
'TAGLIB_PRE_LOAD' => 'test' ,
# #以上がこの記事の全内容です。皆様の学習にお役に立てれば幸いです。関連コンテンツの詳細については、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
Alipay の即時支払いインターフェイスとドッキングする thinkPHP フレームワークのコールバック メソッドの紹介一般的に使用されるシステムthinkphp の定数とシステム変数の概要
ThinkPHP で配列挿入を記述し、最新の挿入データ ID を取得する方法
##
以上がthinkPHP2.1カスタムタグライブラリのインポート方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。