GVKun编程网logo

PHP无限分类分类导航LINK的代码实现(php 无限分类)

20

本文将介绍PHP无限分类分类导航LINK的代码实现的详细情况,特别是关于php无限分类的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于PHP中无限分

本文将介绍PHP无限分类分类导航LINK的代码实现的详细情况,特别是关于php 无限分类的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于PHP中无限分类、无限回复评论盖楼的实现方法,thinkphp5.0无限分类实例、PHP全路径无限分类导航LINK代码实现、php后管理分类导航菜单,php分类导航菜单_PHP教程、php如何实现全路径无限分类导航(代码)的知识。

本文目录一览:

PHP无限分类分类导航LINK的代码实现(php 无限分类)

PHP无限分类分类导航LINK的代码实现(php 无限分类)

1. 代码数据库的结构:

2.要达到的效果

bed9b.png" alt="" width="216" height="39">

<div>

include('db.inc.php');

function getCatePath($cid,&$result=array()){
$sql = "select * from deepcate where id = $cid";
$rs = mysql_query($sql);
$row = mysql_fetch_assoc($rs);
if($row){
$result[] = $row;
getCatePath($row['pid'],$result);
}
krsort($result);
return $result;
}
$res = getCatePath();

function displayCatePath($cid,$url="cate.php?"){
$res = getCatePath($cid);
$str = '';
foreach ($res as $key => $val) {
$str .= "<span><<span>a <span>href <span>= '{$url}cid={$val['id']}'<span>>{$val['catename']}<span></<span>a<span>><span>";
}

}

echo displayCatePath(10,'cate.PHP?');

PHP中无限分类、无限回复评论盖楼的实现方法,thinkphp5.0无限分类实例

PHP中无限分类、无限回复评论盖楼的实现方法,thinkphp5.0无限分类实例

在开发项目时,客户要求在网站的评论中增加无限回复评论的功能,作为伸手党,楼主第一时间自然是百度啦!

网上也有相关代码,基本上都是使用的递归查询方法,不过目前不通过递归似乎也没有好的办法,但是咱们得考虑性能啊,如果一条评论有1000条下级回复(一级接一级)那就得多出1000次查询,别提有多蛋疼了。

so,楼主决定自己研究,于是有了这篇文章。

在这里我们就以无限分类为例子:

首先创建数据库:

