问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp无限极分类能分页显示吗

发布网友 发布时间:2022-04-27 06:59

我来回答

2个回答

热心网友 时间:2022-04-07 06:31

  TreeTable是一个能把无限分类展现为表格形式的PHP类库插件,分类的层级表示为表格的列,分类的行数表格分类的总数。单元格显示分类名称。

  TreeTable通过对单元格的行合并和列合并实现了无限层级也能较好的展示层级架构。

  1.构建ID/PID/NAME的数组,后期可通过数据库生成的动态数据。

  Tree算法请打开链接:http://www.oschina.net/code/snippet_99943_1452

  array(
  * 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
  * 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
  * 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
  * 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
  * 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
  * 6 => array('id'=>'6','parentid'=>3,'name'=>'*栏目一'),
  * 7 => array('id'=>'7','parentid'=>3,'name'=>'*栏目二')
  * )
  2. 导入TreeTable类库。

  import('@.ORG.Util.TableTree'); //Thinkphp导入方法
  3. 生成TreeTable HTML代码

  $treeTable->init($treearr);
  echo $treeTable->get_treetable();
  注意:get_treetable()只生产表体部门,<TALBE></TABLE>请自行构建。

  完整代码

  <?php
  /**
  * File name: TreeTable.class.php
  * Author: run.gao 312854458@qq.com Date: 2012-07-24 23:22 GMT+8
  * Description: 通用的表格无限级分类
  * */
  
  /**
  * 表格展示无限分类是将无线分类已表格的形式表现出来,更好的能体现出分类的所属关系
  * 使用方法:
  * 1. 实例化分类
  * $treeTable = new TreeTable();
  * 2. 初始化分类,$treearr必须是一个*数组且包含 id,parentid,name字段
  * $treeTable->init($treearr);
  * 3. 获取无限分类HTML代码
  * echo $treeTable->get_treetable();
  * */
  
  class TreeTable {
  /**
  * 生成树型结构所需要的2维数组
  * @var array
  */
  public $arr = array();
  
  /**
  * 表格列数
  * @var int
  */
  public $columns = 0;
  
  /**
  * 表格行数
  * @var int
  */
  public $rows = 0;
  
  /**
  * 初始化TreeTable数据
  * @param array 2维数组
  * array(
  * 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
  * 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
  * 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
  * 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
  * 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
  * 6 => array('id'=>'6','parentid'=>3,'name'=>'*栏目一'),
  * 7 => array('id'=>'7','parentid'=>3,'name'=>'*栏目二')
  * )
  */
  public function init($arr=array()){
  if(!is_array($arr)) return false;
  
  foreach ($arr as $k=>$v) {
  $this->arr[$v['id']] = $v;
  }
  
  foreach ($this->arr as $k => $v){
  $this->arr[$k]['column'] = $this->get_level($v['id']); // Y轴位置
  $this->arr[$k]['arrchildid'] = $this->get_arrchildid($v['id']); // 所有子节点
  $this->arr[$k]['arrparentid'] = $this->get_arrparentid($v['id']); // 所有父节点
  $this->arr[$k]['child_bottom_num'] = $this->get_child_count($v['id']); // 所有底层元素节点
  }
  
  $this->columns = $this->get_columns(); // 总行数
  $this->rows = $this->get_rows(); // 总列数
  
  // 按照arrparentid和id号进行排序
  $this->sort_arr();
  
  foreach ($this->arr as $k => $v){
  $this->arr[$k]['row'] = $this->get_row_location($v['id']); // X轴位置
  $this->arr[$k]['rowspan'] = $v['child_bottom_num']; // 行合并数
  $this->arr[$k]['colspan'] = $v['child_bottom_num'] == 0 ? $this->columns - $v['column'] + 1 : 0; //列合并数
  }
  
  return $this->get_tree_arr();
  }
  
  /**
  * 获取数组
  * */
  public function get_tree_arr(){
  return is_array($this->arr) ? $this->arr : false;
  }
  
  /**
  * 按arrparentid/id号依次重新排序数组
  * */
  public function sort_arr(){
  
  // 要进行排序的字段
  foreach ($this->arr as $k => $v){
  $order_pid_arr[$k] = $v['arrparentid'];
  $order_iscost[] = $v['sort'];
  $order_id_arr[$k] = $v['id'];
  }
  
  // 先根据arrparentid排序,再根据排序,id号排序
  array_multisort(
  $order_pid_arr, SORT_ASC, SORT_STRING,
  $order_iscost, SORT_DESC, SORT_NUMERIC,
  $order_id_arr, SORT_ASC, SORT_NUMERIC,
  $this->arr);
  
  // 获取每一个节点层次
  for ($column = 1; $column <= $this->columns; $column++) {
  $row_level = 0;
  foreach ($this->arr as $key => $node){
  if ($node['column'] == $column){
  $row_level++;
  $this->arr[$key]['column_level'] = $row_level;
  }
  }
  }
  
  // 重新计算以ID作为键名
  foreach ($this->arr as $k=>$v) {
  $arr[$v['id']] = $v;
  }
  
  $this->arr = $arr;
  }
  
  /**
  * 得到父级数组
  * @param int
  * @return array
  */
  public function get_parent($myid){
  $newarr = array();
  if(!isset($this->arr[$myid])) return false;
  $pid = $this->arr[$myid]['parentid'];
  $pid = $this->arr[$pid]['parentid'];
  if(is_array($this->arr)){
  foreach($this->arr as $id => $a){
  if($a['parentid'] == $pid) $newarr[$id] = $a;
  }
  }
  return $newarr;
  }
  
  /**
  * 得到子级数组
  * @param int
  * @return array
  */
  public function get_child($myid){
  $a = $newarr = array();
  if(is_array($this->arr)){
  foreach($this->arr as $id => $a){
  if($a['parentid'] == $myid) $newarr[$id] = $a;
  }
  }
  return $newarr ? $newarr : false;
  }
  
  /**
  * 获取当前节点所在的层级
  * @param $myid 当前节点ID号
  * */
  public function get_level($myid, $init = true){
  static $level = 1;
  if($init) $level = 1;
  if ($this->arr[$myid]['parentid']) {
  $level++;
  $this->get_level($this->arr[$myid]['parentid'], false);
  }
  return $level;
  }
  
  /**
  * 获取当前节点所有底层节点(没有子节点的节点)的数量
  * @param $myid 节点ID号
  * @param $init 第一次加载将情况static变量
  * */
  public function get_child_count($myid, $init = true){
  static $count = 0;
  if($init) $count = 0;
  if(!$this->get_child($myid) && $init) return 0;
  if($childarr = $this->get_child($myid)){
  foreach ($childarr as $v){
  $this->get_child_count($v['id'], false);
  }
  }else{
  $count++;
  }
  return $count;
  }
  
  /**
  * 获取节点所有子节点ID号
  * @param $catid 节点ID号
  * @param $init 第一次加载将情况static初始化
  * */
  public function get_arrchildid($myid, $init = true) {
  static $childid;
  if($init) $childid = '';
  if(!is_array($this->arr)) return false;
  foreach($this->arr as $id => $a){
  if($a['parentid'] == $myid) {
  $childid = $childid ? $childid.','.$a['id'] : $a['id'];
  $this->get_arrchildid($a['id'], false);
  }
  }
  return $childid ;
  }
  
  /**
  * 获取该节点所有父节点ID号
  * @param $id 节点ID号
  * */
  public function get_arrparentid($id, $arrparentid = '') {
  if(!is_array($this->arr)) return false;
  $parentid = $this->arr[$id]['parentid'];
  if($parentid > 0) $arrparentid = $arrparentid ? $parentid.','.$arrparentid : $parentid;
  if($parentid) $arrparentid = $this->get_arrparentid($parentid, $arrparentid);
  return $arrparentid;
  }
  
  /**
  * 获取节点所在地行定位
  * @param $myid 节点ID号
  */
  public function get_row_location($myid){
  $nodearr = $this->arr;
  // 获取每一个节点所在行的位置
  foreach ($nodearr as $key => $node){
  if($myid == $node['id']) {
  $node_row_count = 0;
  $arrparentid = explode(',', $node['arrparentid']);
  // 所有父节点小于当前节点层次的底层节点等于0的元素
  foreach ($arrparentid as $pid){
  foreach ($nodearr as $node_row){
  if($node_row['column'] == $nodearr[$pid]['column'] && $nodearr[$pid]['column_level'] > $node_row['column_level'] && $node_row['child_bottom_num'] == 0){
  $node_row_count ++;
  }
  }
  }
  // 所有当前节点并且节点层次(rowid_level)小于当前节点层次的个数
  foreach ($nodearr as $node_row){
  if($node['column'] == $node_row['column'] && $node_row['column_level'] < $node['column_level']){
  $node_row_count += $node_row['child_bottom_num'] ? $node_row['child_bottom_num'] : 1;
  }
  }
  $node_row_count++;
  break;
  }
  }
  return $node_row_count;
  }
  
  /**
  * 获取表格的行数
  * */
  public function get_rows(){
  $row = 0;
  foreach ($this->arr as $key => $node){
  if($node['child_bottom_num'] == 0){
  $rows++; // 总行数
  }
  }
  return $rows;
  }
  
  /**
  * 获取表格的列数
  * */
  public function get_columns(){
  $columns = 0 ;
  foreach ($this->arr as $key => $node){
  if($node['column'] > $columns){
  $columns = $node['column']; // 总列数
  }
  }
  return $columns;
  }
  
  /**
  * 获取分类的表格展现形式(不包含表头)
  * */
  public function get_treetable(){
  $table_string = '';
  for($row = 1; $row <= $this->rows; $row++){
  $table_string .= "\r\t<tr>";
  foreach ($this->arr as $v){
  if($v['row'] == $row){
  $rowspan = $v['rowspan'] ? "rowspan='{$v['rowspan']}'" : '';
  $colspan = $v['colspan'] ? "colspan='{$v['colspan']}'" : '';
  $table_string .= "\r\t\t<td {$rowspan} {$colspan}>
  {$v['name']}
  </td>";
  }
  }
  $table_string .= "\r\t</tr>";
  }
  return $table_string;
  }
  }
  ?>

