>  기사  >  PHP 프레임워크  >  ThinkPHP5.1 사용자 정의 태그 사용 분석

ThinkPHP5.1 사용자 정의 태그 사용 분석

藏色散人
藏色散人앞으로
2021-01-18 15:04:333114검색

다음 튜토리얼 칼럼인 thinkphp에서는 ThinkPHP5.1 커스텀 태그 파싱 사용법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

ThinkPHP5.1 사용자 정의 태그 사용 분석

최근에는 사용자 정의 태그를 사용해야 하는 프로젝트가 있습니다. TP는 5.1을 사용합니다. 5.1은 5.0에 비해 디렉토리 구조와 절차가 크게 변경되었습니다. 버전에 주의하세요. 요점을 살펴 보겠습니다.

1. 태그 함수 파일을 생성합니다.

모델 디렉토리에 tabLib 디렉토리를 생성하고,

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 = &#39;<?php $map=[];&#39;;
        $parse .= &#39;$__LIST__ = Db::name(&#39;.$tableName.&#39;)->where(["cate_id"=>&#39;. $cateID .&#39;])
            ->limit(&#39;.$num.&#39;)
            ->select(); ?>&#39;;
        $parse .= &#39;{volist name="__LIST__" id="&#39;. $name .&#39;"}&#39;;
        $parse .= $content;
        $parse .= "{/volist}";
        return $parse;
    }

디렉토리에 Cms.php를 생성합니다. 개발 중 발생한 의심:

1 위의 tagLists 함수는 보호된 $에 해당합니다. 태그 라벨을 정의할 때 대문자 사용에 주의하세요. 그렇지 않으면 해당 기능을 찾을 수 없습니다.

2. $parse의 모든 문자는 조합된 문자열입니다. 이 문자열은 TP의 템플릿 태그에 의해 다시 구문 분석되므로 TP의 원래 태그 또는 기본 PHP 문을 사용할 수 있습니다. 그러나 외부 배열이나 객체를 $param에 매개변수로 전달할 수는 없습니다. 이는 단지 어셈블리에 사용되는 문자열일 뿐이라는 점을 알아야 합니다. $__LIST__ 변수의 사용에 주의하세요. 데이터베이스에서 데이터를 읽으려면 완전한 PHP 코드를 작성해야 하며 외부에서 쿼리를 실행한 다음 쿼리된 목록을 변수로 전달할 수 없습니다.

2. 템플릿 구성 정보에 이 태그 기능을 로드합니다.

cms/config/template.php 모듈에 문장을 추가합니다: 'taglib_pre_load' => 'appcmstagLibCms',

이 파일이 없는 경우, 루트 디렉터리의 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의 두 번째 매개변수에 전달됩니다.

참고: 여기에는 닫히는 태그와 닫히지 않는 태그가 있습니다. 닫히지 않는 태그인 경우에는 (1)의 내용을 사용해야 합니다. 콘텐츠 변수를 사용하지 않으면 닫힌 태그 {/cms:lists}가 있는 그대로 출력되며 구문 분석되지 않습니다.

현재 혼란이 너무 많아 페이지 매김 목록 문제는 아직 연구 중입니다. 연구가 완료되면 추가하겠습니다.

보충: tagList의 $tag[] 배열에서 얻은 데이터에 대해 데이터 유형 변환을 수행하지 마십시오. 변수가 전달되면 이 변수가 적용되지 않기 때문입니다! ! 따라서 여기서 intval($tag[num]) 을 사용하는 것은 잘못된 것입니다.

위 내용은 ThinkPHP5.1 사용자 정의 태그 사용 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제