1、产品分类的数据表结构设计
不管有多少级分类,分类表中只要有以下几个字段即可,
id(分类的id号,不管几级分类都有自己一个唯一的id号),
name(分类的名称),
parentid(分类的上一级id名称,如果为一级分类,则此处值为0),
type(这个字段选填,代表当前分类名所属的等级,有这个字段可更快的判断分类名属于几级分类名称)
2、laravel中全部分类的展示:
1)、在前端页面最上面加上如下代码
<?php
use App\Http\Common\PHPTree;
?>
2)在App\Http\Common\文件夹下面建立PHPTree.php文件,文件内容如下:
<?php
/**
* @name PHPTree
* @author crazymus < QQ:291445576 >
* @des PHP生成树形结构,无限多级分类
* @version 1.2.0
* @Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* @updated 2015-08-26
*/
namespace App\Http\Common;
class PHPTree{
protected static $config = array(
/* 主键 */
'primary_key' => 'id',
/* 父键 */
'parent_key' => 'parentid',
/* 展开属性 */
'expanded_key' => 'expanded',
/* 叶子节点属性 */
'leaf_key' => 'leaf',
/* 孩子节点属性 */
'children_key' => 'children',
/* 是否展开子节点 */
'expanded' => false
);
/* 结果集 */
protected static $result = array();
/* 层次暂存 */
protected static $level = array();
/**
* @name 生成树形结构
* @param array 二维数组
* @return mixed 多维数组
*/
public static function makeTree($data,$options=array() ){
$dataset = self::buildData($data,$options);
$r = self::makeTreeCore(0,$dataset,'normal');
return $r;
}
/* 生成线性结构, 便于HTML输出, 参数同上 */
public static function makeTreeForHtml($data,$options=array()){
$dataset = self::buildData($data,$options);
$r = self::makeTreeCore(0,$dataset,'linear');
return $r;
}
/* 格式化数据, 私有方法 */
private static function buildData($data,$options){
$config = array_merge(self::$config,$options);
self::$config = $config;
extract($config);
$r = array();
foreach($data as $item){
$id = $item[$primary_key];
$parentid = $item[$parent_key];
$r[$parentid][$id] = $item;
}
return $r;
}
/* 生成树核心, 私有方法 */
private static function makeTreeCore($index,$data,$type='linear')
{
extract(self::$config);
foreach($data[$index] as $id=>$item)
{
if($type=='normal'){
if(isset($data[$id]))
{
$item[$expanded_key]= self::$config['expanded'];
$item[$children_key]= self::makeTreeCore($id,$data,$type);
}
else
{
$item[$leaf_key]= true;
}
$r[] = $item;
}else if($type=='linear'){
$parentid = $item[$parent_key];
self::$level[$id] = $index==0?0:self::$level[$parentid]+1;
$item['level'] = self::$level[$id];
self::$result[] = $item;
if(isset($data[$id])){
self::makeTreeCore($id,$data,$type);
}
$r = self::$result;
}
}
return $r;
}
}
?>
3)在后台php页面,获得分类表里的全部信息:
$category = Category::all()->toArray();
4)在模板.blade.php页面输出全部分类名称:
<?php
$r = PHPTree::makeTreeForHtml($category);
echo '<select name="articlecolumn" class="select">';
echo '<option value="0">全部分类</option>';
foreach($r as $item){
echo "<option value=".$item['id'].">";
echo str_repeat('......',$item['level']);
echo $item['name'];
echo '</option>';
}
echo '</select>';
?>
5)实现基本展现后,js获得选中select的选项值:
var articlecolumn=$('select[name=articlecolumn]').val();
就是这么简单,你学会了吗?