PHP+MySQL樹狀圖
Last updated
Was this helpful?
Last updated
Was this helpful?
首先因為我們是要動態產出這些選單,所以我們要先長好我們的database,大概長這樣:
由於我是用laravel這個framework以下全部都會是laravel的code,我們現在必須先連接到那個table:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class NewClass extends Model
{
public $table = 'newclass';
public $primaryKey = 'id';
public $incrementing = true;
public $timestamps = false;
}
再來產出抓取這個資料庫資料的repository:
<?php
namespace App\Repositories;
use Illuminate\Http\Request;
use App\Models\NewClass;
use Carbon\Carbon;
class NewClassRepository {
/**
* 注入的 NewClass model
* @var type
*/
protected $model;
public function __construct(NewClass $model) {
$this->model = $model;
}
public static function withNew() {
return new NewClassRepository(new NewClass());
}
public function getMainData() {
return $this->model->get();
}
}
再來就是重頭戲controller的部份:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Repositories\NewClassRepository;
class TestClassController extends Controller {
protected $repository;
public function __construct(NewClassRepository $repository) {
$this->repository = $repository;
}
private static $array; // 從DB查詢出的所有分類資料
private static $str = ""; // 串接字串用
public function classData() {
// 到repository抓資料
$result = $this->repository->getMainData();
foreach($result as $data){
TestClassController::$array[] = array($data->id,$data->f_id,$data->name);
}
TestClassController::$str = $this->classMenu();
$re = TestClassController::$str;
return View('test',compact('re'));
}
/**
* 編輯字串要回傳到view的
* @param integer $f_id [父層]
*/
public function classMenu($f_id =0){
for($i=0;$i<count(TestClassController::$array);$i++){
if(TestClassController::$array[$i][1]==$f_id){
TestClassController::$str = TestClassController::$str."<ul>";
TestClassController::$str = TestClassController::$str."<li>";
// 列出它的名稱
TestClassController::$str = TestClassController::$str.TestClassController::$array[$i][2];
TestClassController::$str = TestClassController::$str."</li>";
// 順便找它的子層直接列出來
$this->classMenu(TestClassController::$array[$i][0]);
TestClassController::$str = TestClassController::$str."</ul>";
}
}
return TestClassController::$str;
}
}