次のチュートリアル コラムでは、ThinkPHP5.1 カスタム タグの解析の使い方を紹介します。困っている友人の役に立てば幸いです。
最近、カスタム タグを使用する必要があるプロジェクトがあります。TP は 5.1 を使用しています。5.1 では、5.0 と比較してディレクトリ構造と手順が大幅に変更されていることに注意してください。バージョンに注意してください。本題に入りましょう。1. タグ関数ファイルを作成します
モデル ディレクトリにディレクトリ tabLib を作成し、ディレクトリに Cms.php を作成します
namespace app\cms\tagLib; use think\Db; use think\template\TagLib; class Cms extends TagLib{ protected $tags = [ //标签定义: attr 属性列表,close 是否闭合(0或1,默认1),alias标签别名 level嵌套层次 'lists' => ['attr' => 'num,order,sort'], ]; // 当不使用content的时候,闭合标签没有效果 // 修改过此文件后,需要改动下模板的内容,否则模板有缓存不会执行新的内容。 public function tagLists($tag,$content){ $cateID = $tag['cate_id']; //栏目ID $num = $tag['num']; //数量 $order = input($tag['order']); //排序方式 $type = $cateID; $name = $tag['name']; $tableName = 'table_name'; $parse = '<?php $map=[];'; $parse .= '$__LIST__ = Db::name('.$tableName.')->where(["cate_id"=>'. $cateID .']) ->limit('.$num.') ->select(); ?>'; $parse .= '{volist name="__LIST__" id="'. $name .'"}'; $parse .= $content; $parse .= "{/volist}"; return $parse; }
開発中に発生した疑問:
1. 上記の tagLists 関数は、protected $tags のタグ定義に対応します。大文字小文字に注意してください。そうしないと、関数が見つかりません。
2. $parse 内のすべての文字は組み立てられた文字列です。この文字列は TP のテンプレート タグによって再度解析されるため、その中で TP のオリジナルのタグやネイティブの PHP ステートメントを使用できます。ただし、外部の配列やオブジェクトをパラメータとして $param に渡すことはできず、それはアセンブリに使用される単なる文字列であることを理解しておく必要があります。 $__LIST__ 変数の使用に注意してください。データベースからデータを読み取る場合は、完全な PHP コードを作成する必要があります。クエリを外部で実行して、クエリされたリストを変数として渡すことはできません。
2. このタグ関数をテンプレート設定情報に読み込みます
モジュール cms/config/template.php に次の文を追加します:
'taglib_pre_load' => 'app\cms \tagLib\Cms',このファイルがない場合は、ルート ディレクトリの config ディレクトリにあるテンプレートをコピーし、cms/config ディレクトリに配置できます。 3. テンプレートでタグを使用します。
{cms:lists name="row" num="10" cate_id="5" order="1"} <li>{$row.title}</li> {/cms:lists}
Name、num、cate_id およびその他の属性は、tagList の最初のパラメーター $tags として渡されます。 {cms:lists} と {$/cms:lists} の間のコンテンツは、完全な文字列 $content として tagLists の 2 番目のパラメータに渡されます。
注: ここには閉じたタグと閉じていないタグがあります。閉じたタグの場合は (1) のコンテンツを使用する必要があります。閉じていないタグの場合は、(1) のコンテンツを使用する必要はありません。それ。 content 変数を使用しない場合、閉じたタグ {/cms:lists} はそのまま出力され、解析されません。
ページングリストの問題は今のところ混乱が多く、まだ検討中なので、検討が完了したら追記します。
補足: tagList の $tag[] 配列で取得したデータに対してデータ型変換を行わないでください。変数を渡すと、この変数は有効になりません。 !したがって、ここで intval($tag[num]) を使用するのは間違いです。以上がThinkPHP5.1 カスタム タグの使用を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。