热心网友 时间:2022-04-07 07:49

1 可以的。
2 thinkphp无限极分类能分页显示.。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 不用递归 怎么计算无限极分类 php+mysql 美元下跌对人民币是好是坏? 什么是 无限极分类???(PHP。数据库) 美元跌对什么利好 php无限极分类递归写入多维数组的方法 美元贬值对我们来说是好事还是坏事? 几十万条数据用PHP递归能实现无限级分类吗 美元汇率下调是好还是坏?对于中国来说! thinkphp前台怎么输出无限极分类 php 无限极分类怎么显示网页 php递归问题(无限极分类) PHP无限极分类,不使用递归怎么转换数据?数据信息如下图所示 thinkPHP3.2.3中实现无限极分类用Tree类 php 递归问题,想要将数据按照无限极分类的样式显示出来 php用数据库存路径那种方式 实现无限级分类 php递归无限极分类怎么弄 php无限极分类查找父级生成树形结构子级在最顶层,怎么办? 关于PHP无限极分类 在php中,无限极分类怎么搞 php 几种常用的递归 无限极分类 关于PHP无限极分类之后前台URL格式的一些疑问,有具体说明,望指点,谢谢... 美元跌了对期货利好还是利空 人民币对美元的汇价下跌是好是坏? 美元升值和贬值对中国和全世界的影响是好还是不好?对美国自己的影响呢? 美元下跌对中国到底是好是坏? 美元贬值到底对谁最有利?对谁最有害? 美元贬值有什么坏处? 请问最近人民币对美元贬值是好是坏? xld的文件。右键运行方式选择Excel 打开后提示此应用无法在你的电脑运行。(win.10 在EXCEL中数据如何关联! 如何设置EXCEL中单元格的关联 白茶是要用90℃的水冲泡还是100℃的水冲泡 白茶的作用 什么人喝白茶最好 白茶用什么煮 白茶是什么?白茶作用是什么? 白茶有什么作用,是保健茶嘛 奶粉的营养成份及作用 奶粉中含什么成分是助消化的?促进肠道蠕动的。 常见羊奶粉配方中的营养成分有什么功效 那款PC版的导航软件好用?