Zbytečná kategorie php. Třída PHP pro pohodlnou a bezpečnou práci s MySQL. Pohodlí a stručnost kódu aplikace

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"
"; }

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.

Vrátí pole objektů obsahujících informace o kategoriích.

Parametry předávané této funkci jsou velmi podobné parametrům předávaným funkci wp_list_categories() a lze je předat buď jako pole, nebo jako řetězec dotazu: type=post&order=DESC .

✈ 1 čas = 0,005625 s = Tak pomalý| 50 000 krát = 11,98 s = pomalu| PHP 7.1.11, WP 4.9.5

Používání

$categories = get_categories($args);

Vzor použití

$categories = get_categories(array("taxonomy" => "kategorie", "typ" => "příspěvek", "child_of" => 0, "rodič" => "", "orderby" => "jméno", " order" => "ASC", "hide_empty" => 1, "hierarchical" => 1, "exclude" => "", "include" => "", "number" => 0, "pad_counts" => false, // úplný seznam parametrů naleznete v popisu funkce http://wp-kama.ru/function/get_terms)); if($categories)( foreach($categories as $cat)( // Data v objektu $cat // $cat->term_id // $cat->name (Rubrika 1) // $cat->slug (rubrika - 1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taxonomy (kategorie) // $cat->description (text popisu) // $cat-> rodič (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat-> category_description (Text popisu) // $cat->cat_name (Rubrika 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) ) ) taxonomie (čára) Název taxonomie, která má být zpracována. Přidáno od verze 3.0.
Výchozí: "kategorie" typ (čára)
  • příspěvek - kategorie pro příspěvky (výchozí);
  • odkaz - sekce odkazů.
    Výchozí: "post"
dítě_of (čára) Získejte podřízené kategorie (včetně všech úrovní vnoření) zadané kategorie. Parametr určuje ID nadřazené kategorie (kategorie, jejíž vnořené kategorie chcete zobrazit). rodič (číslo) Získá kategorie, jejichž nadřazená kategorie se rovná ID zadanému v parametru. Rozdíl oproti child_of je v tom, že se zobrazí jedna úroveň vnoření.
Výchozí: "" seřadit podle (čára)

Třídění přijatých dat podle určitých kritérií. Například podle počtu příspěvků v jednotlivých kategoriích nebo podle názvů kategorií. K dispozici jsou následující kritéria:

  • ID - řazení podle ID;
  • jméno - řazení podle názvu (výchozí);
  • slimák - řazení podle alt. jméno (slimák);
  • počet - podle počtu příspěvků v kategorii;
  • term_group - podle skupiny.

Výchozí: "name"

Objednat (čára)

Směr řazení zadaný v parametru "orderby":

  • ASC - v pořadí, od nejmenšího po největší (1, 2, 3; a, b, c);
  • DESC - v obráceném pořadí, od největšího po nejmenší (3, 2, 1; c, b, a).

Výchozí: "ASC"

Skrýt_prázdný (logický)

Zda přijímat prázdné kategorie (bez položek):

  • 1 (pravda) - nedostávat prázdné,
  • 0 (false) - přijímat prázdné.

Výchozí: true

Hierarchický (logický) Pokud je parametr nastaven na skutečný, pak bude výsledek zahrnovat prázdné podřízené kategorie, jejichž podřízené kategorie mají (neprázdné) položky.
Výchozí: true vyloučit (řetězec/pole) Vyloučit všechny kategorie ze seznamu. Musíte zadat ID kategorií oddělená čárkami nebo v poli. Pokud je zadán tento parametr, bude přepsán parametr child_of.
Výchozí: "" zahrnout (řetězec/pole) Uveďte pouze zadané kategorie. Musíte zadat ID kategorií oddělená čárkami nebo v poli.
Výchozí: ""číslo (číslo) Omezit. Počet kategorií, které budou načteny. Ve výchozím nastavení bez omezení – budou načteny všechny kategorie. pad_counts (logický) Pokud předáte hodnotu true, pak číslo, které ukazuje počet příspěvků v nadřazených kategoriích, bude součtem jejích příspěvků a příspěvků z podřízených kategorií.
Výchozí: false

Příklady

#1 Rozbalovací seznam

Abychom vytvořili rozevírací seznam kategorií, můžeme použít další speciální funkci pro tento účel, wp_dropdown_categories() :

Wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("Žádné")));

s tímto přístupem však ztratíme určitou flexibilitu při nastavování seznamu, protože obdržíme plně vytvořený seznam.

Proto bude v některých případech logičtější vytvořit rozevírací seznam pomocí funkce get_categories(). Zde je příklad (za předpokladu, že potřebujeme zobrazit podkategorie (děti) kategorie 10):

#2 Seznam kategorií a jejich popisy

Tento příklad nám ukáže, jak můžeme zobrazit seznam odkazů na kategorie, kde hned za každým odkazem bude popis kategorie (zadaný při vytváření/úpravě kategorie):

"jméno", "objednávka" => "ASC")); foreach($categories jako $category)( echo "

Kategorie: term_id) . "" title="" . sprintf(__("Zobrazit všechny příspěvky v %s"), $category->name) . "" " . ">" . $category->name."

"; echo"

Popis:". $category->description ."

"; echo"

Počet příspěvků: ". $category->count."

"; } ?>

Poznámky

  • Viz: get_terms() Typ argumentů, které lze změnit.

Seznam změn

Od verze 2.1.0 Představeno.

Kód získat kategorie: wp-includes/category.php WP 5.3.2

"kategorie"); $args = wp_parse_args($args, $defaults); /** * Filtruje taxonomii použitou k načtení výrazů při volání get_categories(). * * @since 2.7.0 * * @param string $taxonomy Taxonomie, ze které se mají načíst termíny. * @param pole $args Pole argumentů. Viz get_terms(). */ $args["taxonomie"] = apply_filters("get_categories_taxonomy", $args["taxonomy"], $args); // Zpět compat if (isset($args["type"]) && "link" == $args["type"]) ( _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* translators: 1: " type => link", 2: "taxonomy => link_category" */ __("%1$s je zastaralé. Použijte místo toho %2$s."), "", "typ => odkaz taxonomie => kategorie_odkazu

")); $args["taxonomy"] = "kategorie_odkazu"; ) $categories = get_terms($args); if (is_wp_error($categories)) ( $categories = pole(); ) else ( $kategorie = (pole ) $categories foreach (array_keys($categories) jako $k) ( _make_cat_compat($categories[ $k ]); ) ) vrátit $categories;

Pro každý příspěvek a položku WordPress může uživatel určit jeden nebo více nadpisů (kategorií). Tato funkce umožňuje seskupovat příspěvky, které mají podobný význam, a poskytnout návštěvníkům možnost číst a zobrazovat pouze ty sekce, které se jim líbí. Když jsem například vytvářel svůj hlavní blog Tod’s Blog, chystal jsem se psát o všech nuancích internetu – od designu po programování. Řekněme, že člověk přišel od vyhledávače k ​​článku o Wordpressu a chtěl si o systému přečíst ještě víc – musel by se prohrabovat v archivech, znovu použít vyhledávání nebo prolistovat všechny příspěvky za sebou. Tomu všemu se samozřejmě dalo předejít přechodem do speciální kategorie zvané wordpress. Nebo například pro ty, kteří se zajímají pouze o design, by mohla být zajímavá sekce blogu.

Pokud se pozorně podíváte na záhlaví blogu, můžete vidět jakési menu, kde kategorie WordPress fungují jako sekce projektu. Pokud jde o mě, je to docela pohodlný a vizuální způsob, jak oddělit témata příspěvků.

Na pravé straně stránky Kategorie se zobrazují všechny kategorie WordPress s možností úpravy nebo mazání. Chcete-li provést akce, stačí najet kurzorem myši na název konkrétní kategorie, poté se zobrazí malé vyskakovací menu.

Při editaci se vám zobrazí jeden z informačních bloků, kde můžete vybrat jednu nebo více kategorií článku. Stačí zaškrtnout políčka vedle jmen, která chcete.

Zde můžete přidat nové kategorie kliknutím na příslušný odkaz. Jedinou nevýhodou tohoto mechanismu je, že při vytváření můžete zadat pouze název a nadřazenou kategorii, zatímco pro nastavení pole štítku budete muset přejít do sekce „Kategorie“ a tam upravit informace.

Kromě toho můžete upravovat kategorie blogových příspěvků prostřednictvím jejich seznamu v nabídce Příspěvky – Upravit. Když tam najedete myší na konkrétní publikaci, uvidíte odkaz „Rychlá úprava“. Klikněte na něj a podívejte se na formulář pro úpravu:

Zde můžete změnit kategorie, štítky a všechny další informace o článku. Věc je velmi pohodlná + funguje bez opětovného načítání stránky.

funkce wp_list_categories pro kategorii wordpress

Tradičně se zabývám nejen problematikou práce s určitými prvky systému, ale také poskytováním speciálních funkcí pro šablony. Přesně jak jsem mluvil. Chcete-li tedy zobrazit seznam kategorií s odkazy na ně, použijte wp_list_categories. Má několik argumentů:

  • show_option_all – zobrazí odkaz na všechny kategorie, pokud jste jako styl zobrazení vybrali seznam.
  • orderby – řazení pro kategorie podle ID, názvu (jména), štítku (slug), počtu příspěvků (počet).
  • order – řazení (ASC – rostoucí, DESC – klesající).
  • show_last_updated – zobrazí datum poslední aktualizace.
  • styl – styl designu: seznam, členění přes
    (žádný).
  • show_count – zobrazí počet příspěvků v kategorii.
  • hide_empty – skryje prázdné kategorie bez příspěvků.
  • use_desc_for_title – použijte popis pro atribut title v odkazu.
  • child_of – zobrazí pouze kategorie pro danou nadřazenou kategorii.
  • feed – zobrazí odkaz na feed pro kategorie.
  • feed_type – typ zdroje.
  • feed_image – obrázek pro ikonu rss.
  • vyloučit – vyloučí kategorie ze seznamu a parametr child_of je automaticky zakázán.
  • include_tree – vyloučí celou větev kategorie.
  • include je inverzní parametr, který zahrnuje pouze zadané kategorie WordPress v seznamu.
  • hierarchický – parametr pro zobrazení podkategorií.
  • title_li – název seznamu kategorií.
  • počet – počet kategorií k zobrazení (pokud je jich příliš mnoho).
  • echo – zobrazuje kategorie, výchozí je True.
  • hloubka – určuje počet úrovní pro zobrazení podkategorií.

Nakonec uvedu několik příkladů použití wp_list_categories. Za prvé, možnost z hlavičky tohoto blogu.

"hide_empty=1&exclude=1&title_li=&orderby=count&order=desc&use_desc_for_title=0") ; ?>

Zde je nastaveno zobrazení skrytých kategorií, vyloučení kategorií ze seznamu, prázdný řádek pro nadpis bloku, řazení podle počtu článků a podle sestupného pořadí (tedy nejvíce článků mám v sekci). Poslední argument nenahrazuje popis kategorie do názvu odkazu.

No a ještě pár jednoduchých situací. Použití vyloučení a zahrnutí kategorií.

Pokud máte co dodat k nadpisům a kategoriím WordPress, napište do komentářů.

Aktualizace: Možná budete také potřebovat malý hack na . Ve WordPressu je ve výchozím nastavení definován text nadpisu, něco jako „zobrazit všechny položky v kategorii ....“, místo toho můžete ponechat název kategorie – přečtěte si článek na výše uvedeném odkazu.




Horní