thinkphp 3.2自定义标签

1配置标签:
在配置文件中加入  
   'TAGLIB_BUILD_IN'  =>  'cx,webshop', // webshop 为自定义标签类名称

2编写自定义标签类:
   
在thinkphp3.2 TagLib目录加入Webshop类,本自定义标签模仿tpshop,该类代码如下
namespace Think\Template\TagLib;
use Think\Template\TagLib;

/**
 * 自定义标签
 */

class Webshop extends TagLib {
	protected $tags = array(
		'adv' => array('attr'=>'limit,order,where,item,type','close'=>1),
	);


	/**
	 * 广告标签
	 * @access public
	 * @param array $tag 标签属性
	 * @param string $content  标签内容
	 * @return string
	 */
	public function _adv($tag,$content){
     	$order = $tag['order']; //排序
        $type = $tag['type'];     //显示方式
        //type 0轮播,1单张,2多张
        switch(intval($type)){
            case 0:  $limit = '';break;
            case 1:  $limit = '1';break;
            case 2:  $limit = $tag['limit'];break;
            default:
             $limit = '1';break;
        }
        $where = $tag['where']; //查询条件
        $item  = !empty($tag['item']) ? $tag['item'] : 'item';// 返回的变量item	
        $key  =  !empty($tag['key']) ? $tag['key'] : 'key';// 返回的变量key
        $pid  =  !empty($tag['pid']) ? $tag['pid'] : '0';// 返回的变量key
        $str = '<?php ';
        $str .= '$pid ='.$pid.';';
        $str .= '$result = M("banner")->field("bn.id,media_type,ad_name,ad_link,ad_code,link_man,link_email,link_phone,click_count,target,bgcolor,is_wap,ad_width,ad_height,position_style,is_open")
                ->table("__BANNER__ bn,__BANNER_COLUMN__ bc")->where("bn.pid = bc.id and pid=$pid and is_show = 1 and is_open = 1")
                ->order("bn.orderby asc,id")->cache(true,WEBSHOP_CACHE_TIME)->limit("'.$limit.'")->select();';
        $str .= '
            $c = '.$limit.'- count($result); //  如果要求数量 和实际数量不一样 添加默认广告
            if($c > 0)
            {
            $item = array(
                      "ad_link" => "http://www.webshop.com",
                      "ad_width"=>$result[0]["ad_width"],
                      "ad_height"=>$result[0]["ad_height"],
                      "ad_name"   =>"暂无广告图片",
                      "is_open"=>1,
                      "target" => 0,
                      "bgcolor"=>"#747474",
                  );
                if($c < "'.$limit.'"){
                    for($i = 0; $i < $c; $i++) // 广告数少于实际要求
                        {
                            array_push($result,$item);
                        }
                }else{
                    $bc = M("BannerColumn")->find("'.$pid.'");
                    for($i = 0; $i < $c; $i++) // 还没有添加任何广告
                        {
                            $item["ad_width"] = $bc["ad_width"];
                            $item["ad_height"] = $bc["ad_height"];
                            array_push($result,$item);
                        }
                }
            }
           ';
        $str .= 'foreach($result as $'.$key.'=>$'.$item.'):?>';
        $str .=  $this->tpl->parse($content);
        $str .= '<?php endforeach; ?>';
        return $str;
	}

3自定义标签说明:
	该自定义标签关联了两个表Banner 广告位表,BannerColumn广告表,广告位是广告的分类表,广告由广告位限制。

4自定义标签使用
   
  <adv type="2" item="v" pid="2" limit="12">
			  <if condition="$v['is_open'] eq 1">
				  <li>
					  <a href="{$v.ad_link}" <if condition="$v['target'] eq 1">target="_blank"</if>>
					  <img src="{:apiP($v['ad_code'],195,65)}"  width="195" height="65"  title="{$v['ad_name']}" style="<neq name='v.position_style' value=''>{$v[position_style]};</neq>background-color:{$v[bgcolor]}" />
					  </a>
				  </li>
			  </if>
		  </adv>
该自定义标签为adv,pid为广告位分类id,limit为显示数量位12,type=2为多图显示。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值