搜索
系统检测到您的用户名不符合规范:

树标签

浏览:1428 发布日期:2016年07月15日 分类:功能实现 关键字: 树标签 树tag treetag votree
树tag,treetag,votree,
捣鼓了两天才弄出来,不熟悉,有可以改进的地方,需要的可以下载
先贴效果图
<?php
namespace Common\TagLib;
use Think\Template\TagLib;

/**
* Zui 标签库
*/
class Zui extends TagLib {

/**
* 定义标签列表
* @var array
*/
protected $tags = array('votree' => array(
'attr' => 'name,id,offset,length,key,mod',
'level' => 3
));

/**
* votree标签解析 循环输出数据集树
* 格式:
* <votree name="userList" id="user" empty="" >
* {user.username}
* {user.email}
* </votree>
* @access public
* @param array $tag 标签属性
* @param string $content 标签内容
* @return string|void
*/
public function _votree($tag, $content) {
$name = $tag['name'];
$id = $tag['id'];
$empty = isset($tag['empty']) ? $tag['empty'] : '';
$key = !empty($tag['key']) ? $tag['key'] : 'i';
$mod = isset($tag['mod']) ? $tag['mod'] : '2';
// 允许使用函数设定数据集 <volist name=":fun('arg')" id="vo">{$vo.name}</volist>
$parseStr = '<?php ';
if (0 === strpos($name, ':')) {
$parseStr .= '$_result=' . substr($name, 1) . ';';
$name = '$_result';
}
else {
$name = $this -> autoBuildVar($name);
}
$parseStr .= 'if(is_array(' . $name . ')): $' . $key . ' = 0;';
if (isset($tag['length']) && '' != $tag['length']) {
$parseStr .= ' $__LIST__ = array_slice(' . $name . ',' . $tag['offset'] . ',' . $tag['length'] . ',true);';
}
elseif (isset($tag['offset']) && '' != $tag['offset']) {
$parseStr .= ' $__LIST__ = array_slice(' . $name . ',' . $tag['offset'] . ',null,true);';
}
else {
$parseStr .= ' $__LIST__ = ' . $name . ';';
}
$parseStr .= 'if( count($__LIST__)==0 ) : echo "' . $empty . '" ;';
$parseStr .= 'else: ';

$parseStr .= 'zui_votree(';
$parseStr .= 'function($' . $key . ',$' . $id . ',$mod,$contype){ ?>';
$parseStr .= $this -> tpl -> parse($content);
$parseStr .= '<?php }';
$parseStr .= ',';
$parseStr .= '$__LIST__';
$parseStr .= ',';
$parseStr .= $mod;
$parseStr .= '); ?>';

$parseStr .= '<?php endif; else: echo "' . $empty . '" ;endif; ?>';

if (!empty($parseStr)) {
return $parseStr;
}
return;
}

}
list_to_tree函数代码/**
* 把返回的数据集转换成Tree
* @param array $list 要转换的数据集
* @param string $pid parent标记字段
* @param string $level level标记字段
* @return array
*/
function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) {
// 创建Tree
$tree = array();
if (is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] = &$list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] = &$list[$key];
}
else {
if (isset($refer[$parentId])) {
$parent = &$refer[$parentId];
$parent[$child][] = &$list[$key];
}
}
}
}
return $tree;
}
zui_votree函数实现/**
* zui_votree循环
* $content 模版循环内容
* $treedata为list_to_tree的结果
* $callback参数 $key,$id,$mod,$contype(0中间、1开始、2结束)
*/
function zui_votree($callback, $treedata, $mod, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) {
$i = 0;
$j = count($treedata);
if ($j > 0) {
$j = $j - 1;
foreach ($treedata as $tempkey => $tempid) {
$modval = $tempkey % $mod;
$haschild = (is_array($tempid) && !empty($tempid[$child]));
if ($haschild) {
call_user_func($callback, $tempkey, $tempid, $modval, 1);
}
else
call_user_func($callback, $tempkey, $tempid, $modval, 0);
if (is_array($tempid) && !empty($tempid[$child])) {
$res .= zui_votree($callback, $tempid[$child], $mod, $pk, $pid, $child, $root);
}
++$tempkey;
if ($haschild)
call_user_func($callback, $tempkey, $tempid, $modval, 2);
}
}
}
使用方法<ul class="tree tree-lines tree-chevrons" data-ride="tree">
<zui:votree name="_data" id="group">
<switch name="contype" >
<case value="1">
<li>
<a href="#">{$group.title}2</a>
<ul>
</case>
<case value="2">
</ul>
</li>
</case>
<default />
<li>
<a href="#">{$group.title}1</a>
</li>
</switch>
</zui:votree>
</ul>
收藏
80小暴躁
积分:390 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /