PHPPamokos.lt


10. Nuostatų saugojimas (Options API)

Namų darbai

Šiam namų darbui reikėjo sukurti šablono žymą get_related_posts(), kuri grąžintų susijusių įrašų masyvą. Tam tinyRelated v0.7.1 versijoje atsirado viena papildoma funkcija tuo pačiu pavadinimu (334-339 eilutės).

Ši funkcija - labai panaši į the_related_posts(), kurią sukūrėme 0.7.0 versijoje. Tie patys argumentai ($post_id, $options), ta pati numatytoji $post_id reikšmė. Skiriasi tik tai, kad rezultatą funkcija ne išspausdina, o grąžina, ir naudojamas ne build_list() metodas, o get_list().

Nustatymai

Atėjo metas pakalbėti apie mūsų įskiepio nustatymus. Šiuo metu tinyRelated klasė naudoja tris nustatymus, kurių numatytasias reikšmes mes surašėme į masyvą $options:

  • 'general_count' - (int) numato, kiek susijusių įrašų pagal nutylėjimą turėtų būti rodoma sąraše;
  • 'general_show' - (string) pažymi, kur straipsnyje turėtų būti automatiškai įterpiamas susijusių įrašų sąrašas. Galimos trys reikšmės:
    • 'before' - įrašo pradžioje
    • 'after' - įrašo pabaigoje
    • false - automatiškai neįterpti
  • 'general_widget' - (bool) ar bus naudojamas skydelis (widget). Jei nustatyta reikšmė false, skydelio klasė nėra įtraukiama ir jis nėra registruojamas, taip sumažinant įskiepio apimtį.

Artimiausiose dviejuose skyriuose kalbėsime, kaip įskiepio vartotojams suteikti galimybę pakeisti šiuos nustatymus. Šiame skyriuje kapstysimės „po kapotu“, t.y. kursime programinį kodą, kuris leis įskiepiui įrašyti, o vėliau - nuskaityti vartotojo įvestus nustatymus. Kitame, 11-ame, skyriuje, išmoksime WP Admin aplinkoje sukurti įskiepio nustatymų langą.

Options API

WordPress įskiepių ir išvaizdos temų kūrėjams siūlo paprastą ir patogų standartizuotą būdą savo nustatymams išsaugoti - Options API. Tai - keturios funkcijos, atliekančios keturias pagrindines duomenų valdymo operacijas (CRUD):

  • add_option( $option, $value, $deprecated, $autoload )
  • get_option( $option, $default )
  • update_option( $option, $new_value )
  • delete_option( $option )

Options API paprastai duomenis saugo duomenų bazės wp_options lentelėje - ten pat kur WordPress šerdis saugo savo nustatymus. Atskiras atvejis yra Multisite, apie tai - kiek vėliau. Jeigu naudojate objektų kešavimą, nustatymai kuriems nustatytas $autoload = true irgi yra kešuojami.

Kai kuriais atvejais vietoj add_option() gali būti naudojamas update_option() - jei tokio nustaytmo dar nėra, update_option() jį sukuria, Ties ši funkcija yra mažiau lanksti, jone negalima nustatyti $autoload parametro reikšmės.

