Bitan! Pravljenje promjena u WooCommerce datotekama šablona. Vodič za prilagođene vrste objava: Kreiranje, izvođenje i prilagođena polja Kreiranje prilagođenih polja za prilagođene vrste objava

Uključićemo i funkciju uređivača postova Prilagođena polja (prilagođena ili prilagođena polja) za svaki tip i prikažite polja u novim predlošcima.

U WordPress-u, prilagođeni tipovi objava vam daju potpunu kontrolu nad načinom prikazivanja sadržaja svojim korisnicima. Ako kreirate postove na svom blogu, možete kreirati prilagođene stilove samo za te postove. Ako pišete recenzije o muzici ili filmovima, možete dodati dodatne oblasti za unos u postove koje želite i oni se neće pojavljivati ​​u drugim objavama na blogu.

Ali prije nego što nastavimo, hajde da shvatimo šta su postovi korisnika.

Šta su WordPress prilagođeni tipovi postova?

Ukratko, WordPress prilagođeni tipovi postova vam omogućavaju da sortirate postove na osnovu njihovog sadržaja. U WordPress-u, zadane vrste objava su Objava, Stranica, Mediji itd.

Obično pišete sve svoje objave u odeljku Postovi na konzoli administratora, a zatim im dodijelite kategoriju. Svi unosi različitih tipova nalaze se na jednoj listi, što otežava njihovo razlikovanje po tipu sadržaja.

Prilagođeni tipovi postova sa sopstvenim vezama u administratorskoj konzoli vode vas do liste postova tog tipa. Objavama kreiranim na ovaj način se mogu dodijeliti kategorije, poput običnog posta, tako da imate apsolutnu slobodu sortiranja i predstavljanja postova na bilo koji način.

U gornjem primjeru, ako korisnik ode u odjeljak baze podataka o filmovima na vašoj web-lokaciji, postovi s recenzijama neće biti uključeni. Ako, na primjer, napravite kategorije 'Akcija' i 'Romantika', vaši korisnici će moći otići u kategoriju Akcionih filmova i vidjeti sve recenzije i filmove u kategoriji.

Kada kreirate novu vrstu objave, imate mnoga podešavanja, kao što su: gde će se link nalaziti u administratorskom meniju, da li će ovaj tip biti uključen u rezultate pretrage, da li će podržavati prikazivanje fragmenta teksta, da li su komentari dozvoljeno i tako dalje.

Možete promijeniti različite tekstove naslova (definirane pomoću niza $labels), kao što je preimenovanje Dodaj novu objavu V Dodaj novi film. Na primjer, možete preimenovati tekst Featured Image V Dodaj poster.

Također možete omogućiti funkciju prilagođenih polja u svom uređivaču postova, koja je skrivena prema zadanim postavkama i mora biti omogućena putem veze Opcije ekrana na vrhu uređivača.

Nastavljajući primjer s filmovima i recenzijama filmova, filmske publikacije mogu dodati prilagođena/prilagođena polja za parametre kao što su godina izdanja, režiser, ocjene i mnoge druge sa kratkim pregledom filma kao sadržajem objave.

Obično je svako polje koje kreirate dostupno u bilo kojoj vrsti objave, tako da dodatak zahtijeva ograničenja za svako polje gdje mu se može pristupiti.

Kreiranje novih vrsta postova

Kada napravite značajne promjene u WordPressu, jedna od dostupnih opcija implementacije je kreiranje dodatka. Također možete kreirati nove prilagođene vrste postova u datoteci functions.php. Za ovaj vodič mi Kreirajmo dodatak i nastavimo koristiti primjer s bazom podataka filmova/recenzija.

Da biste kreirali prilagođeni tip objave, morate napisati nekoliko funkcija koje pozivaju WordPress funkciju register_post_type() sa dva parametra. Vaša funkcija mora biti vezan za akcijsku kuku u tome, inače prilagođeni tip objave neće biti ispravno registriran.

// Prilagođena funkcija MORA biti povezana na zakačicu init akcije add_action("init", "lc_register_movie_post_type"); // Prilagođena funkcija koja poziva funkciju register_post_type lc_register_movie_post_type() ( // Postavlja različite dijelove teksta, $labels se koristi unutar $args niza $labels = array("name" => _x("Movies", "općeni tip objave) name"), "singular_name" => _x("Film", "vrsta objave singular name"), ...); // Postavite različite informacije o vrsti objave $args = array("labels" => $ labels, "description" => "Moja prilagođena vrsta objave", "public" => istina, ...); // Registrirajte tip objave filma sa svim informacijama sadržanim u nizu $arguments register_post_type("movie", $ args);)

Sve prilagođene funkcije moraju imati prefiks kako bi se izbjegli sukobi s drugim dodacima ili funkcijama teme. Ovdje će se koristiti prefiks LC.

Dva parametra za funkciju register_post_type() Ovo:

  1. Naziv tipa zapisa, maksimalno 20 znakova i ne smije sadržavati razmake ili velika slova
  2. Asocijativni niz tzv $args, koji sadrži informacije o tipu zapisa u obliku parova ključ/vrijednost 'ključ' => 'vrijednost'

Niz $args

Najčešće korišteni ključevi za niz $args prikazano ispod, sve su opcione:

  • etikete– niz niz, koji specificira različite dijelove teksta, na primjer "Dodaj novi unos" može se preimenovati u "Dodaj novi film". Ključevi za niz oznaka su opisani u nastavku sa objašnjenjima;
  • opis– kratak i sažet opis tipa zapisa, može se prikazati u predlošcima tipa, ali se ne koristi nigdje drugdje;
  • javnosti– da li je tip objave vidljiv autoru i posetiocima, podrazumevana vrednost je FALSE, što znači da se ne pojavljuje čak ni u Admin konzoli;
  • exclude_from_search– da li će se zapisi ovog tipa pojavljivati ​​u redovnim rezultatima pretrage, podrazumevana vrednost je suprotna od public;
  • publicly_queryable– može li se ova vrsta objave preuzeti korištenjem URL-a, kao što je http://www.mywebsite.com/?post_type=movie, ili u naprednoj upotrebi putem funkcije query_posts(). Zadana vrijednost je javna;
  • show_ui– da li su linkovi menija i uređivač poruka povezani na administratorskoj kontrolnoj tabli. Zadana vrijednost je javna;
  • show_in_nav_menus– da li će se unosi ovog tipa dodati u navigacijske menije kreirane na stranici Izgled -> Izbornici, zadana vrijednost je javna;
  • show_in_menu– da li je veza tipa objave prikazana u navigaciji administratorske konzole. FALSE – sakriva vezu. TRUE – dodaje vezu kao novu vezu najvišeg nivoa. Unos linije vam omogućava da postavite vezu unutar postojeće veze najvišeg nivoa, odnosno unesete parametre options-general.php stavlja pod vezu Postavke.
  • show_in_admin_bar– hoće li se ova vrsta objave pojaviti iznad Admin trake, ispod linka + Novo
  • menu_position– pozicija novog linka u navigacijskom meniju admin konzole, 5 se nalazi ispod Objave, 100 se nalazi ispod Postavke, cijela lista pozicija se nalazi u WordPress Codex-u
  • hijerarhijski– da li se zapis može dodijeliti nadređenom zapisu, ako je vrijednost TRUE, tada je niz $supports mora sadržavati parametar 'page-attributes'
  • podržava– selektivno omogućava funkcije objava kao što su: slike, fragmenti teksta, prilagođena polja, itd. Ako je postavljeno na FALSE, tada se umjesto niza isključuje uređivač za ovu vrstu objave - korisno ako želite zatvoriti sve objave ovog ukucajte iz uređivanja, ali ih ostavite vidljivima ( lista vrijednosti niza nee)
  • taksonomije– niz taksonomija koje se mogu primijeniti na publikacije ovog tipa, taksonomije moraju već biti registrirane - one se ne kreiraju odavde!
  • has_archive– hoće li postovi ovog tipa imati arhivske stranice, URL ima strukturu permalinka, a deskriptivni dio URL-a je parametar 1 funkcije register_post_types(), odnosno prikazat će se http://www.mywebsite.com/movie_reviews/ sve objave movie_review.
  • query_var– TRUE ili FALSE određuje da li se objava može prikazati upitom URL-a za vrstu objave i naziv objave, tj. „http://www.mywebsite.com/? film=the-matrix‘. Ako unesete red teksta, potrebno je da tekst postavite iza znaka ?, tako da će 'film' na kraju izgledati kao '? film=the-matrix‘.

Nizovi oznaka

Prvi ključ u nizu $args pozvao etikete i mora biti niz. Određuje različite dijelove teksta koji se odnose na vrstu objave. Budući da ovdje može biti puno podataka, najbolje je kreirati niz tzv $labels za njihovo skladištenje. Kod iznad je malo jasnije šta ovo znači.

Ispod su neki važni ključevi za niz oznaka, svi su opcioni:

  • ime– opći nazivi za tip poruke, na primjer, filmovi (filmovi)
  • singular_name– naziv za jedan unos ove vrste, na primjer, film (film)
  • dodaj novi– zamjena teksta 'Dodaj novo' navedenim tekstom, na primjer, 'Dodaj film'
  • add_new_item– zamjena za 'Dodaj novu objavu', na primjer, sa 'Dodaj novi film'
  • edit_item– zamjena za 'Uredi objavu', na primjer, sa 'Uredi film'
  • Featured_image– zamjena za 'Istaknuta slika' u uređivaču objava, na primjer, sa 'Poster filma'
  • set_featured_image– zamjenjujući "Postavi istaknutu sliku", na primjer, ovom opcijom "Dodaj filmski poster"
  • menu_name– promenite tekst veze na najvišem nivou, podrazumevani tekst veze je naziv ključa

Niz podržava

// Omogući posebne funkcije u uređivaču objava za moj tip objave $supports = array ("title", "editor", "author", "thumbnail"); // Onemogući SVE funkcije uređivača postova za moj tip objave $supports = FALSE;

Jedan od ključeva u nizu $args pozvao podržava. Ovo je jednostavan niz u koji snimate listu funkcija uređivača objava koje želite da omogućite za svoj tip objave. Standardno su omogućeni samo naslov i uređivač.

Također možete postaviti FALSE umjesto niza da onemogućite sve funkcije uređivača, isključujući i naslov i područje za dodavanje sadržaja. To znači da se unos ne može uređivati, ali je i dalje u potpunosti vidljiv.

Evo liste funkcija koje možete uključiti u niz $supports:

  • titula (ime)
  • urednik
  • autor – NAPOMENA: ovo vam omogućava da promijenite autora objave
  • sličica (ikona)
  • izvod (fragment teksta)
  • trackbacks
  • prilagođena polja (prilagođeno polje)
  • komentari
  • revizije (verzije)
  • atributi stranice
  • post-formati (post formati)

Kreiranje prilagođenog tipa WordPress posta putem dodatka

Sada kada znamo koji su parametri potrebni funkciji, možemo kreirati vlastiti dodatak, napisati vlastitu funkciju i priložiti je događaju u tome.

lc_custom_post_movie() na zakačicu init akcije add_action("init", "lc_custom_post_movie"); // Prilagođena funkcija za registraciju funkcije tipa objave filma lc_custom_post_movie() ( // Postavite oznake, ova varijabla se koristi u nizu $args $labels = array("name" => __("Movies"), "singular_name " => __("Film"), "add_new" => __("Dodaj novi film"), "add_new_item" => __("Dodaj novi film"), "edit_item" => __("Uredi film") , "new_item" => __("Novi film"), "all_items" => __("Svi filmovi"), "view_item" => __("Pogledaj film"), "search_items" => __("Traži filmove "), "featured_image" => "Poster", "set_featured_image" => "Dodaj poster"); // Argumenti za naš tip objave, koji se unose kao parametar 2 register_post_type() $args = array("labels" => $labels, "description" => "Sadrži naše filmove i specifične podatke za film", "public" => true, "menu_position" => 5, "supports" => array("title", "editor", " sličica", "izvod", "komentari", "prilagođena polja"), "has_archive" => istina, "show_in_admin_bar" => istina, "show_in_nav_menus" => istina, "has_archive" => istina, "query_var" = > "film"); // Pozovite stvarnu WordPress funkciju // Parametar 1 je naziv za tip objave // ​​Parametar 2 je niz $args register_post_type("movie", $args); ) // Hook lc_custom_post_movie_reviews() na zakačicu init akcije add_action("init", "lc_custom_post_movie_reviews"); // Prilagođena funkcija za registraciju tipa objave recenzije filma lc_custom_post_movie_reviews() ( // Postavite oznake, ova varijabla se koristi u nizu $args $labels = array("name" => __("Filmske recenzije"), "singular_name" => __("Recenzija filma"), "add_new" => __("Dodaj novu recenziju filma"), "add_new_item" => __("Dodaj novu recenziju filma"), "edit_item" => __( "Uredi filmsku recenziju"), "new_item" => __("Nova recenzija filma"), "all_items" => __("Sve recenzije filmova"), "view_item" => __("Prikaži recenzije filmova"), " search_items" => __("Pretraži filmske recenzije")); // Argumenti za naš tip objave, koji se unose kao parametar 2 register_post_type() $args = array("labels" => $labels, "description" = > "Zadržava naše recenzije filmova", "public" => istina, "menu_position" => 6, "supports" => array("title", "editor", "thumbnail", "excerpt", "comments", " custom-fields"), "has_archive" => true, "show_in_admin_bar" => true, "show_in_nav_menus" => true, "has_archive" => true); // Pozovite stvarnu WordPress funkciju // Parametar 1 je naziv za tip posta // $args niz ide u parametar 2. register_post_type("review", $args); )

Ako omogućite ovaj dodatak, vidjet ćete novu vezu u navigacijskoj traci na konzoli administratora, odmah nakon veze Objave.

Kada lebdite mišem, biće prikazane stavke menija 'Prikaži sve' i 'Dodaj novo', tekst će odgovarati onom koji je naveden u nizu $labels. Pogledajte u uređivaču gdje su se veze promijenile.

Ograničite prilagođena polja za date zapise

Kada dodate svoja polja u zapis, polja se čuvaju i možete brzo dodati bilo koja u novi zapis. Prilagođena polja koja ste dodali pojavit će se na padajućoj listi svakog unosa. To može otežati pronalaženje polja koje tražite u određenim vrstama postova. Ako želite ograničiti prilagođena polja tako da budu dostupna samo za određene vrste postova, onda je najlakši način preko dodatka.

get_post_meta()

  • uzima 3 parametra i vraća rezultat
  • prvi parametar je ID posta, možete ga koristiti ovdje $post->ID da dobijete ID trenutno prikazanog unosa
  • drugi parametar – naziv polja prilagođenog zapisa, osjetljiv na velika i mala slova
  • treći parametar je tipa boolean, tzv $single i može biti TRUE (vraća rezultat kao string) ili FALSE (vraća niz).

BILJEŠKA: Možete kreirati više prilagođenih polja sa istim imenom i različitim vrijednostima. Ako postoji više polja sa istim imenom, postavljanjem FALSE će se vratiti njihov niz.

ID, "Box Art", TRUE); if (!empty($movie_box_art)) ( ?>
" alt=" !}">

Od funkcije get_post_meta() vraća vrijednost, možete koristiti vrijednost u uvjetnom izrazu da u skladu s tim promijenite izgled.

U gornjem primjeru provjeravamo da li film sadrži okvir koji mu je dodijeljen kao prilagođeno polje. Ako $movie_box_art nije prazno, prikaži div i sliku.

Prikaz naprednih prilagođenih polja

// Prikaz vrijednosti polja the_field("IME POLJA"); // Povratna vrijednost polja get_field("IME POLJA");

