Kategorie PHP (Strom kategorií). Plně využíváme podmínku if. Bezcitná kategorie php
A tak pro začátek popíšu, s čím budeme pracovat a co budeme potřebovat.
Systém: PHP 5 a vyšší, mySQL 4 a vyšší
Pomocné třídy: dbsql.class.php (třída pro práci s databází)
Třída vnořených kategorií: classTreeCategory.php (přímo hlavní třída, níže je její výpis a vysvětlení.
V databázi vytvoříme tabulku s následující strukturou:
Zobrazit kód MYSQL
Tato tabulka obsahuje pole ID - pořadové číslo kategorie, podcat - má hodnotu nula pro kategorie prvního řádu nebo ID nadřazené kategorie, název - název kategorie.
Příklad fungování třídy, zobrazení kategorií v seznamu s podkategoriemi:
Zobrazit kód PHP
include ("dbsql.class.php" ); include ("classTreeCategory.php" ) ; $DB = new DB_Engine("mysql" , $settings [ "dbHost" ] , $settings [ "dbUser" ] , $settings [ "dbPass" ] , $settings [ "dbName" ] ) ; // připojení k databázi s uvedením přístupových údajů $category = new TreeCategory ($DB ) ; // předání třídě category, objektu pro práci s databází $category -> table = "category" ; // název tabulky v databázi s kategoriemi $array = $category -> getCategory () ; // získáme všechny kategorie z databáze ve formě víceúrovňového pole, setříděné a vnořené v pořadí, v jakém potřebujeme $category -> outCategory ($array, "option" ) ; // příprava výstupu kategorií (tvorba HTML), předání pole s kategoriemi echo $category -> html ; // výstupní kategorie jako HTML název |
Jak můžete vidět z výše uvedeného příkladu, vše je velmi jednoduché, vytvoříme nový objekt $category, nastavíme, se kterou databázovou tabulkou pracujeme: 'category', poté z tabulky získáme seznam všech kategorií již zformátovaných jako pole a uspořádány v hierarchickém pořadí s přihlédnutím ke všem podkategoriím. pak pole předáme metodě outCategory(), která nám vygeneruje hotový HTML kód, který nám stačí zobrazit v prohlížeči.
Jak vidíme, metoda outCategory() přebírá dva parametry @array a @string, v prvním parametru pole se všemi kategoriemi a ve druhém řádku obsahující hodnotu volby nebo tabulky, tato hodnota udává, jaký typ kódu HTML potřebuje. být generován.
hodnotu opce
Zobrazit kód HTML
-kategorie 1 --podkategorie 1 ---podkategorie 1 -kategorie 2 |
Chcete-li vložit tento kód HTML do pole výběru libovolného formuláře.
Hodnota tabulky generuje následující HTML kód:
Zobrazit kód HTML
Tento HTML kód je vhodný pro vložení do tabulky, která zobrazuje všechny naše kategorie a podkategorie.
Třída má také následující metody:
deleteItem($id); — odstraní jednu kategorii, navzdory vnořeným kategoriím
delCategory($pole, $id); — smaže kategorii se všemi vnořenými podkategoriemi, $array — pole se všemi kategoriemi připravenými metodou $category->getCategory(), $id — číslo kategorie, která má být smazána
přidat položku(); — tato metoda by se měla volat, pokud chcete přidat kategorii a tato metoda čte hodnoty z dat přenášených metodou POST, tzn. z pole $_POST.
$name=$this->PHP_slashes(strip_tags($_POST[‘název’])); // Název Kategorie
$podcat=intval($_POST['podcat']); // ID nadřazené kategorie, pokud je zadáno 0, bude kategorie v kořenu.
updateItem() ; — podobná předchozí metodě s tím rozdílem, že tato metoda aktualizuje kategorii, její název a úroveň vnoření.
Celá hodina byla napsána během hodiny a má samozřejmě nějaké nedostatky, ale tohle je vše opravitelné. Jeho použití je vhodné pro vzdělávací účely, i když po jeho malém dokončení jej můžete integrovat do jakéhokoli systému a užívat si jeho práci)).
Byl bych vděčný, kdybyste v komentářích navrhli vlastní řešení tohoto problému - organizování kategorií nekonečné úrovně hnízdění.
Dnes je naším cílem vytvořit hierarchickou strukturu kategorií. Je pro nás důležité, aby bylo pohodlné ukládat kategorie a bylo snadné je zobrazit tam, kde je potřebujeme.
Někdy se jednoduché věci zdají komplikované, a proto zveřejním několik fragmentů kódu, které vám, jak doufám, budou užitečné pro implementaci kategorií PHP ve formě stromu.
Struktura by se tedy měla skládat z id kategorie (id), názvu kategorie (name) a samozřejmě id nadřazené kategorie (id_rodiče). V MySQL to vypadá takto:
VYTVOŘIT TABULKU, POKUD NEEXISTUJE `kategorie` (`id` int(10) nepodepsané NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMÁRNÍ KLÍČ (`id`)) ENGINE =InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Minimální a přehledná struktura tabulky pro ukládání kategorií.
INSERT INTO `category` (`id`, `name`, `parent_id`) VALUES (1, "Telefony a tablety", "0"), (2, "Auta", "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");
Pokud je hodnota parent_id=0, tato kategorie nemá nadřazenou kategorii.
Vše je zde jasné a jednoduché. Nyní se pustíme do zobrazení seznamu kategorií. Abychom však seznam správně zobrazili, musíme nejprve získat celý seznam kategorií PHP a teprve poté pomocí rekurze vytvořit náš strom. K získání tohoto seznamu je navržena následující funkce:
Funkce get_cat() ( //dotaz databáze $sql = "SELECT * FROM kategorie"; $result = mysql_query($sql); if(!$result) ( return NULL; ) $arr_cat = array(); if( mysql_num_rows( $result) != 0) ( //V cyklu vytvoříme pole pro ($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; } }
//získání pole adresáře $result = get_cat();
Nyní potřebujeme funkci s rekurzí
Funkce view_cat($arr,$parent_id = 0) ( //Podmínky pro ukončení rekurze if(empty($arr[$parent_id])) ( return; ) echo "
- "; // procházejte pole a zobrazte jej na obrazovce pro ($i = 0; $i< count($arr[$parent_id]);$i++) {
echo "
- " .$arr[$parent_id][$i]["name"]."; //rekurze – zkontrolujte, zda existují nějaké podřízené kategorie view_cat($arr,$arr[$parent_id][$i]["id" ]); echo" ";) echo"
Nyní zbývá pouze zobrazit adresář na obrazovce pomocí rekurzivní funkce
View_cat($result);
A to je obecně vše. Tímto způsobem můžeme získat kompletní strom kategorií s nekonečnými podkategoriemi.
Poměrně častým zmatkem při vývoji tématu pro WordPress je, jak používat konstruktor podmínky if else, jak je správně nastavit a jak je obecně používat ve WordPressu. Aby se miliony uživatelů nezbláznily při hledání řešení, vytvořil WordPress takříkajíc podmíněné značky, o jejichž použití bude dnes řeč.
Konstrukce standardního stavu vypadá takto:
Na jednu stranu je vše jasné, ale na druhou je otázka, jak správně formulovat podmínku, aby WordPress pochopil, co od toho chceme :) pojďme na to:
1. Domovská stránkaČasto chceme, aby se určité informace zobrazovaly pouze na hlavní stránce. Chcete-li to vyřešit, můžete vytvořit soubor home.php ve složce motivu nebo přidat do souboru index.php následující podmínku:
....Zde zobrazujeme informace, které chceme vidět na hlavní stránce
2. Kontrola rubrikStanovme si následující podmínku: Pokud jsme v sekci WordPress, zobrazíme frázi „Vítejte, WordPress!“ a pokud ne, pak frázi „Vítejte na našem webu!“
/*U takového schématu je to možné*/
"Vítejte, WordPress!"
Vítejte na našich stránkách!"
Dále budu id používat jako identifikátor pro kategorii (tag) nebo příspěvek (stránku) – najdete jej v ovládacím panelu webu. Pokud píšete podmínky pro kategorie (tagy), tak se podívejte na id na stránce kategorie (tagu) a pokud píšete příspěvky (stránky), tak na stránce všech příspěvků (stránek)... panika. Jak to zjistíte? - viz obrázek:
A další trik 🙂 řekněme, že potřebujeme podmínku pro kontrolu několika kategorií, pak budou podmínky vypadat takto:
vydejme, co potřebujeme
3. Zkontrolujte značkyTagy jsou skvělým klasifikátorem v rámci kategorií. Zvažte několik příkladů, jak je můžete zkontrolovat.
Úkol: Pokud je příspěvek označen jako „plugin“, pak zobrazte frázi – WordPress Plugin
Úkol: Pokud jsme na stránce tagu „plugin“, zobrazte frázi – Kolekce pluginů WordPress.
Poznámka: Při práci s podmínkami štítku je lepší použít štítek spíše než jeho identifikátor.
ZávěrPokryl jsem základní podmíněné značky, pokud máte nějaké dotazy, zeptejte se jich v komentářích! Šťastné používání!
Stromové zobrazení podkategorií kategorií poskytuje uživatelsky přívětivý způsob, jak vypsat nadřazené a podřízené kategorie. Kategorie a jejich podkategorie jsou snadno odděleny stromovou strukturou. Stromové zobrazení kategorií se vždy doporučuje pro zobrazení nekonečné úrovně kategorií a podkategorií.
V tomto tutoriálu vám ukážeme, jak vytvořit dynamický strom podkategorií kategorií pomocí PHP a MySQL. Rekurzivní strom kategorií je velmi užitečný pro seznam n kategorií úrovní v rozevíracím seznamu. Ukázkový kód vám pomůže vytvořit rozevírací seznam podkategorií kategorie n úrovně v PHP. Data dynamických kategorií budou načtena z databáze MySQL a uvedena ve formátu stromu kategorií rodič-dítě.
Vytvořte tabulku databázePro ukládání kategorií a podkategorií je potřeba v databázi vytvořit tabulku. Následující SQL vytvoří tabulku kategorií v databázi MySQL.
CREATE TABLE `categories ` (`id` int (11) NOT NULL AUTO_INCREMENT, `parent_id` int (11) NOT NULL DEFAULT "0" , `name` varchar (100 ) COLLATE utf8_unicode_ci NOT NULL, `created` date NOT NULL `modified` datetime NOT NULL , `status` enum("1" ,"0" ) COLLATE utf8_unicode_ci NOT NULL DEFAULT "1" KOMENTÁŘ "1:Aktivní, 0:Neaktivní" , PRIMÁRNÍ KLÍČ (`id` )) ENGINE= InnoDB DEFAULT CHARSET= utf8 COLLATE= utf8_unicode_ci;Sloupec parent_id určuje, zda je kategorie nadřazená nebo podřízená. Pokud je parent_id 0, bude to nadřazená kategorie. V opačném případě se bude jednat o podřízenou kategorii a ID je nadřazenou kategorií této kategorie.
Konfigurace databáze (dbConfig.php)K připojení a výběru databáze slouží soubor dbConfig.php. Zadejte hostitele databáze ($dbHost), uživatelské jméno ($dbUsername), heslo ($dbPassword) a jméno ($dbName) podle vašich pověření MySQL.
Rekurzivní funkce PHP pro generování nadřazeného/podřízeného stromuFunkce categoryTree() generuje strom podkategorií kategorie n úrovně pomocí PHP. Vytvoří rozevírací možnosti pro strom kategorií.
- $parent_id – volitelné. Chcete-li získat podřízené kategorie této nadřazené kategorie, zadejte ID rodiče.
- $sub_mark – volitelné. Označte, že se připojí na začátek názvu podřízené kategorie.