ThinkPHP的标签制作实例讲解

thinkphp的默认标签解析器在Lib/Template/TagLib/TagLibCx.class

里面定义了常用的volist php 等常用thinkphp的标签

这里笔者在这个类中添加一个<category>的标签解析

标签格式:

<category parentid='0' ><{$cat.catname}></category>

标签作用:

循环输出父类id是parentid的栏目

1.在tagLibCx.class 的私有属性中添加

'category'=array('attr'=>'parentid',level=>3)

其中attr:标签的属性 level标签的嵌套层次

2.添加解析函数

标签的解析原理就是通过读取xml文件得到相应的信息,然后再拼凑成所需要的

php源代码,最后通过echo 在页面上输出

具体代码如下:

public function _category($attr,$content)
{
//把标签的所有属性解析到$tag数组里面
$tag = $this->parseXmlAttr($attr,'category');

//得到标签里面的属性
$parentid= $tag['parentid'];

//定义页面解析的变量
$result = !empty($tag['result'])?$tag['result']:'cat'; //定义数据查询的结果存放变量
$key = !empty($tag['key'])?$tag['key']:'i';
$mod = isset($tag['mod'])?$tag['mod']:'2';

//拼凑数据库查询语句 这里直接用了CategoryModel封装好的函数
$sql = "D('Category')->";
$sql .= "getCategorys(".$parentid.')';

//拼凑输出字符
$parsestr = '<?php $_result='.$sql.'; if ($_result): $'.$key.'=0;';
$parsestr .= 'foreach($_result as $key=>$'.$result.'):';
$parsestr .= '++$'.$key.';$mod = ($'.$key.' % '.$mod.' );?>';
$parsestr .= $content;//解析在category标签中的内容
$parsestr .= '<?php endforeach; endif;?>';
return $parsestr;

}

CategoryModel中的getCategorys方法
/*
* 根据parentid得到栏目信息
* $parentid 父id
* $withSelf 是否包含自己
*/

public function getCategorys($parentid,$withSelf=0)
{
$parentid=intval($parentid);
$categorys=$this->where(array('parentid'=>$parentid,'ismenu'=>1))->order('listorder ASC')->select();
//包含自己
if($withSelf)
{
$categorys2=$this->where(array('id'=>$parentid,'ismenu'=>1))->limit(1)->select();
$category=array_merge($categorys,$categorys2);
}
return $categorys;

}

3.页面上的引用<category parentid='0'><{$cat.catname}></category>这样一个标签就做好了 ^_^!就可以甩掉那个volist在页面上动态输出我们想要的东西了

到此这篇关于ThinkPHP的标签制作实例讲解的文章就介绍到这了,更多相关ThinkPHP的标签制作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • thinkphp的钩子的两种配置和两种调用方法

    thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp的核心文件中模仿核心行为类添加了另一个行为类,下面是截图: 我的虚拟主机配置文件夹是D:/

  • thinkphp诸多限制条件下如何getshell详解

    前言 先说说2020_n1CTF的web题Easy_tp5复现问题. 这个题在保留thinkphp的RCE点的同时,并且RCE中ban掉许多危险函数,只能允许单参数的函数执行.对于现在在网络中流传的文件包含的点也增加了限制. smile yyds! 先说一下这个题限制条件: thinkphp版本:5.0.0 php版本:7 对于包含文件增加了限制 ban掉所有的单参数危险函数 设置open_basedir为web目录 设置仅在public目录下可写 在TP5.0.0的中,目前公布的只是存在利用R

  • ThinkPHP6.0如何利用自定义验证规则规范的实现登陆

    1.写在前面 这学期因为各种课内考试,竞赛活动,项目,(和女朋友约会 )

  • MVC+EasyUI+三层新闻网站建立 tabs标签制作方法(六)

    MVC新闻网站建立,完成tabs标签的制作. 首先对 Center 进行一个简单的布局 <!--------------中间布局开始----------------> <div data-options="region:'center',title:'Center'" > <div class="easyui-tabs" style="width:700px;height:250px" fit="true&

  • ThinkPHP6通过Ucenter实现注册登录的示例代码

    在和ucenter通信成功后,实现注册登录就非常简单了.简要记录如下. 1 新建一个controller用来继承Ucenter\Controller\UcController,并新建构造方法,用来实例化UcController <?php declare (strict_types = 1); namespace app\controller; use Ucenter\Controller\UcController; class uc extends UcController { /** * 构

  • ThinkPHP标签制作教程

    本文以实例讲解了ThinkPHP标签的制作方法,对于ThinkPHP的初学者或者开发人员都有一定的借鉴价值. 一般来说,ThinkPHP的默认标签解析器在Lib/Template/TagLib/TagLibCx.class(2.1版本位于ThinkPHP/Lib/Think/Template/TagLib/TagLibCx.class.php)中,里面定义了常用的如volist php 等常用ThinkPHP的标签 这里我们就在这个类中添加一个<category>的标签解析.   一.标签格式

  • ThinkPHP的标签制作实例讲解

    thinkphp的默认标签解析器在Lib/Template/TagLib/TagLibCx.class中 里面定义了常用的volist php 等常用thinkphp的标签 这里笔者在这个类中添加一个<category>的标签解析 标签格式: <category parentid='0' ><{$cat.catname}></category> 标签作用: 循环输出父类id是parentid的栏目 1.在tagLibCx.class 的私有属性中添加 'ca

  • ThinkPHP菜单无极分类实例讲解

    效果图如下 controller控制器代码:  /** * 菜单列表 */ public function index(){ $menuList= Db::name('menu')->order('sort,id')->select(); //递归排序 $menuList= $this->sort($menuList); $this->assign('menuList',$menuList); return view(); } protected function sort($da

  • ThinkPHP之A方法实例讲解

    ThinkPHP的A方法用于在内部实例化控制器,其调用格式为: A('[项目://][分组/]模块','控制器层名称') 最简单的用法: $User = A('User'); 表示实例化当前项目的UserAction控制器(这个控制器对应的文件位于Lib/Action/UserAction.class.php),如果采用了分组模式,并且要实例化另外一个Admin分组的控制器可以用: $User = A('Admin/User'); 也支持跨项目实例化(项目的目录要保持同级) $User = A(

  • 对python制作自己的数据集实例讲解

    一.数据集介绍 点击打开链接17_Category_Flower 是一个不同种类鲜花的图像数据,包含 17 不同种类的鲜花,每类 80 张该类鲜花的图片,鲜花种类是英国地区常见鲜花.下载数据后解压文件,然后将不同的花剪切到对应的文件夹,如下图所示: 每个文件夹下面有80个图片文件. 二.使用的工具 首先是在tensorflow框架下,然后介绍一下用到的两个库,一个是os,一个是PIL.PIL(Python Imaging Library)是 Python 中最常用的图像处理库,而Image类又是

  • Thinkphp模板标签if和eq的区别和比较实例分析

    本文实例讲述了Thinkphp模板标签if和eq的区别和比较.分享给大家供大家参考.具体分析如下: 在TP模板语言中.if和eq都可以用于变量的比较.总结以下几点: 1.两个变量的比较: <if condition="$item.group_id eq $one.group_id"> <eq name="item.group_id" value="$one.group_id"> 前者的IF是判断失败的,用后者的<ne

  • jQuery制作全屏宽度固定高度轮播图(实例讲解)

    前端新手自己写的,练习一下基本功,也是留下的第一次记录 html部分 div class="cm-banner"> <div class="cm-banner-list"> <ul id="cm_banner_list"> <!--图片宽度和高度在css中定为1920x300--> <li><img src="cm-banner-01.png" /></l

  • jQuery获取table表中的td标签(实例讲解)

    首先我来介绍一下我遇到的问题 1.当有一个table表包含了<tr>标签,<td>标签,大致可以认为是这样的: <tr> <td> @scene.ID </td> <td> @scene.SceneName </td> <td> @scene.QRUrl </td> <td> @scene.LocalUrl </td> <td> <!--如果有图片,展示图片

  • js + css实现标签内容切换功能(实例讲解)

    先附上效果图和代码: html 文档: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../js/tabs_function.js"></scri

  • jQuery 循环遍历改变a标签的href(实例讲解)

    把info类下面所有的a标签链接后天加"#article". jQuery(document).ready(function($){ $('.info a').each(function(){ let Ahref = $(this).html() + "#article"; $(this).attr("href",Ahref); }); }); 以上这篇jQuery 循环遍历改变a标签的href(实例讲解)就是小编分享给大家的全部内容了,希望能给

随机推荐