Dodatak Advanced Custom Fields nudi vlastite funkcije i kratke kodove za prikaz polja.

the_field('IME POLJA');

Prikazuje vrijednost određenog polja, morate koristiti ime polja koje ste naveli prilikom kreiranja grupe polja.

get_field('IME POLJA');

Vraća vrijednost navedenog polja, korisnog za uvjetne izraze.

Ovo su funkcije koje će vam najvjerovatnije trebati. Postoji mnogo dodatnih funkcija i možete ih pronaći u .

Shortcodes

Možete prikazati polja direktno na objavi koristeći gornji kod.

Prikažite prilagođeni tip objave na glavnoj stranici

// Zakači našu prilagođenu funkciju na pre_get_posts akciju zakačicu add_action("pre_get_posts", "add_reviews_to_frontpage"); // Promijenite glavnu funkciju upita add_reviews_to_frontpage($query) ( if (is_home() && $query->is_main_query()) ( $query->set("post_type", array("post", "movie", "review ")); ) vrati $query; )

Prilagođeni tipovi postova se ne pojavljuju na glavnoj stranici prema zadanim postavkama, tako da morate kreirati novu funkciju koja poziva metodu set objekta WP_Upit WordPress.

Funkcija provjerava da li je posjetitelj na početnoj stranici i da li je aktivni zahtjev primarni zahtjev koji generira WordPress.

$query->set() uzima dva parametra:

  • prvi parametar je prioritet koji želite promijeniti, u našem slučaju mijenjamo prioritet post_type
  • drugi parametar je niz koji želite proslijediti kao vrijednost atributa post_type

U gornjem primjeru koda, niz počinje sa 'post' - to je razlog zašto je svaki WordPress post tipa 'post' i još uvijek želimo da ga uključimo na glavnu stranicu.

Ako želite koristiti samo prilagođene postove određene vrste na svojoj početnoj stranici, možete ukloniti 'objave' i koristiti vlastitu vrstu objave.

Vrijednost koju unesete mora odgovarati parametru 1 funkcije register_post_type().

Zaključak

U ovom vodiču pokazujemo kako kreirati prilagođene tipove i koje podatke trebate imati za to. Fleksibilnost prilagođenih tipova objava pruža vrijednu funkcionalnost za bilo koju WordPress stranicu.

Dobijte vrijedne povratne informacije od svojih kupaca dajući im slobodu da slobodno podijele svoje utiske. Neka ocjenjuju vaše proizvode i/ili usluge direktno na vašoj web stranici. U nastavku pogledajte ključne karakteristike koje su standardne uz naš sistem pregleda na mreži.

    Recenzije i ocjene

    Ugradite PHP skriptu za pregled u svoju web stranicu i omogućite klijentima da podijele svoje iskustvo sa proizvodima i uslugama koje nudite. Mogu ocjenjivati ​​prema kriterijima i dati pozitivne i negativne povratne informacije.

    Više jezika

    PHP sistem pregleda može govoriti ne samo engleski, već i bilo koji jezik koji vam može zatrebati. Možete prevesti sve naslove i sistemske poruke sa administratorske stranice koristeći jedinstvene ID-ove za svaki dio teksta.

    Kriteriji ocjenjivanja koji se mogu uređivati

    U zavisnosti od vrste poslovanja, administratori sistema mogu da pregledaju
    postavite različite kriterije ocjenjivanja koji će biti prikazani u front-end obrascu.
    Svaki od ovih kriterija je ocijenjen sa 1 do 5 zvjezdica.

    Obavještenja putem e-pošte i SMS-a

    Podesite sistem pregleda na mreži za slanje upozorenja putem e-pošte i SMS-a kada se objavi nova recenzija. Možete jednostavno odrediti koji korisnici će primati ove poruke iz izbornika Korisnici.

    Više tipova korisnika

    Kreirajte neograničene vrste klijenata ovisno o industriji i korištenim uslugama. Ocjene hotela mogu ići sa sljedećim tipovima korisnika: porodica sa djecom, par, poslovno putovanje itd. Pojavljuju se kao oznake u recenzijama.

    Responsive & Attractive

    Skripta za pregled i ocjenjivanje radi na svim uređajima, neprimjetno se prilagođavajući različitim veličinama ekrana. U skladu sa brendiranjem vaše web stranice, među 10 opcija boja možete odabrati najbolju odgovarajuću temu front-enda.

    Okvir za brze savjete pored obrasca za recenziju omogućava vam da dodate nekoliko duhovitih riječi i privučete kupce. Sistem pregleda filtrira recenzije prema tipu korisnika. Kupci mogu ocijeniti i ocjene drugih klijenata.

    Uz licencu za programere dobijate izvorni kod i možete napraviti bilo kakve prilagođene promjene u PHP skripti za pregled. Takođe možemo modifikovati sistem pregleda kupaca na zahtev.

Odgovori

Na osnovu https://toster.ru/q/276441 Jasno je da mnogo toga zavisi od projekta, pa ovaj post treba prilagoditi vašem slučaju.