Trumpai apie argumentus:

  • $option - (string) nustatymo pavadinimas. Iki 64 simbolių ilgio, rašyti reikėtų mažosiomis raidėmis, vietoje tarpų naudoti _. Įskiepio nustatymams rekomenduojama naudoti unikalų priešdėlį - įskiepio pavadinimą arba jo santrumpą;
  • $value, $new_value - (int/string/array/object) nustatymo reikšmė. Duomenų bazėje saugoma LONGTEXT tipo lauke, taigi teoriškai galima sutalpinti iki 2^32 baitų (4 gigabaitų) duomenų; Jei saugoma reikšmė - masyvas arba objektas, prieš saugant ji automatiškai serializuojama, o nuskaitant - išserializuojama atgal į masyvą/objektą;
  • $default - (int/string/array/object) kokią reikšmę grąžinti pagal nutylėjimą, jei tokio nustatmo duomenų bazėje dar nėra. Pagal nutylėjimą - false;
  • $autoload - (bool) ar įkelti nustatymo reikšmę automatiškai su kiekvienu WordPress pageload'u? Pagal nutylėjimą reikšmė - true ir ją keisti rekomenduoju tik tuo atveju jei išsaugote didelį kiekį retai naudojamų duomenų, nes kiekvieno automatiškai neužkrauto nustatymo panaudojimas - atskira užklausa į duomenų bazę, tuo tarpu automatiškai užkrauti nustatymai išnaudoja sistemos kešavimo galimybes ir neretai iš viso nesikreipia į duomenų bazę;

Gera praktika

Bendrai kalbant, nepatartina kiekvienam įskiepio nustatymui kurti atskirą Options API įrašą - gera praktika yra visus įskiepio nustatymus sudėti į masyvą/objektą ir išsaugoti kaip vieną nustatymų įrašą.

Kaip minėjau aukščiau - būtinai naudokite savo nustatymams unikalų priešdėlį, kad nekiltų suderinamumo su kitais įskiepiais problemų.

Multisite

Reikalai šiek tiek komplikuojasi, kai įskiepis patenka į WordPress sistemą, kurioje yra aktyvuotas Multisite. Nežinantiems - Multisite yra WordPres funkcija, leidžianti vienoje WordPress instaliacijoje valdyti daug skirtingų svetainių. Tai naudojama įvairios blogofermose ir pan.

Visos aukščiau minėtos funkcijos galioja tik atskiros Multisite svetainės rėmuose, tačiau kartais įskiepiams reikia išsaugoti globalius nustatymus, kurie turi galioti visose svetainėse. Toki atveju naudojamos *_site_* funcijos:

  • add_site_option( $option, $value )
  • get_site_option( $option, $default , $use_cache )
  • update_site_option( $option, $new_value )
  • delete_site_option( $option )

Kaip matote, jos labai panašios į aukščiau minętas paprastąsias. Jei įskiepis veikia ne multisite aplinkoje, jos ir elgiasi lygiai taip pat, tačiau jei yra aktyvuotas multisite, tuomet šios funkcijos duomenis saugo ne wp_options, o wp_sitemeta lentelėje ir nėra užkraunamos automatiškai, tačiau galioja visose svetainėse.

tinyRelated 0.8.0

tinyRelated v0.8.0 versijoje pridėsime naują metodą - init_options() (58-64 eilutė). Šis bus iškviečiamas pačioje init() metodo pradžioje (43 eilutė) ir pabandys nuskaityti įskiepio nustatymus naudojant Options API, o jų neradus - įrašys standartines reikšmes. Primenu, kad reiškmių redagavimo sąsają kursime kitame skyriuje.

Jei norite patikrinti, ar jūsų kodas suveikė, nueikite į http://JUSUDOMENAS.LT/wp-admin/options.php - ten parodami visi wp_options lentelėje esantys WordPress nustatymai. Jeigu randate eilutę pavadinimu tinyrelated_options, vadinasi viskas gerai. Prie reikšmės turėtų būti parašyta SERIALIZED DATA ir lauko redaguoti neleidžiama. Tai apsauga nuo netyčinio duomenų sugadinimo. Jei labai reikia tuos duomenis pataisyti rankinu būdu, galima prisijungti per phpMyAdmin ir wp_options lentelėje susirasti atitinkamą eilutę.

Namų darbai

Namų darbui pridėkime įskiepiui dar vieną nustatymą - general_random. Galimos reikšmės - true ir false, o nustatymas nurodo, ar rodyti atsitiktinius įrašus, jeigu nėra nustatytų susijusių įrašų.



(c) 2015-2018. Visais klausimais kreipkitės povilas@laraveldaily.com