2016年7月25日 星期一

【PHP】會員層級 遞迴運用

今天有個case要做會員層級的階層圖
畫面如下:
HTML:
<ul id="org" style="display:none">
    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
        <ul>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
<link rel="stylesheet" href="/css/jquery.jOrgChart.css">
<script type="text/javascript" src="/js/jquery.jOrgChart.js"></script>
<script>
$(document).ready(function() {
    $("#org").jOrgChart({
        chartElement: '#chart'
    });
});
</script>

以下是我自想的寫法

PHP取得資料:
$data = get_chart($user_id);

// 取得層級資料
function get_chart($user_id,$level=1)
{
 global $CFG,$WFunc,$UFunc;

 if ($level == 1) // 是否為第一層
 {
  $result = get_field_array($table_user,"id='$user_id'");
 } else {
  $result = get_field_array($table_user,"gid='$user_id'");
 }

 $level++;
 $data = array();
 if ($result)
 {
  foreach($result as $rs)
  {
   
   $data[$rs['id']] = array(
     'id'=>$rs['id'],
     'gid'=>$rs['gid'],
     'name'=>$rs['name'],
     'next'=>get_chart($rs['id'],$level)
     );
  }
 }
 return $data;
}

// 顯示層級
function show_level_data($next_data=array())
{
 if ($next_data)
 {
  $r = '<ul>';
  foreach($next_data as $user_id=>$rs){
   $r .= '<li><span class="icon"><img alt="" src="/images/icon_man.png" /></span>';
   $r .= $rs['name'];
   $r .= show_level_data($rs['next']);
   $r .= '</li>';
  }
  $r .= '</ul>';
 }
 return $r;
}

頁面程式:
<ul id="org" style="display:none">
    <? foreach($data as $user_id=>$rs){?>
        <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>
            <?=$rs['name']?>
                <?=show_level_data($rs['next']);?>
        </li>
    <? }?>
</ul>

1 則留言:

  1. Hi 你的php文章寫的很好,我也在學php是否可以跟你請教呢?

    回覆刪除