* Sigurnost:
- Svaki argument metode jednostavnog tipa mora se provjeriti za tip u slučaju proxyja i za granične vrijednosti u slučaju obrade. Ako nešto krene naopako, izbacuje se izuzetak. Ako se metoda s nekoliko argumenata sastoji od 80% provjere argumenata, to je sasvim normalno))
- Nema trigger_error, samo izuzeci.
- Izuzeci MORAJU biti ljudski razumljivi, korisniku se mogu dati sve vrste "Nešto je pošlo po zlu", ali dnevnik treba da sadrži izuzetak sa praćenjem steka i čovjeku razumljivim opisom onoga što je tu pošlo po zlu.
- Svaki argument (objekat) metode mora biti naznačen tipom za svoju klasu ili interfejs.
- Eval se po pravilu oštro zamera
- @ je dozvoljen samo u očajnim situacijama, na primjer provjera json_last_error.
- Prije rada sa bazom podataka, obavezna je provjera podataka.
- Ne == i!=. Sa prekidačem - jedini izuzetak, ovisno o situaciji.
- Ako metoda vraća ne samo bool, već i nešto drugo, potrebna je stroga provjera sa ===, ili!==.
- Nema uslova sa zadacima unutra. while($row = ...) je takođe neprihvatljiv.
- Magični getteri/seteri su dozvoljeni samo u očajnim situacijama, inače su zabranjeni.
- Konkatenacije u sql-u - samo u bezizlaznim situacijama.
- Parametri u sql-u - SAMO preko čuvara mjesta.
- Nema globalnih varijabli.
- Datumi u obliku niza su dozvoljeni samo u šablonima i bazi podataka; u PHP kodu se odmah konvertuju u \DateTimeImmutable (u očajnim situacijama, \DateTime je dozvoljen)
- Naravno, zavisi od projekta, ali po pravilu treba da postoje samo dve ulazne tačke: index.php za web i konzolu (ili nešto drugo što se zove) za konzolu.

* Codestyle PSR-2 + PSR-5 barem, + gomila strožijih zahtjeva (za početak, sve što je označeno kao TREBA u PSR-u postaje MORA)
- U PhpStormu ni jedan red ne treba da bude istaknut (izuzetak su greške u kucanju, na primer, rečnik ne poznaje neke od skraćenica usvojenih u vašem projektu). U ovom slučaju, dozvoljeno je koristiti /** @noinspection *** */ za bezizlazne situacije.
- Ako neko kaže da piše u drugom uređivaču, a to nije istaknuto, ipak šalje na doradu.

* Organizacija koda:
- Nema globalnih funkcija.
- Klase bez imenskog prostora su dozvoljene samo u ekstremno očajnim situacijama.

* Testabilnost (u smislu lakoće testiranja) koda bi trebala biti visoka.
- Pokrivenost koda je potrebna za sve moguće slučajeve upotrebe svake javne metode sa mock-ovima zavisnosti.

* MVC principi:
- Nema obrade korisničkih unosa u modelima, bukvalno uopšte.
- Nema upita bazi podataka iz šablona.
- Nema layout/js/css/sql-in u kontrolerima.
- U modelima NEMA MAGIJE, samo privatne nekretnine + getteri sa seterima.
- Modelima je dozvoljeno korištenje metode spremanja (ako postoji, naravno) samo u izuzetnim situacijama. U svim ostalim - ili ubaciti ili ažurirati.

* SOLID principi:
- Nema univerzalnih objekata koji mogu sve.
- Ako je metoda za internu upotrebu privatna, nije javna.
- Statičke metode su dozvoljene samo u slučajevima beznađa.

* DRY princip je dozvoljeno kršiti u sljedećim slučajevima:
- Eksplicitno razdvajanje dužnosti
- Na testovima (svaki test treba da bude što nezavisniji)

* Rad sa bazom podataka:
- Zahtjev u ciklusu mora biti ZAISTA opravdan.
- Teška opomena za ORDER BY RAND()
- Pretraga ne po ključevima (naravno, ako tabela NIJE 5 redova) je zabranjena.
- Pretraga bez LIMIT-a (opet, ako tabela NIJE 5 redova) je zabranjena.
- SELECT * - zabranjeno.
- Denormalizacija baze podataka mora biti opravdana.
- MyISAM se ne koristi (pa)))
- U transakciji je potrebno više operacija, s vraćanjem unatrag ako nešto krene po zlu.
- Baza podataka ne treba da sadrži poslovnu logiku, već samo podatke u holističkom obliku.
- Ne bi trebalo da bude nepotrebnog trzanja baze podataka gde se to može i bez nje.

* Keš memorija se mora obrisati pod dva uslova (ne jedan od njih, već dva):
- Vreme.
- Neuspjeh po poslovnoj logici.
Dozvoljeno je samo neko vrijeme u očajnim situacijama, ali tada je vrijeme kratak period.
- Prilikom izračunavanja ključeva keša treba koristiti varijablu iz konfiguracije aplikacije (u slučaju ažuriranja, keš se resetuje kodom, a ne flešom keš servera). U slučaju korištenja mnogih servera, ovo je vrlo zgodan i fleksibilan alat za diplomatiju.

* O ljudima:
- "Navikla sam da pišem ovako i nastaviću tako" nije pitanje, proći ćete recenziju tek kada promijenite mišljenje.
- "Pišem u vim-u i tako mi je zgodno" - odlično, u njemu pišem i kod konzole)) ali postoje zahtjevi za kod, ako ih ne možete učiniti, nećete proći recenziju.
- "Kopirao sam ovu strašnu metodu i promijenio 2 reda" - ovo je naravno divno, ali prema etiketi, vi ste autor cijele ove metode, pa da ne pričamo gluposti, ok?
- "Radi!" - ova fraza se prevodi otprilike ovako: "da, razumijem da pišem potpunu glupost, ali ne mogu normalno pisati jer ne mogu", jesam li vas dobro razumio?))
- "Sve radi!" - Drago mi je zbog tebe, ali šta je sa produkcijom?
- "Tamo je sve jednostavno" - nemojte koristiti riječ "jednostavno", od riječi "apsolutno". Evo dijela koda (prvi na koji naiđete sa složenom poslovnom logikom), gdje je greška (nije bitno da li postoji ili ne)? Gledas vec 2 minute sta je problem, sve je "jednostavno"))

* Bilo šta:
ActiveRecord (ovo vam govorim kao bivši Yii fan) je potpuno sranje, uzmite ga kao original. U stvari, imate modele povezane s bazom podataka koji nekontrolirano lutaju po projektu. Više puta sam naišao da u istim šablonima zovu save ili update (trebalo bi da budete spaljeni zbog ovoga).

osnove:
1. Prisutnost kritičnih grešaka i zastarjelih funkcija.
2. Upotreba uzoraka, elegancija rješenja.
3. Čitljivost koda, prisustvo komentara, prisustvo dokova.
4. Usklađenost sa paradigmama i konvencijama (na primjer, kršenje MVC-a).

Sekundarni/nevažni:
1. Performanse koda (osim za highload)
2. Potrošnja memorije (isključujući velike podatke)
3. Efikasnost SQL upita (sa izuzetkom vrlo nezgodnih)
4. Izbjegavanje nevažnih, ali potencijalnih uskih grla u podacima (na primjer, usporavanje sistema datoteka kada postoji veliki broj slika u folderu za otpremanje)
5. Novost korišćenih tehnologija.
6. Opravdano\Neopravdano\Pretjerano bicikliranje.

  1. Kod ne sadrži očigledne ili potencijalne greške.
  2. Kod radi kako je opisano u dokumentaciji, tehničkim specifikacijama ili pratećim komentarima.
  3. Stil kodiranja slijedi prihvaćena pravila kodiranja
  4. Kod ima propratne komentare prema phpDoc-u
  5. Ugniježđenje blokova ne prelazi 4. nivo.
  6. Kôd ne generiše poruke na strogom nivou, upozorenju, obaveštenju ili zastarelom nivou. Ako se to ne može izbjeći, onda neposredno prije reda koji ovo generiše, morate prisilno onemogućiti error_reporting, a odmah nakon reda, error_reporting mora biti uključen na originalnu vrijednost (koja je bila prije). Takav kod mora biti dokumentiran na poseban način.
  7. Komentirani dio koda treba ukloniti.
  8. HTML i JavaScript umetci su zabranjeni u PHP kodu (osim za phpTemplate). Sva umetanja moraju biti napravljena pomoću posebnih šablona.
  9. Klase, funkcije, varijable i konstante moraju se imenovati logično na način koji je čitljiv za ljude na engleskom u skladu sa standardima kodiranja. Imenovanje u transliteraciji na ruskom ili drugim jezicima nije dozvoljeno
  10. Opseg varijabli i metoda klasa uvijek mora biti definiran (privatno, zaštićeno, javno).
  11. Veličina jedne metode ne smije prelaziti 40-50 redova.
  12. Varijabla koja se koristi u petlji ili u uslovnom bloku mora biti inicijalizirana unaprijed.
  13. Varijabla u svakom trenutku mora sadržavati samo jedan tip. Prazna varijabla mora sadržavati null. ($var = false; $var = "test"; nije dozvoljeno. $var = null je dozvoljeno; $var = "test";).
  14. Prilikom prosljeđivanja objekata klase metodama, mora se koristiti provjera tipa.
"Bars" "kompresor" "Piter-Plast" "Promtek", Barnaul "Radna odeća" "Ekspedicija", Kina "Crveni svetionik" (vrsta...) "Ural Gems", Jekaterinburg 444 VKF 720 Armor acmepower Active Leisure Adidas AGU Ajungilak AKU Alexika Alpina alpska oprema AMV sport AMVsport Odgovor Aquapac Artiach asolo ATEMI Atomic Autor AVL axio Axon B"TWIN Baseg Bask BBB Beal BERCUT, St. Petersburg Biemme Big Agnes Big Pack Black Diamond Boblbee BOBSTER Cam BoBSTER C BoBSTER BoBSTER Campus Canadian Camper Canon Canondale Capricorn Cascade dizajni Casio Cassida CatManDo (Kina) Cenda.Ru uredski namještaj Lanac ChainPower Chinook CITIZEN Climbing Technology Cobra Electronics Coflach Coleman Columbia Columbia River Knife and Tool (CRKT) Comazo Dacorancle Cricket Dacover Dacover Detour Detour Detour Detour Cricket Dolomite Duofold (Irska) DuPont Duracell Duraflex Dynastar ECCO EKA EKUD Endura Ericson Ericsson Eurotrail EVA-Sport Exped Exustar FavorLite Fenix ​​Ferrino (Italija) Fillon FINO 40S PANORAMA vatreni javor Fisher Fiskars Fjallra Five Five Fjallra Ten Fix Fjor Fjallra ver Freetime Prednja granica Garna Garsing Garmin Garmont Garsing Genimap Gerber (SAD) Gist Gordini GOSYSTEM GRUPEL GRIESPORT GRIVEL GRONELL GRUPPA 99 Guahoo Haglofs (Švedska) Haier Halti Hamilton Global Management Hamilton Hanwag Helly Helden Helsport Helsan High Peak High Peak (najbolji kamp) HighGear HIKO Sport Hilleberg Hobbit http://sanek99.s19.webhost1.ru/ Husky I/O Magic Icepeak ICOM JackWolfskin Jetboil, Inc. Jinyang JJ-GROUP Jofa Julbo JVC KAISER SPORT Kama Karrimor KATZ KAYLAND KED KEEN Kefas Kongur Kovea La Sportiva Lafuma Lake Leatherman Led Lenser Leki Levron Životnootporan Linton LIOD lma lmaouterwear Loop Lorpen LOTOS LOWA Lowe Lowe LoweAlpine Lowe Mango Mamm MauAlpine Tuo Lowe Markill Marmot Marpetti Masters Maxpedition McKinley Medico MEINDL Mellert Merida Merrell Midland Millet Milo Minolta montrail Mora iz Švedske Morgan Mills Motorola Mountain Hardware (MHW) MSR MTE Mund Mustek MusucBag N1 Island NANO ESTTE Neve/Commandor Norway Nike NorMar Nike Nikko NorMar Nike NorMar Nike NorMar NorthWave Norveg Novatour Novus NRS oceAnco Octopus ODLO Okula Olympus Ontario Knife USA OOO Khudobaru7 ooo "yukon" Opinel OPTIMUS ORDANA Osprey Otterbox Outdoor Project Outventure Ozon Panasonic Patagonia Peak-1 Pentax Pentax Pentax Opti PR P P P P P P P P P P P P I P P P P I P P P I P P I P P P I P P P I P I P P I P P I P I P I P I P I P I P E Primus Princeton Tec Prival prosofta Puma Qualcomm SAD QUARANTASEI QUECHUA Raftmaster Raichle Rainbow Red Fox Reed Chill Cheater Ltd Reima Retki (Finska) Robson Rock Front Rock Pillars Rockland ROGER Rollei (vrsta) Rossignol RUBIN Salewa SALMO Salomon Shi Samsung Sanmarco Satila Scarpa Seint Seint SAD SHIMANO INC. Kina. ShredReady SIDI Siemens Sievert Silva Silvretta Simex Sport Simms Simond Sivera Sixsixone 661 Smith SneVXULY SnowPeak Sol SOLBEI sonim Sony SOTO Specialized Sportful Sprayway Spyderco Stayer Sun Valley Sunroad Suunto Swan SwissoEye Talberg Thernica The Ink Talberg Tatonka Telit Telit Telit Telit Telit Telit Telit Telit Kijev Sjever m-a- Termos za odmor na vremensko probno testiranje title2 TNP Tramontina Tramp Trezeta Trezetta Trimm Travel Extrem Žitomir Ukrajina TSL Tubbs Tuckland Ultra-svetli univerzalni UNOMAT UVEX Varta Vasque Vaude Vector, Koreja Vertical Verticale Victorinox Viking Viper visu ski Voile Volkshammer Vosonic Yad Voxtel X B Yukon Zamberlan Zebra ZebraLight Zippo, SAD Aquagraphics AKME AKME-NORMAL ALVO-TITANIJUM Alpindustriya AN "GLOBAL" - nekretnine u Toljatiju Engleski proizvođač Ruska vojska AS Arts Atemi Aerogeodezija Bjelorusija Beskid Bundeswehr V. Bojcov V. Bojcov Vampirchik-San Vacha Video Video Vento-Tru Can Vacha Obuka "Golden Active" Voronezh VostokService Sve meni poznate karte od 2 km za područje Maloshuika GalaTour Njemačka Glavno odjeljenje za geodeziju i kartografiju pri Vijeću ministara SSSR Planinska zemlja Delta-7 Jet Sport Jet-Sport Discovery bilten odbor Eurogas Yeisk fabrika oktobar. Vorsma CJSC "Map" LTD CJSC "Petrokhim" St. Petersburg ZLATOUST Upoznavanje u Sibiru Ilax IP Chirko N.E., St. Petersburg Irbis Španija Italija Kazan Kemerovo Kizlyar film Kina Kina/Turska KMZ im. Zvereva Koreja Kotlovi "CITIZEN" Crveno Sunce Crveni trougao KUKRI Kulik LOMO Manaraga Mayak (Kirovski region) Megatest servis Rusko Ministarstvo odbrane Mito ("Target") Moskva Moskva Kompas Mukačevo MFK Nacionalna sportska kompanija "EFSI" Ne sjećam se nepoznatog NEOPRO Neris ( Kijev) Nova Tour JSC "ERA" Octopus LLC "Aerosol Novomoskovsk" LLC "Biogprd", Moskva LLC "Veloklub.ru" LLC "Capital - New Century" LLC "FORNEL", Rusija, Moskva LLC "Albatross", Vorsma LLC Stelz - St. Petersburg LLC Lesiteks LLC Monopoly LLC Pohudat.rf7 Otech. chem. matursko veče. šator Perm-19 PIK-99 prehrambena industrija Prime-A Proffi rep. Belorusija Rusija Rostov na Donu St. Petersburg Svarog? Synthesis BA Sintepon SINTO Sinto (putna roba) Slovenija Oprema za snowboard Lamar Alloy ALLOY, OKG Sportska prehrana iz Scotta SAD SSSR Stalker Stalker (Mikhail Chernetsky) Potok Brodogradilište Taimen Terra Techno-Avia (grad. Moskva) TM Vaša udobnost Triton rad - vacha Turion Turlan Ural-ekspedicija Fabrika 1. maja, Ufa Federalna služba za geodeziju i kartografiju Kompanija "Crossbow", izdavačka kuća "Ultra EXTENT" flesna FMK Fumakilla, Indonezija Harkov Ukrajina Heaton Hobbit HSN (Čeboksari) Čerepovec tvornica Šta - u Novgorodu, tvornica šibica Chudov Švedski nepoznati Schultz Crew - T ekspedicija ELF Mukachevo Yaroslavrezinotekhnika ostalo:

