Construirea unui arbore de categorii pe php

Construirea unui arbore de categorii pe php

Astăzi vă voi spune cum să creați un arbore ierarhic în PHP și MySQL.

În general, ele sunt construite ori de câte ori este posibil. Principalul lucru este să construim și să aplicăm corect acest lucru.

Creați tabelul executând interogarea SQL în PHPMyAdmin:

Acum trebuie să completați tabelul cu intrări. Ca rezultat, următorul tabel ar trebui să arate astfel:

Construirea unui arbore de categorii pe php

Puteți completa tabelul de testare cu o interogare:

Cu baza de date totul! Apoi vom merge la formarea arborelui de partiție în sine.

Vom face o cerere și vom forma o matrice convenabilă pentru o muncă ulterioară.

Acum vom construi un copac. Pentru construcție, vom folosi o funcție recursivă.

Un arbore ierarhic va avea această structură:

Să creați funcția recursivă build_tree (). Se va construi arborele nostru ierarhic de absolut orice cuibărit.

Pentru a construi un copac, în cod scriem:

Astfel, în două pași am creat un arbore ierarhic de secțiuni ale site-ului și indiferent de câte secțiuni există!

Pentru a construi un astfel de copac, executați funcția build_tree cu următorii parametri:

Multe mulțumiri pentru răspuns.
Dacă este posibil, încă o întrebare. Și cum creați linkuri către directoare? În baza de date, căi complete, cum ar fi intrarea pentru secțiunea 1.1.1
"Secțiunea_1 / Subsecțiunea_1.1 / Subsecțiunea_1.1.1 /
sau este mai bine să înregistrați numai pentru această subsecțiune, adică "Podrazdel_1.1.1". Dacă al doilea, atunci cum pot fi combinate?

Maxim Nikifo $ LastName = htmlspecialchars ($ _ POST ['LastName']);
$ nume = htmlspecialchars ($ _ POST ['nume']);
$ floor = $ _POST ['podea'];
$ email = mysql_real_escape_string ($ _ POST ['email']);
$ password = md5 ($ _POST ['parola']);
$ phone = $ _POST ['telefon'];
$ date = $ _POST ['date'];
$ country = $ _POST ['țara'];
$ regiune = $ _POST ['regiune'];
$ oraș = $ _POST ['oraș'];
$ rdate = data ("Y-m-d H: i: s");

totul este bine, bineînțeles. Dar funcționează numai dacă nu aveți mai mult de 100 de directoare

Am 40 de mii de înregistrări în baza de date. Această metodă nu este relevantă, deoarece calculul durează aproape 10 minute. Nimeni nu va aștepta o tranziție a paginii când se va întâmpla un "miracol" și serverul calculează IT.

Întrebați de ce atât de mulți? Trebuie să construiesc un copac al regiunilor - orașe. în cadrul schemei WORLD - COUNTRY - AREA (stat / district) - o înțelegere. Acest lucru nu ar lua mult spațiu, descendenții sunt ascunși în lista de părinte atașată și sunt afișați numai făcând clic pe părinte (lista este extinsă).

Cum de a rezolva această problemă, nu a venit încă cu idei?

Ei bine, sub "sarcini globale" avem nevoie de "servere globale".
În general, nu aveți nevoie de recursiune aici. Știi adâncimea cuiburilor - trei (lumea, țara, regiunea). Deci, se bazează pe cuibărit.

Trebuie să selectați întotdeauna exact informațiile pe care utilizatorul le are nevoie. Tehnologie Ajax pentru a vă ajuta.
Puteți împărți selecția în etape folosind ajax. Mai întâi alegeți continentul (o cerere ajax cu idul continentului este opțională și lista țărilor este returnată, este introdusă în următorul selest), atunci când selectați o țară, deja încărcați regiuni și așa mai departe. În acest fel, cererile vor fi mult mai puține și nu vor mai exista probe pe care utilizatorul nu are nevoie de informații.

Construcția cea mai reală și mai ușor de înțeles este un copac, din tot ce am întâlnit înainte. Mulțumesc!

vă mulțumesc. foarte ajutat)

Multumesc pentru articol. Aproape ceea ce căutam, dar nu pot rezolva problema cu paginare. Matricea este formată aproape în mod corect, funcția însăși ieșind într-o formă circumcizată, datorită faptului că unele elemente nu se află în matricea parentală. Cel puțin împingeți cum să rezolvați problema.

Subsecțiunea 2 -> Subsecțiunea 2.1 -> Subsecțiunea 2.1.2

Da, și în timp ce build_tree ($ cats, 2); atunci arata totul in mod corect, dar nu pot conta cum functioneaza, plimbare helplmy.

Mulțumesc, Un lucru foarte util, dar interesează o întrebare.

Secțiunea 1
-Secțiunea 1.1
Secțiunea 1.1.1
-Secțiunea 1.2.
Secțiunea 2
-Secțiunea 1.1
-Secțiunea 1.2.
Secțiunea 3
-Secțiunea 3.1

și vrem să ștergem secțiunea 1.1, în acest caz secțiunea 1.1.1 și toți descendenții săi trebuie să treacă la nivel și ar trebui:

Secțiunea 1
-Secțiunea 1.1.1
-Secțiunea 1.2.
Secțiunea 2
-Secțiunea 1.1
-Secțiunea 1.2.
Secțiunea 3
-Secțiunea 3.1

am decis în continuare să ștergem secțiunea 2 și ar trebui să obținem:

Secțiunea 1
-Secțiunea 1.1.1
-Secțiunea 1.2.
Secțiunea 1.1
Secțiunea 1.2.
Secțiunea 3
-Secțiunea 3.1

Prompt vă rog cererile necesare la baza de date sau logica în PHP. vă mulțumesc!

Aladdin, codul pentru testul vizual:

Bună după-amiază Max îmi pare rău pentru întrebarea stupidă a copacului și pentru a determina adâncimea de care am nevoie 5 niveluri și nu mai mult

Pot sa inregistrez cumva stilurile pentru asta si sa fac un acordeon? :)

Și cum să desfășurați întreaga ramură?
De exemplu, am 3 nivele de cuibărit
Când faceți clic pe primul nivel, id = 1 este trecut, cum pot verifica dacă acest părinte are copii care ar transmite informațiile
Aduc o concluzie cu Ajax

Ei bine, proba pentru ieșire:

Yura,
Dați structura tabelelor în baza de date

Aibol,
goale 03 și 05 și unul pe care l-ați întors

Și cum să adăugați o clasă css. care ar dori să noteze acele elemente care au sub-paragrafe sau cel puțin +/-

Bună ziua!

Articole similare