> php教程 > PHP开发 > 본문

PHP 고급: 무제한 분류 달성

黄舟
풀어 주다: 2016-12-14 11:38:49
원래의
1269명이 탐색했습니다.
  • 첫 번째 범주(상위 범주)-->두 번째 범주(자위 범주)->세 번째 범주(손자 범주)


    더 많은 범주 친족 분류가 있을수록 프로그램과 데이터베이스를 제어하는 ​​것이 더 복잡하고 어렵습니다. 분류 처리 및 동일한 수준에서의 제어는 다음과 같은 분류 수준을 기록하는 데 하나의 데이터베이스만 필요하기 때문에 매우 간단합니다. 시스템과 뉴스는 이 수준에서 처리하기가 매우 간단하지만 웹 사이트의 경우 첫 번째 수준 분류로는 충분하지 않으며

    시스템-->linux, windows 뉴스-->리눅스 뉴스, 윈도우 뉴스

    이 분류는 더 명확해질 것입니다. 적어도 사람들은 시스템에 리눅스와 윈도우가 포함되어 있고 뉴스에는 리눅스 뉴스와 윈도우 뉴스가 포함되어 있다는 것을 이해할 것입니다. 정보가 더 명확해서 계속 분류합니다:

    linux-->시스템 도구, 커널, 프로그래밍 언어, 개발 도구
    ...

    분류가 세 번째 수준에 도달했습니다. , 정보 데이터 처리가 더욱 명확해집니다. 즉, 데이터를 명확하게 처리하기 위해 분류가 상세할수록 정보 처리가 쉬워질 뿐만 아니라 네티즌도 더 쉽게 처리할 수 있습니다. 명확한 목적을 가지고 필요한 정보를 찾으려면, 분류가 계속 세분화될수록 프로그램과 데이터베이스를 제어하는 ​​것이 점점 더 어려워질 것입니다.

    어려운 점: 이를 어떻게 처리해야 할까요?
    어려움 2: PHP를 사용하여 이를 한눈에 수행하는 방법

    이러한 다단계 및 세부 분류는 모든 PHP 프로그래머가 해결해야 하는 문제입니다. , 좋고 우수한 웹사이트를 만들기 위해서는 분류 문제가 불가피하고, 이 문제를 해결하는 것은 상당히 복잡하기 때문에 가장 큰 문제는 데이터베이스의 분류 처리입니다. 엄청난 작업량과 데이터베이스를 다시 계획해야 하는 상황까지...

    이것은 과장이 아닙니다. 왜냐하면 많은 사람들이 데이터베이스 처리에 있어서 1차 분류 방법을 사용하여 데이터베이스를 구축하기 때문입니다. 당시에는 분류를 처리하기 위해 이 방법을 채택했습니다. 대부분의 웹사이트는 3단계로 분류되어 있기 때문에 데이터베이스에는 분류 데이터베이스가 3개만 있습니다. 그러나 계속해서 하향 분류가 필요한 경우에는 이 접근 방식의 단점이 있습니다. 분류가 아래로 내려갈수록 작업량과 처리량이 급격하게 늘어나기 때문에

    제가 소개하고 싶은 방법은 분류 데이터베이스를 활용해 무한 하향 분류 방법을 구축하는 방법입니다. Windows를 사용해 본 사람이라면 Windows 폴더가 무한히 계층적인 디렉터리를 생성할 수 있다는 것을 알고 있을 것입니다. 디렉터리 아래에 디렉터리를 계속 생성할 수 있으므로 Linux 디렉터리 생성에도 이 기능이 있으며 제가 소개한 방법은 동일합니다.
    2. 데이터베이스 기획
    --------------- ---------- --------------
    앞서 분류의 복잡성에 대해 이야기했기 때문에 데이터베이스를 어떻게 계획하는가가 매우 중요해졌습니다.

    포럼의 데이터베이스 계획을 소개했습니다. 네, 포럼은 무제한 후속 조치를 달성할 수 있으며, 무제한 분류도 이러한 형태를 가지고 있습니다. -아버지 관계이므로 분류 데이터베이스는 이러한 자식-아버지 관계를 어떻게 설정하고 명확하게 하는지에 대한 것입니다.

    1) 각 카테고리의 정보 저장을 처리하는 방법
    2) 분류의 친족 관계 처리 방법
    3) 정보 쿼리 처리 방법

    친족 관계의 데이터베이스 처리는 포럼의 데이터베이스 처리와 유사합니다. 분류:

    필드 생성:
    id(int): 각 카테고리의 자연 일련번호를 기록하는 데 사용
    uid(int): 카테고리의 상위 카테고리의 ID 번호를 기록하는 데 사용
    type(char) : 카테고리 이름
    roue_id(varchar): 어피니티 트리, id로 연결 :0:2:10:20: 친자 관계를 나타냄
    roue_char(varchar): 어피니티 tree, 유사: system:linux:development 도구: gcc: (이 필드가 존재하는지 여부는 중요하지 않습니다. 각 관계를 보다 편리하게 이해하기 위해서는 물론 문자 표현이 숫자 표현^o^보다 더 직접적입니다. 하지만 이 필드를 추가하는 것이 가장 좋습니다)

    이렇게 무한한 분류가 이루어집니다. 다음으로, 정보를 저장할 데이터베이스를 구축해야 하므로 테이블을 처리하고 쿼리하는 것이 가장 편리합니다. 정보를 저장하는 테이블입니다. type_message:

    id(int): 메시지의 일련번호
    typeid(int): 카테고리의 ID 번호
    title(varchar): 메시지 제목; ;
    message(text): 메시지 내용;
    time: 메시지가 생성된 시간

    이 두 데이터 테이블은 무한 분류 작업을 완료할 수 있습니다. 추가하지 않고 독자가 직접 추가할 수 있습니다.

    나머지 작업은 PHP에서 처리합니다.

    3. 프로그램 제어
    --------- ---------------------- --------------- -----------

    이 단계는 무한 분류 기능을 구현하는 데 가장 복잡하고 힘든 단계입니다. 먼저 완료해야 하는 절차를 살펴보겠습니다. 🎜>
    1) 카테고리 업로드 생성;
    2) 정보 업로드 생성
    3) 각 카테고리와 카테고리 간의 관계를 명확하게 표시합니다.
    4) 쿼리 기능;5) 편집 및 삭제 기능을 처리하는 방법

    이 다섯 단계 중 가장 어려운 것은 다섯 번째 단계입니다. 카테고리 편집 및 삭제에는 통일성 문제가 있기 때문입니다.

    아래에서 설명하겠습니다. PHP의 프로그램 제어를 하나씩:

    1) 카테고리 업로드 생성

    이 기능을 소개하기 전에 먼저explore() 기능을 소개하겠습니다. 문자열, 특정 사용법을 분해합니다. 예:

    "0:1:2:3:4"의 숫자를 분해합니다.

    $val='0:1:2:3 :4 ';
    $rid=explode(":",$val);

    explode() 함수에 의해 처리된 후 $val의 모든 숫자는 $rid 배열로 분해됩니다. 그냥 인쇄하세요: echo '$rid[0],$rid[1],$rid[2]..."; 그게 전부입니다. 폭발() 함수는 전체 분류 과정에서 매우 중요한 역할을 합니다. 이제 현재 분류가 없는 프로그램 제어의 도입부터 시작하겠습니다.

    일반 분류가 0이고 모든 분류가 그 하위 분류라고 가정할 수 있습니다. 이제 첫 번째 분류 '시스템'을 구축하고 어떻게 되는지 살펴보겠습니다. 데이터베이스 형식으로 작동합니다:

    id | uid | rout_char
    1 | 0:1 | system

    ' 아래:

    id | rout_id | rout_char
    2 | Linux| 0:1:2 | Linux

    위는 데이터베이스 저장 형식입니다. , 이제 PHP 코드를 완성해 보겠습니다. 이는 포럼 코드와 매우 유사합니다. 우리가 해야 할 일은 카테고리 ID를 uid에 넣고 상위 카테고리 uid를 0에 넣는 것뿐입니다. 코드를 살펴보겠습니다.

    . ....
    .....

    //기본 페이지 설정
    if (empty($func)) $func=='showtype ';

    // 상위 카테고리의 uid 설정
    if (empty($uid)) $uid=0

    //데이터베이스 저장******* *************** *****************************
    만약 ($ func=='save'):

    $ fields = "";
    $values ​​​​= ""

    if ($id!="") {
    $fields .= ",id";
    $values.=" ,$id";

    if ($uid!="") {
    $fields .= " ,uid";
    $values.=",$uid";
    }

    if ($type!="") {
    $fields .= ",type";
    $values.=",'$type'";
    }

    if ($route_id=="") {

    //상위 카테고리의 Route_id 가져오기
    if ($uid!=0) {
    $result = mysqlquery( "select * from type where id=$uid")
    $route_id=mysql_result($result,0,"route_id");
    } else {
    $routr_id='0';
    }
    $fields .= ",route_id"
    //자신만의 Route_id 만들기
    $route_id="$route_id :$id";
    $values.=",'$route_id'" ;
    }

    //자신만의 Route_char 구성
    if ($route_char!="") {
    $fields .= ",route_char";
    $route_char="$ Route_char:$type"
    $values.=",'$route_char'"
    } else {
    $ fields .= ",route_char";
    $route_char=$type;
    $values.=",'$route_char'"
    }

    $fields = substr($fields, 1,strlen($fields)-1);
    $values ​​​​= substr( $values,1,strlen($values)-1)

    $result = mysqlquery("insert into type ($fields) 값 ​​($values)");
    ...
    endif; /* 저장 종료 */


    //카테고리 업로드****** ************************ *******************
    if ($func =='createtype'):

    //자신의 ID 가져오기
    $result = mysqlquery("select * from type order by
    id desc"); $result);
    if (!empty($num)) {
    $cat = mysql_result ($result,0,"id")
    } else {
    $cat=0; 🎜>}

    //분류 상태 판단
    if ($uid != 0) {
    $result=mysql_query("select * from type where id=$uid");
    $type=mysql_result($result,0,"type")
    $route_char=mysql_result( $result,0,"route_char")
    } else {
    $type='parent 카테고리'
    }
    echo "

    "

    echo ""
    echo " ";
    echo "";

    echo ""; 

    echo "
    카테고리:$type
    카테고리 생성:<입력 유형=텍스트 이름='유형' SIZE=10 MAXLENGTH=100>
    ";
    $cat=$cat+1;
    echo "<입력 유형=숨겨진 이름=id 값='$cat'>"
    echo "<입력 유형=숨겨진 이름=uid 값='$uid'>";echo "<입력 유형=숨겨진 이름=route_char 값='$route_char'>"; 
    echo "
    "; 
    echo "
    "; 
    엔디프; /* 생성 유형 종료 */ 

    //显示分类************************************ ************** 
    if ($func=='showtype'): 

    echo ""; 

    //判断分类的状态 
    if ($uid!=0) { 
    $result=mysql_query("select * from type where id=$uid"); 
    $type=mysql_result($result,0,"유형"); 
    } else { 
    $type='父分类'; 


    echo ""; 

    echo ""; 

    $result=mysql_query("uid=$uid인 유형에서 * 선택"); 
    $num=mysql_numrows($result); 

    if (!empty($num)) { 
    for ($i=0;$i<$num;$i++) { 

    $id=mysql_result($result, $i,"ID"); 
    $type=mysql_result($result,$i,"유형"); 

    echo ""; 



    echo "
    创建分类
    $type
    "; 
    echo "$type"; 
    echo "
    "; 
    엔디프; /* 쇼타입 종료 */ 
    ..... 
    ..... 

    ?> 

    이것은 더 나은 유형의 유형입니다.

    4.로径跟踪 
    ---- ------------------------------------- ------ 
    앞면에는 已经介绍过了分类的创建实现방법, 类表里记载了 rout_id 와 rout_char 这两个存储分类路径的信息, 不做何处理的情况下,程序只能够顺序下到最底层的分类而无法倒退(当然可利用浏览器的back 键倒退,但这对程序来说是是不完整的),因此必须将rout_id와 rout_char를 사용하여 경로를 구분할 수 있습니다. rout_id:0:1: 2:4 
    rout_char:系统:linux:开发工具 

    当程序走到分类'开发工具'上时,除了要求显示路径信息외부还要求能够去到路径上的任一分类中,该怎么做能?这里就需要用到Explode() 函数了.因为 rout_id 및 rout_char 是对应关系的,所以可将它们分解: 

    $path=exp lode(":",$rout_id) ; 
    $path_gb=explode(":",$rout_char); 

    ($i=0;;$i++) { 
    $a=$i+1; 
    echo "href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":"; 
    if (empty($path_gb[$i])) { 
    break; 



    상면这段代码就实现了加链接还原路径的功能,因为实现的是无限分类, 因此是没有上限的,여기서($i=0; ;$i++) 里没有范围限晐, 而设置循环退出的条件是 $path_gb[$i] 中的值为공간, 将这段代码插入类别显示版side程序块内就行了: 

    < ;? 
    ..... 
    ..... 
    //显示分类**************************** ********************* 
    if ($func=='showtype'): 

    echo ""; 

    //判断分类的状态 
    if ($uid!=0) { 
    $result=mysql_query("select * from type where id=$uid"); 
    $type=mysql_result($result,0,"유형"); 

    //******** 새로운 버전 *************** 
    $rout_id=mysql_result($result,0,"rout_id "); 
    $rout_char=mysql_result($result,0,"rout_char"); 
    $path=explode(":",$rout_id); 
    $path_gb=explode(":",$rout_char); 
    echo ""
    //******** 끝 *********************** 

    } else { 
    $type='父分类'; 


    echo ""; 

    echo ""; 

    $result=mysql_query("uid=$uid인 유형에서 * 선택"); 
    $num=mysql_numrows($result); 

    if (!empty($num)) { 
    for ($i=0;$i<$num;$i++) { 

    $id=mysql_result($result, $i,"ID"); 
    $type=mysql_result($result,$i,"유형"); 

    echo ""; 



    echo "
    "; 
    ($i=0;;$i++) { 
    $a=$i+1; 
    echo "href=$php_self?func=showtype&uid=",$path[$a],">",$path_gb[$i],":"; 
    if (empty($path_gb[$i])) { 
    break; 


    echo "
    创建分类
    $type
    "; 
    echo "$type"; 
    echo "
    "; 
    엔디프; /* 쇼타입 종료*/
    .....
    .....
    ?> >
    이 펑션 블록을 완성한 후에도 계속해서 기밀 정보를 표시할 수 있습니다... 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


  • 관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 추천
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!