Beznádejná kategória php. Príklad vytvorenia internetového obchodu v dreamweaver8. #3 Kontrola, či príspevok patrí do aktuálnej alebo vnorenej kategórie

  • 20.06.2020

Skontroluje, či aktuálny (alebo určený) príspevok patrí do zadanej kategórie (možno zadať viacero kategórií). Podmienený štítok.

Kontroluje sa priama príslušnosť príspevku do kategórie, t.j. či zadaná kategória obsahuje aktuálny/uvedený príspevok. Ak napríklad príspevok patrí do nadradenej kategórie alebo potomka zadanej kategórie, funkcia vráti hodnotu false.

Ak chcete skontrolovať vzťah príspevku k stromu kategórií, použite funkciu post_is_in_descendant_category() (pozri príklad nižšie).

in_category() možno použiť vo vnútri slučky WordPress alebo mimo slučky WordPress, ale na samostatnej stránke príspevku (single.php). Alebo ho môžete použiť kdekoľvek, ak zadáte, ktorý príspevok chcete skontrolovať.

✈ 1 krát = 0,003672 s = Tak pomaly| 50 000 krát = 1,00 s = veľmi rýchlo| PHP 7.1.5, WP 4.8.1

Nie sú tam žiadne háčiky.

sa vracia

true, ak je podmienka splnená, a nepravda v opačnom prípade.

Použitie

if(in_category($category, $post))( // ... ) $category (reťazec/pole/číslo) (povinné)

ID, názov alebo slimák kategórie na kontrolu, či do nej príspevok patrí.

V zmiešanom poli môžete zadať niekoľko parametrov.
Predvolená hodnota: nie

$post (číslo/objekt) ID príspevku alebo objekt. V predvolenom nastavení sa aktuálny príspevok automaticky zistí v slučke WordPress alebo na stránke príspevku.
Predvolená hodnota: nie

Príklady

#1 Kontrola aktuálneho príspevku v slučke WordPress.

in_category sa často používa v slučke na kontrolu, či príspevok patrí do zadanej kategórie, ak áno, vykonajte nejakú akciu:

If (in_category("tlsvokožce")) ( // akcie, ak príspevok patrí do kategórie "tlsavce" ) elseif (in_category(array("Tropické vtáky", "malé cicavce"))) ( // akcie, ak príspevok patrí do jednej z kategórií "tropické vtáky", "drobné cicavce" ) inak ( // ak nie je splnená žiadna z predchádzajúcich podmienok. )

P.S. Pre kontroly je lepšie uviesť nie mená, ale ID kategórie

#2 Kontrola aktuálneho príspevku mimo slučky.

Na stránke príspevku (zvyčajne súbor šablóny single.php) možno overenie vykonať mimo slučky:

If (in_category("ovocie")) ( include "single-fruit.php"; ) elseif (in_category("vegetables")) ( include "single-vegetables.php"; ) else ( // Tu je slučka WordPress začína if ( have_posts()) : while (have_posts()) : the_post(); // ... )

#3 Kontrola, či príspevok patrí do aktuálnej alebo vnorenej kategórie

Sú chvíle, keď potrebujete skontrolovať, či príspevok patrí do stromu kategórií. Napríklad v kontrole zadáme kategóriu ID 60 a príspevok patrí do kategórie 70, ktorá je potomkom kategórie 60. Ale in_category() v tomto prípade vráti hodnotu false a niekedy musí vrátiť hodnotu true.

Ak chcete skontrolovať príslušnosť k stromu kategórií, môžete postupne zadať všetky názvy kategórií v poli:

If(in_category(array("Maliny", "Jablká", "Banány", "Hrušky", "Slivky"))) ( // Akcia, ak je splnená podmienka )

Tento overovací prístup je úplne neflexibilný, pretože ak do kategórie „Ovocie“ pridáme novú podkategóriu, budeme ju musieť pridať aj do poľa na overenie.

Aby ste sa vyhli takýmto ťažkostiam, môžete použiť nasledujúcu kontrolu:

// Skontrolujte, či príspevok patrí do kategórie "Ovocie" alebo do nejakej kategórie vnorenej v tejto kategórii. if (in_category(11) || post_is_in_descendant_category(11)) ( // Všetky "ovocie" tu)

Tiež menej žiaduce, ale možnosťou je špecifikovať mená:

Post_is_in_descendant_category(get_term_by("meno", "ovocie", "kategória"))

A tu je samotná funkcia post_is_in_descendant_category():

Funkcia post_is_in_descendant_category($cats, $_post = null)( foreach ((pole) $cats ako $cat) ( // get_term_children() akceptuje iba celé číslo ID $descendants = get_term_children((int) $cat, "category"); ak ($descendants && in_category($descendants, $_post)) return true; ) return false; )

#4 Stromová kontrola príslušnosti k pojmu

Skontrolujeme, či je príspevok zahrnutý do výrazu ľubovoľnej taxonómie (skontrolujeme aj podradené výrazy k zadanému):

If(has_term(11, "taxonómia", $post->ID) || post_is_in_descendant_term(11, "taxonómia", $post->ID))( // Aktuálny záznam v termíne 11 alebo jeho podradenom výraze )

post_is_in_descendant_term() funkcia:

Funkcia post_is_in_descendant_term($term_ids, $taxonomy = "kategória", $post = null)( foreach((array) $term_ids as $term_id)( $descendants = get_term_children((int) $term_id, $taxonomy); if ($descendants && has_term($descendants, $taxonomy , $post)) return true; ) return false; )

Článok popisuje funkcionalitu, ktorá je dostupná v PHP (relevantná pre 5.3.x) na spracovanie všetkých typov chýb, vrátane chýb interpretácie kódu (E_ERROR, E_PARSE, E_WARNING atď.). Toto spracovanie vám pomôže spravovať zobrazenie stránky v prípade takýchto problémov. Článok obsahuje množstvo popisov a pracovných príkladov (architektúra), aby ste ho mohli okamžite použiť vo svojom softvérovom produkte. Nakoniec, dobre, trochu rozbili stránku, dobre, o tomto je potrebné informovať vyhľadávač nadpisom 4xx alebo 5xx a pobaviť používateľa, namiesto toho, aby vrátil bielu obrazovku (v horšom prípade obrazovku s posvätnými informáciami , pre hackerov) s odpoveďou 200 Ok.

Nápad napísať túto tému vznikol, keď som odvážne položil 2 otázky:

  • Otázka týkajúca sa zachytávania upozornení a odosielania chýb na určené miesto v šablóne
  • Otázka týkajúca sa zachytenia kritických chýb, ktoré spôsobia zastavenie vykonávania skriptu
Podľa mojej karmy a pridávania do obľúbených som si uvedomil, že sa ukázali byť zaujímavé pre komunitu PHP habra. Z tohto dôvodu som sa rozhodol vydať riešenia týchto problémov vo forme článku, aby bolo pre ľudí a vyhľadávače jednoduchšie a komplexnejšie nájsť potrebné informácie.

Ak máte záujem, detaily sú pod strihom ...

Dôvody použitia

Používateľ / vyhľadávací nástroj musí jasne odpovedať, že na serveri sú problémy. Bez použitia určitého Feng Shui je to dosť ťažké dosiahnuť a niekedy aj nemožné. Tu som to všetko osvetlil, nechávam si poznámku pre seba, pretože pred týždňom som nevedel, čo mám robiť, a pravdepodobne to odradí aj mnohých začiatočníkov.

Popisy funkcií

Táto funkcia je dostupná v PHP na spracovanie chýb a kontrolu výstupu. Tu je popis ich dobrôt a nedostatkov. Nebudem poskytovať dokumentáciu, len odkážem na jej stránky a popíšem svoj názor. Všetko, čo bude uvedené, je len malý zlomok, odkazy na príslušné časti dokumentácie uvediem na konci článku. Tak sa stretneme:

- Kontrola nekritických chýb: poznámky, varovania, chyby používateľov. Vo všeobecnosti všetko, čo nenormálne nekončí výklad.
set_error_handler - Nastaví užívateľom definovaný obslužný program chýb.
Je potrebný na zapísanie všetkých takýchto chýb do denníka. Ak to nie je nastavené, tak sa to do logu nezapisuje, ale vždy chcem vedieť, pod akými bojovými situáciami sa dajú volať komentáre a varovania. To znamená, že umožňuje používateľovi automaticky otestovať produkt a ani si to nevšimne.
Ak funkcia nie je nastavená, PHP sa pokúša iba zobraziť údaje na obrazovke a ak to nie je dané, potom z týchto typov chýb nie sú žiadne známky života.

- Kontrola, výnimky: je chyba typu E_ERROR.
set_exception_handler - Nastaví vlastnú obsluhu výnimky
No neviem, prečo to vôbec bolo vynájdené, keď je tam to, čo je popísané nižšie a práve sa rieši chyba typu Exception. Takže hlásim, že jednoducho existuje. Zachytí kritickú chybu „výnimky“ a umožní vám s tým niečo urobiť. Tak či onak, scenár končí. Mne osobne jej práca štandardne stačí (zapisuje do logov, snaží sa zobraziť). Vôbec by som to nepredefinoval, inak by som musel písať do logov o výnimke, ktorá sa stala.

- Funkcie ovládania výstupu: Tu popíšem 3 funkcie, ktoré by ste mali poznať z rôznych dôvodov. Napríklad pre problémy s výkonom alebo s výstupom hlavičky. V našom prípade musíme zobraziť chybové hlavičky.

Podmienky
Existuje súbor s kódom, ktorý beží ako prvý alebo pred kódom, v ktorom sa môže vyskytnúť chyba a tento súbor a všetky súbory pred ním sú 100% odladené s nemožnosťou chyby. Tu je podmienka, ktorá by bola jednoduchšia - bez chýb, kým neprejdú všetky registrácie vyššie uvedených funkcií. Tento súbor popisuje tieto metódy kontroly chýb v komplexe. Vyrovnávacia pamäť je riadená, ak sa vyskytne chyba, potom vynulujte vyrovnávaciu pamäť a zobrazí sa chyba.
Kód s komentármi
Sám dodám, že som kód netestoval, keďže toto je zjednodušený diagram toho, čo mám v kóde, komentáre sú akceptované
Štátna Ermitáž v súčasnosti zaberá sedem budov: Zimný palác, Veľká Ermitáž (alebo Stará Ermitáž), Malá Ermitáž, Nová Ermitáž, Divadlo Ermitáž, Menšikovov palác a bývalá budova generálneho štábu. Posledné dva architektonické súbory sa stali súčasťou Štátnej Ermitáže pomerne nedávno.

Ermitáž je jedno z najväčších a najznámejších múzeí umenia na svete. Každý turista, ktorý navštívil Petrohrad, začína svoje spoznávanie mesta prechádzkou po nábreží pozdĺž piatich budov Ermitáže. Každý obyvateľ Petrohradu si je jednoducho istý, že ak ste nenavštívili Ermitáž, tak ste neboli nasiaknutý duchom Petrohradu. V súčasnosti je Ermitáž aj kultúrno-vzdelávacou inštitúciou. Tu prednášajú učitelia z rôznych univerzít na rôzne témy. Súčasťou školského programu študentov z Petrohradu je návšteva Ermitáže. Ermitáž úzko spolupracuje so školou a centrom mládeže.

Hlavnou budovou Ermitáže je Zimný palác. Palác postavili v polovici 18. storočia na príkaz Alžbety Petrovny. Na jeho mieste stál ďalší Zimný palác, ktorý sa cisárovnej zdal nedostatočne veľkolepý a priestranný na kráľovské byty. Novostavbu, hodnú prívlastku cisársky palác, postavili pod vedením architekta Bartolomea Francesca Rastrelliho, no bývať v nej nestihli ani Alžbeta, ani Peter III., ktorý po nej nastúpil na trón. Po korunovácii v Moskve Catherine II slávnostne vstúpila do dokončeného Zimného paláca, ktorý sa neskôr stal symbolom Ermitáže. Jej nové bydlisko sa jej však nepáčilo: najprv tu prikázala niečo prestavať a potom sa rozhodla postaviť vedľa Zimného paláca ďalšiu budovu, ktorá neskôr dostala názov Malá Ermitáž. Na jeho projekte pracovali architekti Yuri Matveyevich Felten a Wallen-Delamot Jean-Baptiste Michel. Keď bola dokončená budova Malej Ermitáže, Catherine tam začala tráviť značnú časť svojho času.

Malá Ermitáž sa stala pre Katarínu II miestom, kde mohla umiestniť svoju zbierku obrazov, ktorá tvorila základ budúceho múzea. Zbierka sa neustále dopĺňala o nové obrazy, sochy, predmety z okrasných kameňov a iné umelecké predmety. A na ich umiestnenie nakoniec v Malej Ermitáži nezostalo voľné miesto. V rokoch 1771-1787 k nemu pribudla ďalšia budova - Veľká Ermitáž, ktorá bola špeciálne určená na uskladnenie obrazov a sôch. Veľká Ermitáž, postavená pod vedením architekta Yu.M.Feltena, sa líšila od Zimného paláca a Malej Ermitáže veľmi prísnym vonkajším vzhľadom bez akýchkoľvek dekorácií.

Účasť na divadelných predstaveniach sa stala módou. Približne v rovnakých rokoch ako Veľká Ermitáž bolo na Palácovom námestí postavené divadlo Ermitáž, ktoré navrhol Giacomo Quarenghi. Cisárovná Katarína II. pozvala na predstavenia toľko hostí, že Malá Ermitáž nemohla pojať všetkých hostí. Nová Ermitáž sa stala nevyhnutnou, keď sa minul priestor v Malej a Veľkej Ermitáži. Vývojom projektu Nová Ermitáž bol poverený nemecký architekt Leo von Klenze a realizovali ho ruskí architekti Vasilij Petrovič Stasov a Nikolaj Efimovič Efimov. Úžasne krásne divadlo Ermitáž je v súčasnosti miestom konania masových podujatí na úrovni mesta.
(zobrazenia priečinka: 78464)

Nájdené: 188 fotiek 16 strán. Zobrazené: 13 až 24.



Ermitáž
Zhliadnuté: 2939. Komentáre: 0


Ermitáž
Zhliadnuté: 2659. Komentáre: 0


Ermitáž
Sledované: 2027. Komentáre: 0


Ermitáž
Zhliadnuté: 2227. Komentáre: 0


Ermitáž
Zhliadnuté: 2542. Komentáre: 0


Ermitáž
Zhliadnuté: 2531. Komentáre: 0


Ermitáž
Pozreté: 3068. Komentáre: 0


Ermitáž
Zhliadnuté: 2737. Komentáre: 0


Ermitáž
Zhliadnuté: 2945. Komentáre: 0

Dobre, v mojej hlave je to trochu komplikované a dúfam, že to dokážem vysvetliť. Ak niečo nie je jasné, napíšte komentár, aby som mohol objasniť otázku.

Chcem spracovať nahrávanie používateľských súborov na 3. server.

Takže máme

  • Používateľ
  • webová stránka (server, ktorý prevádzkuje webovú stránku)
  • úložný server (ktorý prijíma súbor)

Prietok by mal byť takýto:

    Stránka požaduje adresu URL nahrávania z cloudovej brány úložiska, ktorá smeruje priamo na cieľový server úložiska (niečo ako http://serverXY.mystorage.com/upload.php>). Spolu so žiadosťou sa odošle aj „cieľová cesta“ (jedinečná webová stránka a globálne jedinečná) a adresa URL presmerovania.

    Webová lokalita vytvorí formulár na odovzdanie s cieľovým serverom na odovzdanie úložných serverov, používateľ vyberie súbor a klikne na tlačidlo Odoslať. Úložný server spracuje požiadavku e-mailu, uloží súbor na dočasné miesto (tj "/tmp-directory/".sha1(cieľová-cesta-zhora)) a presmeruje späť na adresu URL presmerovania špecifikovanú webovou stránkou. Prejde sa aj „cieľová cesta“.

    Nechcem, aby zostali nejaké „duchovské súbory“, ak používateľ zruší proces alebo sa preruší pripojenie alebo niečo podobné! Mali by ste sa tiež vyhnúť záznamom v databáze webových stránok, ktoré neboli správne spracované v cloude úložiska a potom boli poškodené. to je dôvod a ďalší krok

    toto sú kritické kroky

    • Teraz web zapíše záznam do svojej vlastnej databázy a vydá pokojnú požiadavku na úložisko API (podpis, web sa musí overiť tajným tokenom), ktorý
    • skopíruje súbor z jeho dočasného umiestnenia na úložnom serveri do jeho konečného umiestnenia (toto by malo byť rýchle, pretože je to jediné premenovanie)
    • rovnaký zvyšok dotazu tiež vloží riadok databázy do databázy úložných sietí spolu s ID webovej lokality ako vlastníka
  • Všetky súbory v adresári tmp na úložnom serveri, ktoré sú staršie ako 24 hodín, sa automaticky vymažú.

Ak používateľ zatvorí okno prehliadača alebo sa preruší pripojenie, preruší sa aj tok programu na serveri, však? Vykonajú sa iba deštruktory a registrované funkcie vypnutia, však?

Existuje nejaký spôsob, ako môžem urobiť túto časť kódu „kritickou“, aby server, ak niekedy narazí na túto časť kódu, ju vykonal až do konca, bez ohľadu na to, či používateľ zruší načítanie stránky alebo nie?

(Samozrejme, viem, že zlyhanie servera alebo chyba sa môže kedykoľvek prerušiť, ale moje obavy sa týkajú bežného vlákna)

Jedným zo mňa bolo mať v databáze lokality príznak a časovú pečiatku, ktorá označí súbor ako „dokončený“ a vyhľadať v cronjobe staré nedokončené súbory a odstrániť ich z cloudu úložiska a potom z databázy lokality, ale naozaj by som chcel radi by ste sa vyhli tomuto dodatočnému poli a postupu.

Chcem, aby obchod s API bol veľmi všeobecný a používal ho v mnohých ďalších budúcich projektoch.

Pozrel som si úložisko Google pre vývojárov a amazon s3.

Majú rovnaký problém a ešte horší. V amazone S3 môžete "podpísať" svoju žiadosť o príspevok. Súbor teda nahrá používateľ pod vašou právomocou a priamo sa uloží a uloží a musíte zaň zaplatiť. Ak spojenie vypadne a používateľ sa na vašu stránku už nikdy nevráti, ani o tom neviete. Mali by ste si teda uložiť všetky adresy URL na stiahnutie, ktoré podpíšete, skontrolovať ich v cronjob a odstrániť všetko, čo „nezasiahlo cieľ“.

Vážení kolegovia programátori, môj projekt už dávno presahuje túžbu jednoducho porozumieť technológiám programovania webu a implementácii v praxi. V tomto smere som čoraz viac začal uvažovať o rozvoji projektu globálnejšie.

Premýšľal som už asi mesiac a nakoniec som dospel k záveru: musíme projekt posunúť ďalej, než sú príspevky na blogu, a dať mu nejaký názov.

Problémy boli s výberom názvu, pretože všetky krásne domény sú už dávno obsadené alebo skúpené predajcami. Na základe výsledkov niekoľkodňového pomenovávania som pre svoj projekt našiel hodné meno!

Zoznámte sa: MOGUTA.CMS

Doménu moguta.ru som už zaregistroval a čoskoro tam budú zverejnené všetky novinky o projekte.

Okrem toho je od dnešného dňa k dispozícii skupina VKontakte: MOGUTA.CMS

Ale to nie je všetko!

Pozývam vás na spoluprácu

Každý, kto má záujem o vývoj projektu MOGUTA.CMS Navrhujem vstúpiť do radov vývojárov.

Aké sú výhody vstupu do tímu:

  1. Skutočná výmena skúseností;
  2. Schopnosť vytvárať;
  3. Výsledkom je: hotový, rýchly a moderný CMS na vývoj internetového obchodu;
  4. rešpekt verejnosti.

Okrem toho chcem v budúcnosti zaregistrovať právnickú osobu a zabezpečiť pracovné miesta pre celý tím, resp. s požadovanou mzdou. Samozrejme, nebude to tak skoro a nie sú žiadne záruky, že to tak bude, všetko závisí od aktivity reakcií na moje pozvanie.

Preto, ak ste školák, študent, alebo len šikovný chlap – nepremeškajte príležitosť, pridajte sa do radov vývojárov a náš tím časom zaujme svoje čestné miesto na trhu CMS. (Dosť optimistické! :))

Vráťme sa k lekcii...