CREATE DATABASE IF NOT EXISTS `fenlei` DEFAULT character SET utf8 COLLATE utf8_general_ci;
USE `fenlei`;
CREATE TABLE IF NOT EXISTS `category` (
	`catid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT ''主键'',
	`upid` mediumint(8) unsigned NOT NULL DEFAULT ''0'' COMMENT ''上级分类catid'',
	`catname` varchar(255) NOT NULL DEFAULT '''' COMMENT ''分类名称'',
	`displayorder` tinyint(1) NOT NULL DEFAULT ''0'' COMMENT ''显示顺序'',
	`status` tinyint(1) NOT NULL DEFAULT ''0'' COMMENT ''0-关闭,1-启用'',
	PRIMARY KEY (`catid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=''文章分类'';
INSERT INTO `category` VALUES 
(''1'', ''0'', ''分类1'', ''0'', ''1''),
(''2'', ''0'', ''分类2'', ''0'', ''1''),
(''3'', ''0'', ''分类3'', ''0'', ''1''),
(''4'', ''0'', ''分类4'', ''0'', ''1''),
(''5'', ''0'', ''分类5'', ''0'', ''1''),
(''6'', ''1'', ''分类1-1'', ''0'', ''1''),
(''7'', ''1'', ''分类1-2'', ''0'', ''1''),
(''8'', ''1'', ''分类1-3'', ''0'', ''1''),
(''9'', ''1'', ''分类1-4'', ''0'', ''1''),
(''10'', ''1'', ''分类1-5'', ''0'', ''1''),
(''11'', ''6'', ''分类1-1-1'', ''0'', ''1''),
(''12'', ''6'', ''分类1-1-2'', ''0'', ''1''),
(''13'', ''6'', ''分类1-1-3'', ''0'', ''1''),
(''14'', ''7'', ''分类1-2-1'', ''0'', ''1''),
(''15'', ''7'', ''分类1-2-2'', ''0'', ''1''),
(''16'', ''11'', ''分类1-1-1-1'', ''0'', ''1''),
(''17'', ''11'', ''分类1-1-1-2'', ''0'', ''1'');

是的,你没看错,有且只有一个数据表且只有五个字段(如你有其他需要请自行扩展,在此我只列出有用的字段)

接下来开始大动作,先直接上类:

<?php
/*
* 这是一个成熟的模型,放入相应文件夹直接调用即可
*/
namespace app\index\model;
class Category extends \think\Model
{

	/*
	* 打开冰箱:从数据库取出所有数据,并放进缓存内
	* 即可独立输出也可以在其他位置调用
	*/

	public function category_query($catid=0)
	{
		cache(''category'',null);//正式环境删除本行可减少一次查询
		if(!$result = cache(''category'')){
			$Category = new Category();
			$result = [];
			foreach($Category->order(''displayorder asc,catid asc'')->select() as $data){
				$result[$data[''catid'']] = $data;
			}
			cache(''category'',$result,0);
		}
		return $catid ? $result[$catid] : $result;//如果传入单个分类catid,那么直接返回就行,可用于列表页,大大降低查询次数
	}

	/*
	* 把大象放进冰箱:将第一步得到的数据集转化为无限级数组
	* 即可独立输出也可以在其他位置调用
	*/

	public function category_tree($upid=0,$status=''0,1''){
		$status = is_string($status) ? explode('','', $status) : $status;
		$result = [];
		foreach($this->category_query() as $catid=>$cat){
			if($upid == $cat[''upid''] && in_array($cat[''status''],$status)){
				$cat[''subcat''] = $this->category_tree($cat[''catid''],$status);
				$result[] = $cat;
			}
		}
		return $result;
	}

	/*
	* 关上冰箱门:用于实际用途,将多级数据传入,转化为前端html代码
	* 该html的转化结果可从第一步中获取方式不同来实现从哪一级开始展示
	* 本函数只是师范函数,实际运用中只需要修改这个函数结构体就能完全实现仿网易盖楼效果
	*/

	public function category_html($categorys,$depth=0){
		$depth_html = $html = '''';
		for ($i=0; $i < $depth; $i++) { 
			$depth_html .= ''——'';
		}
		foreach($categorys as $data){
			$html .= ''<tr>'';
			$html .= ''<td>''.$data[''catid''].''</td>'';
			$html .= ''<td>''.$data[''displayorder''].''</td>'';
			$html .= ''<td>''.$depth_html.$data[''catname''].''</td>'';
			$html .= ''</tr>'';
			if($data[''subcat'']){
				$html .= $this->category_html($data[''subcat''],$depth+1);
			}
		}
		return $html;
	}
}
?>

首先通过category_query方法获取到所有分类,

然后通过category_tree方法将得到的数据转化为无限分类数组

最后再通过category_html方法将上面得到的无限分类数组输出为html

最后在控制器中使用

<?php
namespace app\index\controller;
use think\Controller;
use app\index\model\Category;//引入模型类
class Index extends Controller
{
    public function index()
    {
    	$Category = new Category;//实例化类
    	$category_tree = $Category->category_tree();// 获取整体多级数组树结果
    	$this->view->category_list = $Category->category_html($category_tree);//将结果转化为实体html并传值给模板
        return $this->fetch();
    }
}
 

来调用输出数据,最终结果如下:

最后再说说本方法的优势吧:

一、数据只用查询一次,无论你有多少级分类,都只需查询一次。

二、查询的数组结果和无限分类结果是独立方法,你可以直接通过方法调用来获取最终结果

三、无限分类html输出结果可以通过函数自定义

PHP全路径无限分类导航LINK代码实现

PHP全路径无限分类导航LINK代码实现

<div>

/**

  • @param php全路径无限分类
    */

include('db.inc.php');
function getPathCate($cateid){
$sql = "select ,concat(path,',id) fullpath from likecate where id = $cateid";
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
$ids = $row['fullpath'];
$sql = "select
from likecate where id in ($ids) orders by id asc";
$res = mysql_query($sql);
$result = array();
while ($row = mysql_fetch_assoc($res)) {
$result[] = $row;
}
return $result;
}

function displayPath($cateid,$link='cate.php?cid='){
$res = getPathCate($cateid);
$str = '';
foreach ($res as $key => $value) {
$str .= "<a href ='{$link}{$value['id']}'>{$value['catename']}";
}

}

echo displayPath(4,'cate.PHP?p=1&cid=');

php后管理分类导航菜单,php分类导航菜单_PHP教程

php后管理分类导航菜单,php分类导航菜单_PHP教程

php后管理分类导航菜单,php分类导航菜单

<!DOCTYPE>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html" charset="utf-8">
    <title>后台管理折叠导航菜单</title>
    <style><span>
        body{
            margin</span>:0<span>;
            padding</span>:0<span>;
            text</span>-align:<span>center;
            font</span>:normal 12px Arial,Verdana,<span>Tahoma;
            line</span>-height:150%<span>;
        }
        a</span>:link, a:<span>visited{
            color</span>:<span>#</span><span>385065;</span>
            text-decoration:<span>none;
        }
        a</span>:<span>hover{
            text</span>-decoration:<span>underline;
        }
        </span><span>#</span><span>menu{</span>
            width:<span>150px;
            margin</span>:0<span> 15px;
            padding</span>:0<span>;
            text</span>-align:<span>left;
            </span><span>list</span>-style:<span>none;
        }
        </span><span>#</span><span>menu .item{</span>
            background:<span>#</span><span>ccaaee;</span>
            padding:<span>0px;
            </span><span>list</span>-style:<span>none;
            border</span>:1px solid <span>#</span><span>eee;</span>
<span>        }
        a</span>.title:link, a.title:visited, a.title:<span>hover{
            display</span>:<span>block;
            color</span>:<span>#</span><span>385065;</span>
            font-weight:<span>bold;
            padding</span>:2px 0 0<span> 22px;
            width</span>:<span>128px;
            line</span>-height:<span>23px;
            cursor</span>:<span>pointer;
            text</span>-decoration:<span>none;
        }
        </span><span>#</span><span>menu .item ul{</span>
            border:1px solid <span>#</span><span>9facb7;</span>
            margin:0<span>;
            width</span>:<span>116px;
            padding</span>:<span>3px 0px 3px 30px;
            bakground</span>:<span>#</span><span>fff;</span>
            <span>list</span>-style:<span>none;
            display</span>:<span>none;
        }
        </span><span>#</span><span>menu .item ul li{</span>
            display:<span>block;
        }
    </span></style>
    <script type="text/javascript">
        <span>function</span><span> hideAllObj(){
            </span><span>var</span> items = document.getElementsByClassName("option"<span>);
            </span><span>for</span>(<span>var</span> j=0; j<items.length; j++<span>){
                items[j]</span>.style.display = "none"<span>;
            }
        }

        </span><span>function</span><span> check(){
            document</span>.getElementById("opt_1").style.display = "block"<span>;
            </span><span>var</span> items = document.getElementsByClassName("title"<span>);
            </span><span>for</span>(<span>var</span> j=0; j<items.length; j++<span>){
                items[j]</span>.onclick = <span>function</span><span>(){
                    </span><span>var</span> obj = document.getElementById("opt_" + this.<span>name);
                    </span><span>if</span>(obj.style.display != "block"<span>){
                        hideAllObj();
                        obj</span>.style.display = "block"<span>;
                    }</span><span>else</span><span>{
                        obj</span>.style.display = "none"<span>;
                    }
                }
            }
        }

        document</span>.getElementsByClassName=<span>function</span><span>(classname){
            </span><span>var</span> retnode =<span> [];
            </span><span>var</span> myclass = <span>new</span> RegExp(''\\b''+classname+''\\b''<span>);
            </span><span>var</span> elem = this.getElementsByTagName(''*''<span>);
            </span><span>for</span>(<span>var</span> j=0; j<elem.length; j++<span>){
                </span><span>var</span> classes = elem[j].<span>className;
                </span><span>if</span>(myclass.<span>test(classes)){
                    retnode</span>.<span>push(elem[j]);
                }
            }
            </span><span>return</span><span> retnode;
        }
    </span></script>
</head>
<body onload="check()">
<ul id="menu">
    <li <span>class</span>="item"><a href="javascript:void(0)" <span>class</span>="title" name="1">用户管理</a>
    <ul id="opt_1" <span>class</span>="option">
        <li><a href="#">添加用户</a></li>
        <li><a href="#">管理用户</a></li>
    </ul>
    </li>
   <li <span>class</span>="item"><a href="javascript:void(0)" <span>class</span>="title" name="2">用户管理</a>
    <ul id="opt_2" <span>class</span>="option">
        <li><a href="#">添加用户</a></li>
        <li><a href="#">管理用户</a></li>
    </ul>
    </li>
   <li <span>class</span>="item"><a href="javascript:void(0)" <span>class</span>="title" name="3">用户管理</a>
    <ul id="opt_3" <span>class</span>="option">
        <li><a href="#">添加用户</a></li>
        <li><a href="#">管理用户</a></li>
    </ul>
    </li>
   <li <span>class</span>="item"><a href="javascript:void(0)" <span>class</span>="title" name="4">用户管理</a>
    <ul id="opt_4" <span>class</span>="option">
        <li><a href="#">添加用户</a></li>
        <li><a href="#">管理用户</a></li>
    </ul>
    </li>


</ul>

</body>
</html>
登录后复制

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053795.htmlTechArticlephp后管理分类导航菜单,php分类导航菜单 !DOCTYPEhtmlhead meta http-equiv="Content-type" content="text/html" charset="utf-8" title后台管理折叠导航菜单/title...

php如何实现全路径无限分类导航(代码)

php如何实现全路径无限分类导航(代码)

本篇文章给大家带来的内容是关于php如何实现全路径无限分类导航(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

<?php

/**
 * @param php全路径无限分类
 */

include(&#39;db.inc.php&#39;);
function getPathCate($cateid){
    $sql = "select * ,concat(path,&#39;,&#39;,id) fullpath from likecate where id = $cateid";
    $res = mysql_query($sql);
    $row = mysql_fetch_assoc($res);
    $ids = $row[&#39;fullpath&#39;];
    $sql = "select * from likecate where id in ($ids) orders by id asc";
    $res = mysql_query($sql);
    $result = array();
    while ($row = mysql_fetch_assoc($res)) {
        $result[] = $row;
    }
    return $result;
}

function displayPath($cateid,$link=&#39;cate.php?cid=&#39;){
    $res = getPathCate($cateid);
    $str = &#39;&#39;;
    foreach ($res as $key => $value) {
        $str .= "<a href =&#39;{$link}{$value[&#39;id&#39;]}&#39;>{$value[&#39;catename&#39;]}</a>";
    }

}

echo displayPath(4,&#39;cate.php?p=1&cid=&#39;);
登录后复制

以上就是php如何实现全路径无限分类导航(代码)的详细内容,更多请关注php中文网其它相关文章!

今天关于PHP无限分类分类导航LINK的代码实现php 无限分类的介绍到此结束,谢谢您的阅读,有关PHP中无限分类、无限回复评论盖楼的实现方法,thinkphp5.0无限分类实例、PHP全路径无限分类导航LINK代码实现、php后管理分类导航菜单,php分类导航菜单_PHP教程、php如何实现全路径无限分类导航(代码)等更多相关知识的信息可以在本站进行查询。

本文标签: