PHP原生实现面包屑导航其实也很简单,因为“当前位置 面包屑导航”这种功能已经包含在PHP无限级分类中了,具体如下:
1、必须保证你已经了解并熟悉PHP无限级分类(代码完整版)
这是因为到时候我们会用上 CategoryTree.php 这个类的代码。
2、分类SQL查询语句
这里以Mysql数据为例子,我已经把相应的SQL查询语句封装成为了一个类,如下:
CategorySql.php
<?php
class CategorySql{
public function select_all($mysqli){
//查询无限级分类
$sql_select = "SELECT `id`, `name`,`alias`, `parent_id` FROM `category`";
$result = $mysqli->query($sql_select);
$select_array = mysqli_fetch_all($result,MYSQLI_ASSOC);
return $select_array;
}
//按分类目录别名查询
public function select_alias($mysqli,$alias,$id='',$name='',$parent_id='',$description='',$seotitle='',$seokeywords='',$thumbnail='',$origin=''){
$sql = "SELECT `id`,`name`,`parent_id`,`description`,`seo-title`,`seo-keywords`, `thumbnail`, `origin` FROM `category` WHERE `alias` = ?";
$stmt=$mysqli->prepare($sql);
$stmt->bind_param('s',$alias);
$stmt->execute();
$stmt->bind_result($id,$name,$parent_id,$description,$seotitle,$seokeywords,$thumbnail,$origin);
$arr=[];
while ($stmt->fetch()) {
$arr['id'] = $id;
$arr['name'] = $name;
$arr['parent_id'] = $parent_id;
$arr['description'] = $description;
$arr['seo-title'] = $seotitle;
$arr['seo-keywords'] = $seokeywords;
$arr['thumbnail'] = $thumbnail;
$arr['origin'] = $origin;
}
return $arr;
}
3、PHP后端查询 得到 面包屑导航 分类数组 代码
Category.php
<?php
require_once ABSPATH . '../core/class/CategoryTree.php'; //引入无限极分类
require_once ABSPATH . '/home/model/CategorySql.php';//引入分类页面sql语句
$category = new CategorySql();
$category_select_all = $category->select_all($mysqli);//查所有的分类目录
////var_dump($category_select_all);exit;
$category_select_alias = $category->select_alias($mysqli,$category_pagenumeber);//以分类目录别名查询单个分类目录
//var_dump($category_select_alias);
$categorytree = new CategoryTree();
$breadcrumb = $categorytree->family_tree_reverse($category_select_all,$category_select_alias['id']); //得到面包屑
var_dump($breadcrumb);
打印结果如下:
array(3) {
[0]=>
array(4) {
["id"]=>
string(2) "66"
["name"]=>
string(13) "测试分类1"
["alias"]=>
string(5) "test1"
["parent_id"]=>
string(1) "0"
}
[1]=>
array(4) {
["id"]=>
string(2) "69"
["name"]=>
string(15) "测试分类1-1"
["alias"]=>
string(7) "test1-1"
["parent_id"]=>
string(2) "66"
}
[2]=>
array(4) {
["id"]=>
string(2) "70"
["name"]=>
string(17) "测试分类1-1-1"
["alias"]=>
string(9) "test1-1-1"
["parent_id"]=>
string(2) "69"
}
}
4、PHP前端输出 面包屑导航 分类数组 代码
注意:输出html的时候,a标签这里必须要字符串拼接,否则你的a标签点击url链接路径是会存在BUG的。
Category_html.php
<div class="container" >
<div class="row">
<div class="col-12">
<nav aria-label="breadcrumb">
<ol class="breadcrumb" style="background-color: #f8f9fa;margin-bottom: 0;">
当前位置:
<?php foreach ($breadcrumb as $k => $v){
$alias .= $v['alias'].'/';
?>
<li class="breadcrumb-item"><a href="/<?php echo $alias; ?>"><?php echo $v['name']; ?></a>
<?php }
?>
<li class="breadcrumb-item active" aria-current="page">列表</li>
</ol>
</nav>
</div>
</div>
</div>
查看html源码,结果如下:
<nav aria-label="breadcrumb">
<ol class="breadcrumb" style="background-color: #f8f9fa;margin-bottom: 0;">
当前位置:
<li class="breadcrumb-item"><a href="/test1/">测试分类1</a>
<li class="breadcrumb-item"><a href="/test1/test1-1/">测试分类1-1</a>
<li class="breadcrumb-item"><a href="/test1/test1-1/test1-1-1/">测试分类1-1-1</a>
<li class="breadcrumb-item active" aria-current="page">列表</li>
</ol>
</nav>
总结:
如果看了文章还有不能理解的?欢迎主动来联系我交流。再多说一句,前端输出html部份我用的是bootstrap实现的。