찾다
php教程php手册thinkphp3.1自定义模板标签嵌套实现

thinkphp3.1自定义模板标签嵌套实现
之前做的自定义标签,属性里面读取不到上层标签的值,然后找了很多文档发现没有能解决的,然后就自己研究了一下,搞出来了,下面是方法,绝对能用,不能用我吃了它。
原理:外层标签获取标签内的标签,提取标签内字符串以及标签属性,发送给嵌套的标签类进行处理

模板调用方法
thinkphp3.1自定义模板标签嵌套实现
页面显示效果
thinkphp3.1自定义模板标签嵌套实现
废话不多说,看代码

首先关于taglib的标签制作我就不多说了,不懂的看我之前写的文档

http://www.90coder.com/php/2015/07/12/31.html

下面是外层标签的写法public function _channel($attr,$content){<br>         $attr = $this->parseXmlAttr($attr);<br>         //变量读取<br>         $tid   = $attr['tid'];<br>         $tid   = ($tid)?$tid:$_GET['gid'];<br>         $row   = $attr['row'];<br>         $pc       = $attr['pc'];<br>         $load  = $attr['load'];<br>         $limit = $attr['limit'];<br>         $order = $attr['order'];<br>         <br>         /*<br>             这里排序,读取条件什么的逻辑就不再细表,根据你自己的需求写<br>         */<br>         //读取数据<br>         $list = M("diycate")->where($w)->limit($limit)->order($order)->select();<br>         //对数据简单处理<br>         for($i=0;$i<count></count>             $array[$i] = $list[$i];<br>             $array[$i][i] = $i+1;<br>             $array[$i]['arcurl'] = U('News/slist','gid='.$list[$i]['gid']);<br>         }<br>         //读取标签<br>         preg_match_all('/\[channel:(.*?)\]/',$content,$arry); //读取标签<br>         $tag = $arry[0]; //匹配标签<br>         $key = $arry[1]; //标签字段<br>         $str='';<br>         for($i=0;$i<count></count>         {<br>             $c = $content; //读取模板内容<br>             //替换标签<br>             foreach($tag as $k=>$v){<br>                 //分割字符串,如果有函数那么执行函数后在输出<br>                 $arr = explode('|',$key[$k]);<br>                 $th = $array[$i][$arr[0]];<br>                 if($arr[1]){<br>                     $arr[1] = str_replace('###',$array[$i][$arr[0]],$arr[1]);<br>                     $a = '$th'." =$arr[1]";<br>                     eval($a.';');<br>                 }<br>                 $c = str_replace($v,$th,$c);<br>                 /*<br>                 重点来了,下面的函数指明了允许使用的标签,channel:为嵌套标签的关键字后面跟你之前定义标签名,第一个标签<br>                 里面的变量为上放标签最后得到的字符串,后面要继承沿用上级函数变量,才能使用多个标签。<br>                 */<br>                 //嵌套标签<br>                 $r = TagLib_XML('channel:catelist',$c);<br>                 $r = TagLib_XML('channel:wdlist',$r);<br>             }<br>             $str.=$r;<br>         }<br>         return $str;<br>     }跟给标签配套的函数//标签引擎<br> function TagLib_XML($tag,$content){<br>     //检索标签<br>     preg_match_all('/\/',$content,$arry);<br>     $tou  = $arry[0]; <br>     $attr = $arry[1];<br>     $fot  = ''.$tag.'>';<br>     $tag = explode(':',$tag);<br>     <br>     //声明可用嵌套标签 这里定义所有可以使用的标签,格式 '标签class类'=> '标签' 注意这里的标签不能加下划线'_'<br>     $tagset = array(<br>         'TagLibCate' => 'catelist,cateinfo',<br>         'TagLibWd'     => 'wdlist,wdinfo,wdpic,wdtjyd',<br>     );<br>     <br>     //检测该标签是否可用<br>     $obj = array_search_str($tag[1],$tagset); //这是一个自定义数组函数 查询字符串是否在数组中存在<br>     if(!$obj){ return $content; break;} //这里检测是否可用<br>     <br>     //模板数据处理<br>     $c = $content;<br>     for($i=0; $i<count></count>         /*找出要替换的标签例如<br>         channel:catelist tid="[channel:gid]"><br>         <a>[tag:name]</a><br>         <br>         */<br>         $str = strstr($content,$tou[$i]); <br>         $str = str_replace($tou[$i],'',$str);<br>         $str = strstr($str,$fot,true);<br>         <br>         //执行替换操作<br>         $run = '$ceshi = new '.$obj.';$runstr = $ceshi->_'.$tag[1].'($attr['.$i.'],$str);';<br>         eval($run.';');<br>         $strstr = $tou[$i].$str.$fot;<br>         $c = str_replace($strstr,$runstr,$c);<br>         <br>     }<br>     return $c;<br> }<br> /*<br>  *    查找数组中元素是否包含某个字符串,返回键<br>  */<br> function array_search_str($str,$arr){<br>     foreach($arr as $k=>$v){<br>         if(strstr($v,$str)){return $k;break;}<br>     }<br>     <br> }上面的代码有点功底的就可以看懂

AD:真正免费,域名+虚机+企业邮箱=0元

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.