Danas nam je cilj stvoriti hijerarhijsku strukturu kategorija. Važno nam je da je zgodno pohraniti kategorije i da ih je lako prikazati tamo gdje nam trebaju.
Ponekad jednostavno izgleda komplicirano, zato ću izložiti nekoliko isječaka koda za koje se nadam da će vam biti korisni za implementaciju php kategorija u obliku stabla.
Dakle, struktura bi se trebala sastojati od ID-a kategorije (id), naziva kategorije (name) i naravno ID-a roditeljske kategorije (parent_id). U MySQL-u to izgleda ovako:
KREIRAJ TABLICU AKO NE POSTOJI `kategorija` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE =InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Minimalna i razumljiva struktura tablice za pohranu kategorija.
INSERT INTO `category` (`id`, `name`, `parent_id`) VRIJEDNOSTI (1, "Telefoni i tableti", "0"), (2, "Automobili", "0"), (3, "Samsung ", "1"), (4, "Apple", "1"), (5, "LG", "1"), (6, "Ford", "2"), (7, "Lexus", "2"), (8, "BMW", "2"), (9, " Galaxy Tab 4", "3"), (10, "Galaxy S6", "3");
Gdje je parent_id=0, ova kategorija nema nadređenu kategoriju.
Ovdje je sve jasno i jednostavno. Sada prijeđimo na popis kategorija. Ali za ispravan ispis popisa prvo trebamo dobiti cijeli popis php kategorija, a tek onda pomoću rekurzije formirati naše stablo. Sljedeća funkcija je za dobivanje ovog popisa:
Funkcija get_cat() ( // upit baze podataka $sql = "SELECT * FROM kategorija"; $result = mysql_query($sql); if(!$result) ( return NULL; ) $arr_cat = array(); if( mysql_num_rows ($rezultat) != 0) ( //Za($i = 0; $i< mysql_num_rows($result);$i++) { $row = mysql_fetch_array($result,MYSQL_ASSOC); //Формируем массив, где ключами являются адишники на родительские категории if(empty($arr_cat[$row["parent_id"]])) { $arr_cat[$row["parent_id"]] = array(); } $arr_cat[$row["parent_id"]] = $row; } //возвращаем массив return $arr_cat; } }
//dobijte polje kataloga $result = get_cat();
Sada nam treba funkcija s rekurzijom
Funkcija view_cat($arr,$parent_id = 0) ( //Uvjeti izlaza iz rekurzije if(empty($arr[$parent_id])) ( return; ) echo "
- "; // proći kroz niz i prikazati for($i = 0; $i< count($arr[$parent_id]);$i++) {
echo "
- " .$arr[$parent_id][$i]["name"].""; //rekurzija - provjerite postoje li podređene kategorije view_cat($arr,$arr[$parent_id][$i]["id "] ); odjek " "; ) jeka "
Sada preostaje samo prikazati imenik na ekranu pomoću rekurzivne funkcije
View_cat($rezultat);
I općenito, to je sve. Na taj način možemo dobiti potpuno stablo kategorija s beskonačnim potkategorijama.
) Pokazao sam vam primjer korištenja regularnih izraza za pronalaženje određenih dijelova izvorni kod stranice. Sada ćemo naučiti kako ih sami napisati. Ova vještina pomoći će vam u pisanju, čišćenju teksta od nepotrebnih fragmenata, traženju pravih dijelova u velikim količinama teksta i tako dalje.
Datum objave: 20.10.2013
Nastavljamo s pisanjem liveinternet analize statistike posjetitelja. Ako nam se netko tek pridružio, savjetujem vam da počnete s time da smo se neovlašteno povezali s uslugom. Tamo smo naučili kako doći do sadržaja s otvorenih stranica koje nisu zaštićene lozinkom. Ali, zapravo, pristup većini stranica je zatvoren, tako da je vrlo malo koristi od skripte koja ne zna kako se prijaviti, kao što razumijete. Ali ne brinite, sada ćemo to popraviti.
Datum objave: 08.10.2013
Dobar dan, čitatelji! Vrijeme je da malo vježbate. Već imate dovoljno znanja da počnete pisati korisne skripte koje će vam olakšati posao. Jedan od njih može biti parser. Što je to, detaljno sam opisao u svom, pa ako ne znate, savjetujem vam da to pročitate. Ukratko, bit parsera je pretraživanje i izolacija potrebne informacije iz velikog dijela teksta. U slučaju interneta, to je najčešće izvlačenje potrebnih podataka sa stranica stranica. U našem slučaju, to će biti Liveinternet. Pa, idemo!
Datum objave: 10.03.2013
Ovaj članak će se fokusirati na tako moćan alat kao što je cURL, kao i na php biblioteku koja omogućuje pristup ovom alatu - libcurl. Čemu sve ovo? Za komunikaciju s poslužiteljem putem protokola za prijenos podataka, kao što su http ili ftp. Ostali protokoli nam nisu posebno zanimljivi, ako se netko želi udubiti u ovu temu, morat će kopati izvore na engleskom jeziku, a ovaj članak će sadržavati osnove i primjere korištenja.
Datum objave: 24.11.2012
Datum objave: 05.11.2012
A sada će biti prilično velika, ali ne i komplicirana lekcija o radu s datotekama u php-u. Prije svega, čemu služe datoteke? Uostalom, sve možete pohraniti u bazu podataka MySQL podaci ili PostgreSQL ili bilo što drugo. Ali ponekad postoje takvi zadaci kada korištenje baze podataka, uz svu obradu i brigu o sigurnosti veze, nije preporučljivo. Na primjer, trebate napraviti obični brojač, a prije toga u našem projektu nismo koristili bazu podataka. Pa zašto bismo, radi jednog sićušnog brojača, pokrenuli bazu podataka i u nju pohranili samo nekoliko redaka? puno je lakše koristiti datoteke. Osim toga, ponekad hosting uopće ne podržava baze podataka, tada datoteke općenito ostaju jedini izlaz.
Datum objave: 04.11.2012
Kad god dopustite svojim korisnicima da pošalju tekst na vašu stranicu (ime ili bilo koju drugu informaciju), morate biti oprezni. Morate biti sigurni da na stranici nemate sigurnosnih rupa koje napadači mogu iskoristiti za hakiranje. Ako i dalje trebate primati podatke od korisnika, svakako koristite funkciju htmlentities kako biste spriječili pokretanje HTML koda ili skripti koje mogu biti štetne i opasne!
Datum objave: 04.11.2012
U ovoj lekciji ćemo pogledati tehnike za prijenos podataka između obrazaca i stranica. Ove metode su POST i GET. Razgovarat ćemo o svakom zasebno i detaljnije. Općenito govoreći, neophodan je za komunikaciju između oblika. Na primjer, ispunimo neka polja na stranici i trebamo ih prenijeti na drugu stranicu za obradu.
Datum objave: 03.11.2012
Zapravo, kao što ste do sada mogli pogoditi, do while petlja je malo modificirana verzija while petlje koju smo vidjeli u prethodnim tutorijalima. Ako se sjećate kako regularni while radi, bit će vam lakše razumjeti novu petlju. Ponovimo: tijelo while petlje se izvršava ako je uvjet istinit i ne izvršava se ako nije istinit, ali se ne smije izvršiti niti jednom ako je uvjet lažan od samog početka. Kako izgleda dok radi?
Datum objave: 03.11.2012
Zamislite da imate asocijativni niz koji želite iterirati. PHP pruža jednostavan način za redom korištenje svakog elementa niza pomoću konstrukcije Foreach.
Vraća niz objekata koji sadrže informacije o kategoriji.
Parametri proslijeđeni ovoj funkciji vrlo su slični parametrima proslijeđenim funkciji wp_list_categories() i mogu se proslijediti ili kao niz ili kao niz upita: type=post&order=DESC.
✈ 1 put = 0,005625 s = Tako sporo| 50000 puta = 11,98 s = polako| PHP 7.1.11, WP 4.9.5
Korištenje
$kategorije = get_categories($args);Uzorak upotrebe
$categories = get_categories(array("taxonomy" => "category", "type" => "post", "child_of" => 0, "parent" => "", "orderby" => "name", " poredak" => "ASC", "hide_empty" => 1, "hijerarhijski" => 1, "isključi" => "", "uključi" => "", "broj" => 0, "pad_counts" => lažno, // puni popis parametre, pogledajte opis funkcije http://wp-kama.ru/function/get_terms)); if($categories)( foreach($categories as $cat)( // Podaci u objektu $cat // $cat->term_id // $cat->name (Kategorija 1) // $cat->slug (rubrika - 1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taksonomija (kategorija) // $cat->description (Tekst opisa) // $cat-> roditelj (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat-> category_description (Tekst opisa) // $cat->cat_name (Kategorija 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) ) ) taksonomija (crta) Naziv taksonomije za obradu. Dodano od verzije 3.0.Zadano: "kategorija" tip (crta)
- post - kategorije postova (zadano);
- poveznica - dijelovi poveznica.
Zadano: "post"
Zadano: "" naručiti po (crta)
Razvrstavanje primljenih podataka prema određenim kriterijima. Na primjer, prema broju postova u svakoj kategoriji ili prema nazivu kategorije. Dostupni su sljedeći kriteriji:
- ID - sortiranje po ID-u;
- ime - sortiraj po imenu (zadano);
- slug - razvrstavanje po alt. ime (puž);
- count - prema broju prijava u kategoriji;
- term_group - po grupi.
Zadano: "ime"
Narudžba (crta)
Smjer sortiranja naveden u parametru "orderby":
- ASC - redom, od najmanjeg prema najvećem (1, 2, 3; a, b, c);
- DESC - obrnutim redoslijedom, od najvećeg prema najmanjem (3, 2, 1; c, b, a).
Zadano: "ASC"
Sakrij_prazno (logično)
Želite li ili ne dobiti prazne kategorije (bez unosa):
- 1 (istina) - ne primati prazno,
- 0 (lažno) - isprazni se.
Zadano: točno
Hijerarhijski (logično) Ako je parametar postavljen na pravi, rezultat će uključivati prazne podređene kategorije čije podređene kategorije imaju unose (neprazne).
Zadano: točno isključiti (niz/niz) Isključite sve kategorije s popisa. Morate navesti ID-ove kategorija odvojene zarezima ili u nizu. Ako je ovaj parametar naveden, parametar child_of bit će nadjačan.
Zadano: "" uključiti (niz/niz) Navedite samo navedene kategorije. Trebate navesti ID-ove kategorija odvojene zarezima ili u nizu.
Zadano: "" broj (broj) Ograničiti. Broj kategorija koje treba dohvatiti. Prema zadanim postavkama nema ograničenja - sve će kategorije biti dohvaćene. broj_podložaka (logično) Ako je istinito, tada će broj koji pokazuje broj unosa u nadređenim kategorijama biti zbroj vlastitih unosa i unosa iz podređenih kategorija.
Zadano: netočno
Primjeri
#1 Padajući popis
Kako bismo stvorili padajući popis kategorija, možemo koristiti drugu posebnu funkciju wp_dropdown_categories() :
wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("Ništa")));
međutim, s ovim pristupom, izgubit ćemo nešto fleksibilnosti u postavljanju popisa, jer ćemo završiti s potpuno formiranim popisom.
Stoga će u nekim slučajevima biti logičnije stvoriti padajući popis pomoću funkcije get_categories(). Evo primjera (pod pretpostavkom da želimo prikazati potkategorije (djecu) kategorije 10):
#2 Popis kategorija i njihov opis
Ovaj primjer će nam pokazati kako ispisati linkove na kategorije, gdje će odmah iza svakog linka biti opis kategorije (navedeno prilikom kreiranja/uređivanja kategorije):
"ime", "narudžba" => "ASC")); foreach($categories kao $category)( echo "
Kategorija: term_id) . ""naslov="" . sprintf(__("Prikaži sve postove u %s"), $category->name) . "" " . ">" . $category->name."
"; jeka "Opis:". $category->description . "
"; jeka "Broj postova: ". $category->count . "
"; } ?>Bilješke
- Vidi: get_terms() Tip argumenata koji se mogu mijenjati.
Popis promjena
Od verzije 2.1.0 | Predstavljeno. |
Kod getcategories: wp-includes/category.php WP 5.3.2
"kategorija"); $args = wp_parse_args($args, $defaults); /** * Filtrira taksonomiju koja se koristi za dohvaćanje pojmova prilikom poziva get_categories(). * * @od 2.7.0 * * @param string $taxonomy Taksonomija iz koje se dohvaćaju pojmovi. * @param array $args Niz argumenata. Pogledajte get_terms(). */ $args["taksonomija"] = apply_filters("get_categories_taxonomy", $args["taksonomija"], $args); // Back compat if (isset($args["type"]) && "link" == $args["type"]) ( _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* prevoditelji: 1: " type => link", 2: "taxonomy => link_category" */ __("%1$s je zastario. Koristite %2$s umjesto toga."), "tip => veza
",
"taksonomija => kategorija_veza
")); $args["taxonomy"] = "link_category"; ) $categories = get_terms($args); if (is_wp_error($categories)) ( $categories = array(); ) else ( $categories = (array) ) $categories; foreach (array_keys($categories) as $k) ( _make_cat_compat($categories[ $k ]); ) ) return $categories; ) U ovom članku (webmaster level - advanced), govorit ćemo o, presijecajući na različite načine, tzv. fasetirana navigacija. Kako biste pojednostavili asimilaciju materijala, preporučujem da pregledate članak na Wikipediji "Klasifikacija aspekata" i publikacije na engleskom (ali sa slikama!) "Dizajnirajte bolju fasetiranu navigaciju za svoje web stranice".
Fasetirana navigacija filtrirana prema boji ili rasponu cijena može biti korisna za vaše posjetitelje, ali često štetna za pretraživanje stvaranjem višestrukih kombinacija adresa s dvostrukim sadržajem. Zbog duplikata, tražilice neće moći brzo indeksirati web mjesto radi ažuriranja sadržaja, što sukladno tome utječe na indeksiranje. Kako bismo smanjili ovaj problem i pomogli webmasterima da fasetiranu navigaciju učine pogodnom za pretraživanje, željeli bismo:
Idealno za korisnike i Google pretraživanje
Čisti put do stranica proizvoda/članaka:
Predstavljanje URL-a za stranicu kategorije:
http://www.example.com/category.php?category=gumasti-bomboni
Predstavljanje URL-a za određeni proizvod:
http://www.example.com/product.php?item=swedish-fish
Neželjeni duplikati uzrokovani fasetiranom navigacijom
Ista stranica dostupna je s različitih web adresa:
Kanonska stranica
URL: example.com/product.php? item=swedish-fish
Duplicirana stranica
URL:example.com/product.php? item=swedish-fish&category=gumeni-bomboni&price=5-10
kategorija=gumeni-bomboni&okus=kiselo&cijena=5-10
greške:
- Googleu to nema smisla jer korisnici rijetko pretražuju [$9:55 marmelada].
- Nema smisla da alati za indeksiranje pronađu istu stavku ("voćna salata") sa nadređenih stranica kategorije (bilo "Gummi" ili "Sour Gummy").
- Negativna točka za vlasnika stranice, jer su zahtjevi za indeksiranje razrijeđeni s višestrukim verzijama iste kategorije.
- Negativna točka za vlasnika stranice, jer je to beskorisno i nepotrebno opterećenje propusnosti stranice
URL: example.com/category.php? kategorija=gumeni-bomboni&okus=kiselo&cijena=preko-10
greške:
- Neispravno dat kod za tražilice (u ovom slučaju stranica bi trebala dati kod 404)
- Prazna stranica za korisnike
Najgora (neprikladna za pretraživanje) rješenja za fasetiranu navigaciju
Primjer #1: U URL-u se koriste nestandardni parametri: zarezi i zagrade, umjesto ključ=vrijednost&:
- primjer.com/kategorija? [ kategorija:gumasti-bomboni ][ sortiraj:cijena-niska-visoka ][ sid:789 ]
- primjer.com/kategorija?kategorija , gumeni bomboni , sortiranje , nisko do visoko , sid , 789
primjer.com/kategorija? category=gumeni-bomboni&sort=low-to-high&sid=789
Primjer #2: Korištenje direktorija ili staza datoteka umjesto opcija na popisima vrijednosti koje ne mijenjaju sadržaj stranice:
primjer.com/c123/s789/product?swedish-fish
(gdje je /c123/ kategorija, /s789/ ID sesije, koji ne mijenja sadržaj stranice)
Dobra odluka:
- primjer.com /gumeni-bomboni/ proizvod?item=swedish-fish&sid=789(direktorij, /gumene-bombone/, mijenja sadržaj stranice na smislen način)
- example.com/product?item=swedish-fish& kategorija=gumeni-bomboni&sid=789 (URL parametri daju veću fleksibilnost tražilicama da odrede kako učinkovito indeksirati)
Uobičajene vrijednosti koje ne mijenjaju sadržaj stranice i trebaju biti navedene kao URL parametri uključuju:
- ID sesije
- ID praćenje
- Identifikatori preporuke
- Vremenske oznake
Korištenje manjih podataka koje su generirali korisnici web-mjesta (kao što je zemljopisna dužina/širina ili "prije dana") u pretraženim i indeksiranim URL-ovima:
- primjer.com/pronađi-liječnika? radius=15&latitude=40.7565068&longitude=-73.9668408
- example.com/article?category=health& prije dana=7
- primjer.com/pronađi-liječnika? grad=san-francisco&susjedstvo=soma
- example.com/articles?category=health& datum=siječanj-10-2014
- primjer.com /filtriranje/ find-a-doctor?radius=15&latitude=40.7565068&longitude=-73.9668408
- primjer.com /filtriranje/ articles?category=health&days-ago=7
Korisnički agent: *
Zabrani: /filtriranje/
Primjer #4. Dodavanje URL parametara bez logike.
- primjer.com /gumene-bombone/lizalice/gumene-bombone/ gumeni-bomboni/proizvod?švedska-riba
- primjer.com/proizvod? mačka=gumeni-bomboni&mačka=lizalice&mačka=gumeni-bomboni&cat=gumeni-bomboni&item=švedska-riba
- primjer.com /gumeni-bomboni/ proizvod?item=swedish-fish
- primjer.com/proizvod? item=swedish-fish&category=gumeni bomboni
Primjer #5: Predloži daljnje dorade (filtriranje) kada postoje nulti rezultati.
Loše:
Omogućuje korisnicima da odaberu filtre kada postoje nulte stavke za pročišćavanje.
Usklađivanje na stranicu s nula rezultata (na primjer, cijena=preko-10), što frustrira korisnike i uzrokuje nepotrebne upite za tražilice.
Kako da:
Kreirajte veze samo kada postoje elementi koje korisnik može odabrati. Ako je rezultat nula, označite vezu kao "sivu" (tj. ne može se kliknuti). Da biste dodatno poboljšali upotrebljivost, razmislite o uključivanju indikatora broja stavki pored svakog filtra.
Nije dopušteno prikazivanje stranice s nula rezultata (na primjer, cijena=preko-10), osim toga zabranjeno je korisnicima nepotrebne klikove, a tražilicama indeksiranje ove neupotrebljive stranice.
Potrebno je spriječiti nepotrebne URL-ove i minimizirati prostor posjetitelja generiranjem URL-ova samo kada su proizvodi dostupni. To će pomoći da korisnici ostanu angažirani na vašoj web-lokaciji (manje klikova na gumb Natrag kada nije pronađen proizvod), smanjiti broj mogućih URL-ova poznatih tražilicama. Također, ako stranica nije samo "trenutno rasprodana", nego je malo vjerojatno da će ikada sadržavati relevantne informacije, razmislite o tome da joj date kod odgovora 404. Na stranici 404 možete dizajnirati korisnu poruku za korisnike s više mogućnosti navigacije ili okvirom za pretraživanje kako bi korisnici mogli pronaći srodne proizvode.
Za nove web-lokacije čiji webmasteri razmatraju implementaciju fasetirane navigacije, postoji nekoliko opcija za optimizaciju indeksiranja (zbirka adresa na vašoj web-lokaciji poznatih Googlebotu) stranica s jedinstvenim sadržajem i smanjenje indeksiranja dvostrukih stranica u tražilici (konsolidacija signala indeksiranja).
Odredite koji su parametri URL-a potrebni tražilicama za indeksiranje svake pojedine stranice sadržaja (tj. odredite koji su parametri potrebni za stvaranje najmanje jedne putanje klika do svake stavke). Traženi parametri mogu uključivati item-id, category-id, page itd.
Odredite koji će parametri biti korisni posjetiteljima s njihovim upitima, a koji će vjerojatnije uzrokovati dupliciranje u indeksiranju i indeksiranju. U primjeru slatkiša (marmelada), parametar URL-a "okus" mogao bi biti vrijedan korisnicima s upitima u primjeru okus=kiselo . Međutim, logično je smatrati da parametar "cijena" uzrokuje nepotrebno dupliciranje kategorija=gumeni-bomboni&okus=kiselo& cijena=preko-10 . Ostali uobičajeni primjeri:
- Vrijedni parametri za tražilice: item-id, category-id, name, brand...
- Nepotrebni parametri: session-id, price-range ...
Opcija 1: i interne veze
Označite sve nepotrebne URL-ove s . To će smanjiti troškove rada robota za pretraživanje i spriječiti smanjenje učestalosti skeniranja. Morate globalno upravljati indeksiranjem kroz robots.txt (Napomena prevoditelja: pogledajte članak "").
Koristite atribut rel="canonical" za odvajanje stranica za indeks pretraživanja od stranica koje tamo nisu potrebne (na primjer, na stranici cijena=5-10
možete napisati atribut rel="canonical", koji označava kategoriju svih kiselih marmelada example.com/category.php?category=gumasti-bomboni&okus=kiselo& stranica=sve
).
Opcija 2: Robots.txt i Disallow
URL-ovi s nepotrebnim parametrima uključeni su u /filtering/ direktorij, koji će biti zatvoren u robots.txt (zabrani disallow). Ovo će svim tražilicama omogućiti indeksiranje samo "ispravne" unutarnje veze (sadržaja) stranice, ali će blokirati indeksiranje neželjenih URL-ova odjednom. Na primjer ( example.com/category.php?category=gumasti-bomboni), ako su vrijedni parametri bili predmet, kategorija i okus, a ID sesije i cijena bili su suvišni, tada bi URL za okus bio:
example.com/category.php?category=gumasti-bomboni& okus=kiselo,
ali sve nepotrebne parametre, poput cijene, URL će uključiti u unaprijed definirani direktorij - /filtriranje/:
primjer.com /filtriranje/ kategorija.php?category=gumasti-bomboni&price=5-10,
koji će tada biti zabranjen putem robots.txt:
Korisnički agent: *
Zabrani: /filtriranje/
Opcija 3: Odvojeni hostovi
Provjerite jesu li i dalje primjenjiva najbolja gore navedena rješenja (na primjer za neželjene adrese). Inače, tražilice su već formirale veliku masu linkova u indeksu. Stoga će vaš rad biti usmjeren na smanjenje daljnjeg rasta nepotrebnih stranica koje pregledava Googlebot i konsolidaciju signala indeksiranja.
Koristite parametre sa standardnim kodiranjem i formatom ključ=vrijednost.
Uvjerite se da su vrijednosti koje ne mijenjaju sadržaj stranice, kao što su ID-ovi sesije, implementirane kao ključ=vrijednost, a ne direktoriji.
Nemojte dopustiti klikove i nemojte generirati URL-ove kada nema elemenata za filtriranje.
Dodajte logiku preslikavanju parametara URL-a: uklonite nepotrebne parametre radije nego da stalno dodajete vrijednosti (npr. izbjegavajte generiranje veze poput ove: example.com/product?cat=gumasti-bomboni&cat=lizalice &cat=gumasti-bomboni&item=swedish-fish).
Pohranite vrijedne parametre u URL tako da ih prvo navedete (jer su URL-ovi vidljivi u rezultatima pretraživanja), a manje relevantne parametre na kraju (kao što je ID sesije).
Izbjegavajte ovu strukturu veze: primjer.com/kategorija.php? session-id=123&tracking-id=456&category=gumeni-bomboni&okus=kiselo
Podesite postavke URL-a u Alatima za webmastere ako jasno razumijete kako funkcioniraju veze na vašoj web-lokaciji.
Osigurajte da kada koristite JavaScript za dinamičko upravljanje sadržajem (sortiranje/filtriranje/sakrij) bez ažuriranja URL-a, na vašem web-mjestu postoje stvarne web-adrese koje imaju vrijednost pretraživanja, kao što su glavne kategorije i stranice proizvoda, koje se mogu indeksirati i indeksirati. Pokušajte ne koristiti samo početnu stranicu (tj. jedan URL) za cijelu svoju stranicu, već dinamički mijenjajte sadržaj navigacije kroz JavaScript - to će, nažalost, korisnicima dati samo jedan URL u pretrazi. Također, provjerite da izvedba ne utječe negativno na dinamičko filtriranje, jer će spriječiti korisnika da radi sa web mjestom.
Poboljšajte indeksiranje različitih stranica istog sadržaja navođenjem atributa rel="canonical" na privilegiranoj verziji stranice. Atribut rel="canonical" može se koristiti unutar jedne ili više domena.
Optimizirajte indeksiranje "straničnog" sadržaja (npr. page=1 i page=2 iz kategorije "gumenih bombona") pomoću (ili):
- Dodajte atribut rel="canonical" nizu stranica navodeći kanoničku kategoriju s parametrom "view-all" (npr. page=1, page=2 i page=3 iz kategorije "gumeni bomboni" s rel=” kanonski” na kategorija=gumeni-bomboni&stranica=sve), osiguravajući da je stranica relevantna za korisnike i da se brzo učitava.
- Upotrijebite označavanje stranica rel="next" i rel="prev" da označite odnos između pojedinačnih stranica (pogledajte "Stranica s rel="next" i rel="prev" ").
I tako, za početak ću opisati s čime ćemo raditi i što će nam trebati.
Sustav: PHP 5 i noviji, mySQL 4 i noviji
Pomoćne klase: dbsql.class.php (klasa baze podataka)
Klasa ugniježđene kategorije: classTreeCategory.php (izravno glavna klasa, njen popis i objašnjenja dati su u nastavku.
Napravite tablicu u bazi podataka sa sljedećom strukturom:
Pregled MySQL koda
Ova tablica sadrži polje iskaznica– redni broj kategorije, podkat- ima vrijednost nula za kategorije prvog reda ili ID nadređene kategorije, Ime- naziv kategorije.
Primjer klase, koja prikazuje kategorije kao popis s potkategorijama:
Pogledajte PHP kod
uključi("dbsql.class.php") ; uključi("classTreeCategory.php" ) ; $DB = novi DB_Engine("mysql" , $settings [ "dbHost" ] , $settings [ "dbUser" ] , $settings [ "dbPass" ] , $settings [ "dbName" ] ) ; // povezivanje s bazom podataka, navođenje podataka o pristupu$category = nova TreeCategory ($DB) ; // prijelaz u kategoriju klase, objekt rada s bazom podataka$category -> table = "category" ; // naziv tablice u bazi podataka s kategorijama$array = $category -> getCategory() ; // dobiti sve kategorije iz baze podataka u obliku višerazinskog niza, sortirane i ugniježđene već redoslijedom koji nam je potreban$category -> outCategory ($array, "opcija") ; // priprema izlaza kategorija (formiranje HTML-a), prosljeđivanje polja s kategorijama echo $kategorija -> html ; // izlaz kategorije kao HTML |
Kao što možete vidjeti iz gornjeg primjera, sve je krajnje jednostavno, kreiramo novi objekt $category, postavljamo s kojom tablicom baze podataka radimo: 'category', zatim iz tablice dobivamo popis svih kategorija koje su već formatirane kao niz i raščlanjeni hijerarhijskim redom, uzimajući u obzir sve potkategorije. zatim niz prosljeđujemo metodi outCategory() koja za nas generira gotov HTML kod koji se samo prikazuje u pregledniku.
Metoda outCategory(), kao što vidimo, uzima dva parametra @array i @string u prvom parametru niz sa svim kategorijama, au drugom niz koji sadrži vrijednost opcija ili stol, ova vrijednost određuje koju vrstu HTML koda treba generirati.
Značenje opcija
Pogledajte HTML kod
Za umetanje zadanog HTML koda u odabrano polje bilo kojeg obrasca.
Značenje stol- generira sljedeći HTML kod:
Pogledajte HTML kod
Ovaj HTML kod je zgodan za lijepljenje u tablicu koja prikazuje sve naše potkategorije kategorija.
Klasa također ima sljedeće metode:
izbrisati stavku ($id);- uklanja jednu kategoriju, unatoč ugniježđenim
delKategorija($niz, $id);- briše kategoriju sa svim ugniježđenim potkategorijama, $array - niz sa svim kategorijama pripremljen metodom $category->getCategory(), $id - broj kategorije koja se briše
Dodaj Predmet();- ovu metodu treba pozvati ako želite dodati kategoriju, dok ova metoda čita vrijednosti iz podataka prenesenih POST metodom, tj. iz niza $_POST.
$name=$this->PHP_slashes(strip_tags($_POST['name'])); // ime kategorije
$podcat=intval($_POST['podcat']); // ID nadređene kategorije, ako je navedena 0, kategorija će biti u korijenu.
updateItem(); - slično prethodnoj metodi, osim što ova metoda ažurira kategoriju, njen naziv i razinu ugniježđenja.
Cijeli razred je napisan u roku od sat vremena i, naravno, ima nedostataka, ali sve se to može popraviti. Njegova upotreba je preporučljiva u obrazovne svrhe, iako usput, nakon što ga malo dovršite, možete ga ugraditi u bilo koji sustav i uživati u njegovom radu)).
Bio bih vam zahvalan ako u komentarima ponudite vlastite opcije za rješavanje ovog problema - organiziranje kategorija beskonačne razine gniježđenja.