A-A+

php 动态生成组织结构图

2012年06月19日 PHP技术文章 暂无评论 阅读 334 views 次

一个 php 动态生成组织结构图的类,比如我们公司的组织结构,总栽,总经理,IT部,客服部,业务部,这就属于一个组织结构,还有类似于这样的其它组织,利用这个 PHP 的类对象可以很好的生成一个组织机构的图形,更形象的进行展出出来,让大家一眼可以看出公司的一个组织人员状态。

这个类其实用得还不是很多,比如像企业站,我们基本上就可以直接用 PS 来画一个组织机构图了,那么对于 PHP 动态生成组织结构图,应该用在什么地方呢,我想可以放在一些比较大型的信息站上面,就像 B2B 类的网站,每个企业会员都有自己的公司黄页,如果要加企业的组织结构图,就可以用这个 php 动态生成组织结构类,每个单位的组织结构图都不一样,可以进行调用不同的参数生成不同的组织结构图,这也是 php 功能强大的体现之一。

<?php   
  //创建组织结构类   
  class getTree{   
  
      private $rootnodeid;             //根节点联系人的nodeid   
      private $partleft = 5;         //每个节点左边相对位置初始值   
      private $lastid   = array();   //存放每层结构的最后一个节点       
      private $partroot = array();   //存放每个部门根节点               
      private $partson  = array();   //存放parentid是部门根节点的节点   
      private $levelpt  = array();   //存放有子节点的nodeid    
  
      //遍历org chart    
      public function displayChildren($resData, $parentid, $level){   
          foreach($resData&#91;'result'&#93; as $list){   
              //如果parentid等于上一节点的uuid则是该uuid的子节点   
              if($list&#91;'parentid'&#93; == $parentid){   
                  //找出当前parntid的子uuid   
                  $hasChild = $this->hasChild($resData['result'],$parentid);   
                  $tempid = $hasChild[count($hasChild)-1];   
                  //如果该节点的parentid是公司的uuid则该节点是root节点   
                  if($list['parentid'] == $resData['comid']){   
                       $this->rootnodeid = $list['nodeid'];     
                  }else if($list['parentid'] == $this->rootnodeid){
   //如果该节点的parentid是root节点的uuid则该节点是某部门的partroot节点   
                       $this->lastid     = array();   
                       $this->levelpt    = array();   
                       $this->partroot[] = $list['nodeid'];   
                  ?>                    
                  <div class="section">   
                     <div style="border:1px solid #333333; width:0
px; height:15px; margin-left: 120px;"></div>   
                     <div id="<?php echo $list&#91;'nodeid'&#93;; ?>" cla
ss="part <?php echo $list&#91;'style'&#93;; ?>" style="margin-left:50px; m
argin-right:10px;">   
                         <div class="photo">   
                             <div class="plus" style="position:abs
olute; margin-left:28px;"><b style="color:red;">+</b></div>   
                             <a href="javascript:;"><img title="<?php e
cho $list&#91;'name'&#93;; ?>" src="<?php echo $list&#91;'sma_picurl'&#93;;?>" alt="<?p
hp echo $list&#91;'name'&#93;; ?>"/></a>   
                         </div>   
                         <div class="info">   
                             <div class="partment">   
                                 <div class="name"><?php echo $li
st&#91;'name'&#93;; ?></div>   
                                 <div class="name" style="float:right;">   
                                     <a name="color" href="javascrip
t:;"><img src="/joywok/public/images/contact/color.png"/></a>   
                                     <a name="del" href="javascrip
t:;"><img src="/joywok/public/images/contact/del.png"/></a>   
                                     <a name="add" href="javascrip
t:;"><img src="/joywok/public/images/contact/add.png"/></a>   
                                 </div>   
                             </div>   
                             <div class="detail">   
                                 <div class="name"><?php echo $li
st&#91;'dept'&#93;; ?></div>   
                                 <div class="name"><?php echo $li
st&#91;'post'&#93;; ?></div>   
                             </div>   
                         </div>   
                     </div>   
                  <?php   
                  }else{   
                      //把每个节点的parentid做记录   
                      if($level > 2){   
                          $this->levelpt[$level][$list['nodei
d']] = $list['parentid'];   
                      }   
                      //判断节点的parentid是不是部门根节点   
                      if(in_array($list['parentid'], $this->partroot)){   
                          $this->partson[] = $list['nodeid'];   
                      }   
                      //判断节点是不是该层最后一个节点   
                      if($list['nodeid'] == $tempid){   
                          $this->lastid[] = $list['nodeid'];   
                      }   
                      //画线:调用playLine()方法   
                      $this->playLine($list['nodeid'], $list['node
id'], $level);     
                      if($level == 2){   
                          if(in_array($list['nodeid'],$this->lastid)){   
                              echo '<div class='.$list&#91;'nodeid'&#93;.' na
me='.$list&#91;'nodeid'&#93;.' style="float:left; margin-left: 52px; margin-to
p:0px; width:40px; height:84px"><img alt="last" src="/joywok/public/i
mages/contact/lastline.png"/></div>';     
                          }else {   
                              echo '<div class='.$list&#91;'nodeid'&#93;.' na
me='.$list&#91;'nodeid'&#93;.' style="float:left; margin-left: 50px; margin-t
op:0px; width:40px; height:84px"><img alt="middle" src="/joywok/publi
c/images/contact/midline.png"/></div>';   
                          }   
                      }else if($level != 2){    
                          if(in_array($list['nodeid'],$this->lastid) ){   
                              echo '<div class='.$list&#91;'nodeid'&#93;.' nam
e='.$list&#91;'nodeid'&#93;.' style="float:left; margin-left: 2px; margin-to
p:0px; width:40px; height:84px"><img alt="last" src="/joywok/public/i
mages/contact/lastline.png"/></div>';   
                          }else{   
                              echo '<div class='.$list&#91;'nodeid'&#93;.' n
ame='.$list&#91;'nodeid'&#93;.' style="float:left; margin-left: 0px; margin-t
op:0px; width:40px; height:84px"><img alt="middle" src="/joywok/publi
c/images/contact/midline.png"/></div>';   
                          }   
                      }   
                  ?>   
                     <div id="<?php echo $list&#91;'nodeid'&#93;; ?>" class="p
art <?php echo $list&#91;'style'&#93;; ?>" style="margin-top:40px; margin-lef
t:<?echo $this->partleft; ?>px; margin-right:10px;">   
                         <div class="photo">   
                             <div class="plus" style="position:absolut
e; margin-left:28px;"><b style="color:red;">+</b></div>   
                             <a href="javascript:;"><img title="<?php ec
ho $level; ?>" src="<?php echo $list&#91;'sma_picurl'&#93;;?>" alt="<?php ech
o $list&#91;'name'&#93;; ?>"/></a>   
                         </div>   
                         <div class="info">   
                             <div class="partment">   
                                 <div class="name"><?php echo $list&#91;'n
ame'&#93;; ?></div>   
                                 <div class="name" style="float:right;">   
                                     <a name="color" href="javascrip
t:;"><img src="/joywok/public/images/contact/color.png"/></a>   
                                     <a name="del" href="javascript:;"><img src="/joywok/public/images/contact/del.png"/></a>   
                                     <a name="add" href="javascript:;"><img src="/joywok/public/images/contact/add.png"/></a>   
                                 </div>   
                             </div>   
                             <div class="detail">   
                                 <div class="name"><?php echo $list&#91;'dept'&#93;; ?></div>   
                                 <div class="name"><?php echo $list&#91;'post'&#93;; ?></div>   
                             </div>   
                         </div>   
                     </div>                      
                  <?php   
                  }   
                  $this->partleft += 45;    
                  $this->displayChildren($resData, $list['nodeid'], $level+1);    
                  $this->partleft -= 45;    
                  //判断是否是一个部门的结束   
                  if($list['parentid'] == $this->rootnodeid){   
                     echo "</div>";   
                  }   
              }   
          }   
      }   
  
      //找出当前parntid的子uuid   
      function hasChild($param,$parentid) {   
          $tempArr = array();   
          foreach($param as $list){   
              if($list['parentid'] == $parentid){   
                  $tempArr[] = $list['nodeid'];   
              }   
          }   
          return  $tempArr;   
      }    
  
      //递归画线   
      function playLine($uuid, $curid, $level){   
          if($level >= 3){   
              $this->playLine($uuid, $this->levelpt[$level][$curid], $l
evel-1);   
              if($level == 3 && in_array($this->levelpt[$level][$curi
d], $this->lastid)){   
                  $level = $level-1;   
                  echo '<div class="'.$uuid.'" name="'.$uuid.'" style="f
loat:left; margin-left:52px; margin-top:0px; width:40px; height:84px"></div>';   
              }else if($level == 3 && !in_array($this->levelpt[$level][$
curid], $this->lastid)){   
                  $level = $level-1;   
                  echo '<div class="'.$uuid.'" name="'.$uuid.'" style="f
loat:left; margin-left:52px; margin-top:0px; width:40px; height:84px"><i
mg alt="'.$level.'" src="/joywok/public/images/contact/line.png"/></div>';   
              }else if($level != 3 && in_array($this->levelpt[$level][$cu
rid], $this->lastid)){   
                  $level = $level-1;   
                  echo '<div class="'.$uuid.'" name="'.$uuid.'" style="flo
at:left; margin-left:2px; margin-top:0px; width:40px; height:84px"></div>';   
              }else if($level != 3 && !in_array($this->levelpt[$level][$c
urid], $this->lastid)){   
                  $level = $level-1;   
                  echo '<div class="'.$uuid.'" name="'.$uuid.'" style="fl
oat:left; margin-left:2px; margin-top:0px; width:40px; height:84px"><img a
lt="'.$level.'" src="/joywok/public/images/contact/line.png"/></div>';   
  
              }   
          }   
      }   
  }       
  ?>
标签:

给我留言