Prvo, sa stanovišta organizacije koda, bilo bi bolje staviti svu logiku pregleda u jednu ili više uključenih datoteka, a zatim je uključiti na stranice proizvoda:

Include("includes/reviews.php");

Na ovaj način stranice proizvoda mogu ostati nepatvorene i isti kod za recenziju se može lako koristiti ili modificirati po potrebi. Reviews.php skripta bi radila nekoliko stvari:

  • Pokažite obrazac za recenziju
  • Obradite obrazac za pregled
  • Navedite postojeće recenzije
  • Rukovati sekundarnim radnjama, kao što je označavanje recenzija ili komentara kao neprikladnih, označavanje da su recenzije bile korisne, dodavanje komentara recenzijama, označavanje da su komentari korisni i tako dalje

Nadamo se da ste već uradili dosta web razvoja, tako da znate da bi obrazac za dodavanje recenzija izgledao ovako:

Pregledajte ovaj proizvod

5 4 3 2 1

Jasno je da biste željeli koristiti neki CSS da biste ga učinili lijepim, ali to je osnovna ideja. Glavna kvaka je da ID proizvoda i tip proizvoda (ili bilo šta što baza podataka mora imati da bi se recenzija povezala sa artiklom) moraju biti pohranjeni u skrivenim ulazima. Imali biste PHP skriptu koja prikazuje proizvod da upiše ove vrijednosti na ulaze.

Ako je prijava potrebna, možete dodati (PHP) kod koji prikazuje obrazac samo prijavljenim korisnicima ili ispisuje komentar koji kaže da se korisnik mora prijaviti da bi pregledao proizvod. Slično tome, ako imate uspostavljen sistem koji garantuje da će osoba ikada pregledati proizvod samo jednom, PHP bi trebao provjeriti taj scenarij prije nego što pokaže ovaj obrazac.

Podnošenje obrasca mogao idite na novu stranicu, ali tada bi korisnik trebao kliknuti gumb Nazad da se vrati na stranicu proizvoda, što nije idealno. Umjesto toga, vratio bih obrazac na stranicu proizvoda. Na primjer, na bilo kojoj dinamičkoj web stranici, ista PHP skripta se koristi za prikaz cijelog sadržaja određenog tipa. U mom E-trgovina bez napora uz PHP i MySQL knjiga, prvi primjer stranice koristi skriptu page.php za prikaz bilo koje stranice sadržaja. Atribut akcije obrasca bi ukazivao na istu stranicu.php. To možete postići tako što ostavite atribut prazan ili koristeći PHP za dinamičko postavljanje vrijednosti.

Ako PHP stranica koja navodi proizvode zahtijeva da vrijednost koja identifikuje proizvod bude proslijeđena u URL-u, tada bi obrazac trebao pohraniti i tu vrijednost u skriveni ulaz. (To je možda već slučaj, sa unosom product_id, u zavisnosti od toga kako je sajt postavljen.) Drugo, skripta proizvoda bi takođe trebalo da se ažurira kako bi se omogućilo primanje vrednosti proizvoda putem POST-a.

Da bi skripta Reviews.php znala kada da obradi slanje obrasca, može provjeriti kako se pristupilo skripti:

If ($_SERVER["REQUEST_METHOD"] == "POST") ( // Rukovanje obrascem.

Kada se obrazac za pregled podnese, podaci obrasca trebaju biti validirani. Također biste trebali primijeniti strip_tags() na podatke kako biste spriječili napade skriptiranja na više lokacija (XSS) ili drugo loše ponašanje. I nenumeričke vrijednosti bi se izvodile kroz funkciju izbjegavanja, kao što je mysqli_real_escape_string() . Ili možete jednostavno koristiti pripremljene izjave ili pohranjene procedure za bolju sigurnost i performanse.

Ako dodate sidro atributu radnje obrasca action="page.php#reviews"korisnik će biti odveden na odjeljak recenzija stranice nakon slanja, što je lijep dodir.

Ako skripta reviews.php takođe obrađuje neke druge radnje, neprikladne recenzije ili komentare, korisne indikatore, itd., skripta bi takođe morala paziti na te podneske. Koristio bih skrivene ulaze pod nazivom „zadatak“ da naznačim koja se radnja poduzima.

U posebnom članku, demonstriram kako koristiti Ajax za jednostavan sistem ocjenjivanja. Sličan Ajax kod bi se mogao koristiti i za sistem pregleda.

mob_info