Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Zanimljiv
  • Bezopasna php radnja. PHP _SELF u atributu akcije obrasca

Bezopasna php radnja. PHP _SELF u atributu akcije obrasca

Napravili smo temelje za budući dodatak koji će sustav WordPress prepoznati. Danas ćemo izravno promijeniti osnovnu funkcionalnost sustava.

U tome će nam pomoći sustav "kuka", "događaja" (akcija) i filtera (filtara). Ova tri koncepta temelj su svakog WordPress dodatka.

Kuke

Postoje dvije vrste udica u WordPressu:

  • Action hook: označava mjesto u kodu koje izvodi određenu akciju, na primjer, trebate unijeti neke podatke i spremiti ih u bazu podataka.
  • Filter hook: označava filter koji će promijeniti neku vrijednost (varijablu), tako da će ubuduće kod koristiti modificiranu vrijednost.
Radnje

Rad s događajima (radnjama)

Opća logika za upravljanje događajima u WordPressu je jednostavna:

  • Označite mjesto na kojem treba izvršiti akciju pomoću akcijske kuke s potrebnim parametrima.
  • Napravite funkciju koja će izvoditi željene radnje pomoću parametara koje prosljeđuje kuka.
  • Registrirajte događaj koji će se izvršiti kada se udica aktivira, s određenim prioritetom.
  • Kada WordPress učita stranicu i pronađe kuku, sustav će izvršiti sve funkcije koje su registrirane na tu kuku.
  • Da bi se postigla prva točka, sustav nudi funkciju 'do_action':

    Uradi_radnju($oznaka, $arg_1, $arg_2, ... , $arg_n);

    Potrebni su sljedeći argumenti: $tag – naziv “hooka”, $arg_1, $arg_2, ..., $arg_n – parametri s kojima će funkcija biti pozvana. Argumenata može biti bilo koji broj, ili 0.

    Sam sustav ima mnogo već definiranih kuka:

    Uradi_radnju("pokreni");

    Ovo je vrlo jednostavan primjer bez dodatnih argumenata. Ova kuka se pokreće kada je većina sustava već konfigurirana i kada je vrijeme za stvaranje vlastitih objekata, kategorija, postova itd.

    Do_action("save_post", $post_id, $post);

    U ovom primjeru, kuka se pokreće kada se objava spremi s dva argumenta post_id - identifikator objave i objava - sama objava.

    Stvaranje kukica dostupno je svakom programeru za izradu vlastitog dodatka (ili teme). Zahvaljujući tome imamo moćan alat za kontrolu ponašanja sustava.

    Uradi_radnju("moja_doista_prilagođena_kuka");

    Nakon što smo kreirali kuku i napisali funkciju, moramo registrirati funkciju pomoću “add_action”

    Add_action($tag, $function_to_add, $priority, $accepted_args_number);

    Funkcija 'add_action' uzima dva potrebna parametra: $tag: naziv odgovarajuće kuke i $function_to_add: naziv funkcije koja se poziva. Druga dva parametra su izborna: $priority: cjelobrojna varijabla koja određuje redoslijed kojim se funkcija izvršava (zadano je 10), $accepted_args_number: broj argumenata koje funkcija prihvaća (zadano je 1).

    Pogledajmo primjer kako bismo razumjeli cijeli proces. Recimo da želimo dodati malu obavijest na dno naše web stranice. Za ovo možemo koristiti kuku 'wp_footer' jer je to obavezan dio koda koji koristi svaka tema.

    Funkcija msp_helloworld_footer_notice())( echo "Zdravo, ja sam vaša prilagođena obavijest"; ) add_action("wp_footer", "msp_helloworld_footer_notice");

    U ovom smo primjeru stvorili funkciju koja jednostavno renderira oznaku za upozorenje i registrirali je s 'wp_footer'. Nakon što dodamo ovaj kod u našu datoteku dodatka (pogledajte prethodno), vidjet ćemo rezultat na stranici:

    Upozorenje o WordPress dodatku

    Rad s filterima

    Filtri rade na isti način kao i događaji. Ali filtri ne izvršavaju samo određeni dio koda, oni mijenjaju vrijednosti koje im prosljeđuje kuka. To znači da svaki filtar ima pridruženu vrijednost (varijablu) na kojoj radi.

    Funkcija filtra će uzeti ovu vrijednost i transformirati je za daljnju upotrebu. Kuke za filtriranje malo se razlikuju od kuka za akciju.

    Apply_filters($tag, $value_to_filter, $arg_1, $arg_2, ... , $arg_n);

    Funkcija 'apply_filter' stvara poveznicu filtra nazvanu $tag i obavezni parametar $value_to_filter (ovo može biti prazno, ali se mora deklarirati). Preostali neobavezni argumenti rade isto kao i za događaje.

    Filter_function($value_to_filter, $arg_1, $arg_2, ... , $arg_n)( //filter vraća $value_to_filter; //vrijednost se mora vratiti)

    Ovo je "kostur" filtra, koji pokazuje da bi filtar trebao:

  • prihvatiti barem 1 argument;
  • vrati modificiranu vrijednost.
  • add_filter($tag, $function_to_add, $priority, $accepted_args);

    Funkcija 'add_filter' registrira funkciju s nazivom sadržanim u $function_to_add za $tag kuku. Preostali argumenti - $priority i $accepted_args - rade isto kao i za zakačke događaja.

    Pogledajmo primjer: uobičajeni zadatak dodatka je dodati nešto na kraj posta. Ako bolje pogledamo funkciju 'the_content', koja se koristi za prikaz sadržaja posta, pronaći ćemo sljedeću kuku:

    $sadržaj = apply_filters("sadržaj", $sadržaj);

    Koristeći ga možemo lako dodati nešto na kraj posta.

    Funkcija msp_helloworld_post_footer($content) ( $content .= "

    Pozdrav, ja sam vaše prilagođeno podnožje posta

    "; vrati $content; ) add_filter("the_content", "msp_helloworld_post_footer", 100);

    Imajte na umu da koristimo veliki broj za prioritet kako bismo osigurali da su svi standardni filteri izvršeni prije izvršavanja 'msp_helloworld_post_footer'. Nakon uključivanja koda u naš dodatak vidjet ćemo rezultat:


    Kako pronaći udicu

    Sada razumijemo da za izvođenje određenih radnji moramo znati o postojećim kukama.

    WordPress Codex nudi popise kukica za filtre i događaje Action Reference i Filter Reference.

    Dodatne radnje s kukama

    Baš kao i dodavanje, kuka se može ukloniti koristeći sličnu sintaksu.

    Događaje možete izbrisati ovako:

    Remove_action($tag, $function_to_remove, $priority, $accepted_args); ukloniti_sve_radnje($oznaka, $prioritet);

    Kao što ste možda pogodili, 'remove_action' uklanja određeni događaj registriran za danu kuku (prioritet i broj argumenata moraju biti točno navedeni, kao što je navedeno tijekom registracije), a 'remove_all_actions' pomaže ukloniti sve događaje registrirane za kuku ( ako je prioritet izostavljen, funkcija će izbrisati sve događaje).

    Filteri se mogu brisati na isti način:

    Remove_filter($tag, $function_to_remove, $priority, $accepted_args); ukloni_sve_filtre($oznaka, $prioritet);

    API dodatka za WordPress također nudi funkcije za provjeru je li funkcija registrirana za danu kuku:

    Ima_akciju($oznaka, $funkcija_za_provjeru); ima_filter($oznaka, $funkcija_za_provjeru);

    Obje funkcije provjeravaju je li dana funkcija registrirana za kuku i vraćaju true ako je uspješna, inače flase. Unutar funkcije imamo mogućnost provjeriti je li ju kuka pozvala:

    If("hook_to_check_name" === current_filter())()

    Unatoč nazivu 'current_filter' ne radi samo s filtrima već i s događajima.

    Netrivijalan primjer

    Oživimo "kostur" našeg dodatka koji smo pripremili u prošloj lekciji.

    Ispunimo datoteku 'core.php' (glavni dio našeg dodatka, koji sadrži većinu funkcija) kodom koji rješava problem koji se može pojaviti tijekom rada. Da bismo to riješili, koristit ćemo akcije i filtre.

    Neka vaša WordPress stranica prihvaća postove različitih autora od gostiju, ali vam ne dopušta stvaranje računa. To znači da su korisnik koji je objavio objavu i stvarni autor različite osobe te moramo biti sigurni da je autor naveden u objavi. To možemo učiniti pomoću taksonomije.

    Kreirajmo vlastitu taksonomiju za obradu imena i kratke biografije autora. Moći ćemo koristiti ime autora kao druge termine taksonomije (na primjer oznake) u objavi. Kodirati:

    /** registrirajte filtre i događaje **/ funkcija msp_helloworld_init())( add_action("init", "msp_helloworld_taxonomies"); add_filter("the_content", "msp_helloworld_author_block_filter"); add_filter("post_class", "msp_helloworld_post_class"); ) add_action ("plugins_loaded", "msp_helloworld_init"); /** taksonomija **/ funkcija msp_helloworld_taxonomies())( $args = array("labels" => array("name" => "Gost autori", "singular_name" => "Gost autor"), "show_in_nav_menus" = > false); register_taxonomy("gauthor", array("post"), $args ) /** oznaka bloka autora **/ funkcija msp_helloworld_author_block())( globalni $post; $author_terms = wp_get_object_terms($post->ID, "gauthor"); $name = stripslashes($author_terms->name); ; $out .= "Ovo je gost-post od ($name)"; ()) $content .= msp_helloworld_author_block(); return $content ) /** dodaj CSS klasu u post **/ function msp_helloworld_post_class($post_class)( global $post; $ author_terms = wp_get_object_terms($post->ID, " gauthor"); if(!empty($author_terms))( $post_class = "gauthor"; ) vrati $post_class; )

    Kao što možete vidjeti, stvorili smo funkciju za registraciju vlastite taksonomije i vezali je za 'init' kuku. Zatim smo izradili predložak odgovoran za prikaz bloka autora pomoću WordPress funkcije 'wp_get_object_terms'. Zatim smo umetnuli blok s informacijama o autoru na kraju posta pomoću filtera 'the_content'. I na kraju, dodali smo vlastitu CSS klasu. Proizlaziti:


    Ovaj članak ide u detalje o korištenju PHP _SELF varijable.

    Što je PHP _SELF varijabla?

    PHP _SELF varijabla vraća naziv i putanju trenutne datoteke (u odnosu na korijen dokumenta). Ovu varijablu možete koristiti u atributu akcije obrasca. Postoje i neke nijanse koje biste trebali znati. Naravno, ne možemo zanemariti ove nijanse.

    Pogledajmo nekoliko primjera.

    Echo $_SERVER["PHP_SELF"];

    1) Pretpostavimo da se vaša php datoteka nalazi na sljedećoj adresi:

    Http://www.yourserver.com/form-action.php

    U ovom slučaju PHP _SELF varijabla će sadržavati:

    "/forma-akcija.php"

    2) Pretpostavimo da se vaša php datoteka nalazi na ovoj adresi:

    Http://www.yourserver.com/dir1/form-action.php

    PHP_SELF će biti:

    "/dir1/form-action.php"

    PHP _SELF u atributu akcije obrasca. Zašto je bila potrebna tamo?

    Tipično se PHP _SELF varijabla koristi u atributu akcije oznake obrasca. Atribut action specificira adresu na koju će biti poslan sadržaj obrasca nakon potvrde (korisnik klikne na gumb s type="submit"). U pravilu, to je ista stranica s koje je otišao obrazac.

    Međutim, ako preimenujete datoteku na koju se obrazac poziva, morat ćete preimenovati naziv datoteke u atributu radnje, inače obrazac neće raditi.

    PHP _SELF varijabla će vas spasiti od nepotrebnih ispravaka, jer će se adresa stranice automatski generirati na temelju naziva datoteke.

    Recimo da imate datoteku obrasca koja se zove form-action.php i želite da se obrazac pošalje u istu datoteku nakon potvrde. Obično pišu ovako:

    Ali možete koristiti PHP _SELF varijablu umjesto form-action.php. U ovom slučaju kod će izgledati ovako:

    Najbolji članci na temu