PHPPamokos.lt


9. Šablono žymos (template tags)

Namų darbai

Šį kartą (v0.6.1) namų darbams buvo apsitvarkymas:

  1. tinyRelated_Widget klasė buvo iškraustyta į atskirą failą - widget.php. Šis failas įtraukiamas naudojant require_once (52 eilutė) - prieš pat sukuriant kablį, kuriame ta klasė yra reikalinga. Tuo pačiu pridėjau papildomą nustatymą - general_widget (39 eilutė). Jei jo reikšmė - false, tuomet skydelis yra išjungtas, ir jo klasė nėra įtraukiama.
  2. Visi iki šiol sukurti initializavimo veiksmai (filtrai, veiksmai ir kt.) perkelti į atskirą init() metodą (42-55 eilutė), kuris buvo prikabintas prie paties anksčiausiai įskiepiams prieinamo plugins_loaded kablio (31 eilutė).

Idealiu atveju, widgets.php dar iškelčiau į includes sub-katalogą, bet Gist (kur talpinu kodo pavyzdžius) nemoka dirbti su sub-katalogais, taigi kol kas apsieisime be to.

Šablono žymos

Šiame skyriuje baigisime kalbėti apie 4 pagrindinius būdus, kuriais WordPress įskiepis gali įtakokti WordPress sistemos veikimą, išvesti savo rezultatus ir pridėti naują funkcionalumą:

  • Veiksmų ir filtrų kabliai (hooks)
  • Redaktoriaus žymos (shortcodes)
  • Skydeliai (widgets)
  • Šablono žymos (template tags)

Ankstesniuose skyriuose aptarėme kablius (4 skyrius), redaktoriaus žymas (7 skyrius) ir šoninės juostos skydelius (8 skyrius), todėl liko susipažinti tik su šablono žymomis (angl. template tags).

Šablono žymos - WordPress funkcijų, skirtų naudoti išvaizdos temų kūrimui, rinkinys. Standartinės WordPress šablono žymos yra plačiai aptariamos dokumentacijoje, todėl čia apie jas plačiai neišsiplėsime. Užteks pasakyti, kad naudodamas šablono žymas, WordPress išvaizdos temos kūrėjas gali atitinkamose šablono vietose įterpti reikalingą informaciją - straipsnio tekstą, pridėtą paveikslėlį, autoriaus vardą, ir kt.

<article>
  <?php the_post_thumbnail() ?>
  <h1><?php the_title(); ?></h1>
  <?php the_content(); ?>
</article>

Aukščiau esančiame pavyzdyje panaudotos trys šablono žymos - the_post_thumbnail(), the_title() ir the_content() - kurios atitinkamai išspausdina įrašo paveikslėlį, antraštę ir tekstą. Turbūt jau pastebėjote, kad visos šios žymos prasideda the_? Taip tradiciškai žymimos WordPress šablono žymos, kurios savo rezultatus išspausdina naudodamos echo. Tuo tarpu jei funkcija rezutatus grąžina, jos pavaidinimas turi prefiksą get_ arba iš viso neturi prefikso. Neretai šablono žymos turi abu šiuos variantus: the_title() ir get_the_title(), the_content() ir get_the_content(), the_permalink() ir get_permalink() bei kt. Tuomet temos kūrėjas turi daugiau laisvės pasirinkti, ar nori reikiamą informaciją tik išvesti, ar prieš tai dar kažkaip apdoroti.

Įskiepių šablono žymos

Jeigu anksčiau aptarti būdai - kabliai, redaktoriaus žymos, skydeliai buvo tinkami bet kuriai išvaizdos temai, ir jais besiremiančius įskiepius kuo puikiausiai įsidiegti ir naudoti galėjo programavimo žinių neturintis WordPress vartotojas, tai šablono žymos yra skirtos programuotojam. Konkrečiai - išvaizdos temų kūrėjams.

Naudodami įskiepių sukurtas šablono žymas temos kūrėjai gali giliau integruoti įskiepį į savo išvaizdos temą, pritaikyti prie dizaino, netgi pakeisti įskiepio funkcionalumą jei to reikia jų galutiniam produktui.

Tas ypač praverčia, kai kokiam nors projektui yra kuriama custom išvaizdos tema, tačiau yra ir nemažai komercinių, ypač specializuotų (e.parduotuvės, nekilnojamo turto, viešbučių ir pan.) išvaizdos temų, kuriose įskiepiai yra taip giliai integruoti, kad be jų tokios temos naudoti neįmanoma.

Toli gražu ne visi įskiepiai suteikia šablono žymas. Kai kurie, netgi labai populiarūs įskiepiai apsiriboja pirmais trimis būdais ir visą modifikavimą rekomenduoja daryti per filtrus.

Pavyzdžiui, populiarus kontaktų formos įskiepis Contact Form 7 neturi šablono žymos. Jeigu prireikia kontaktų formą įterpti keistoje šablono vietoje (t.y. ne įrašo/puslapio tekste), reikia naudotis tokiu workaround'u su redaktoriaus žyma:

<?php echo do_shortcode( '[contact-form-7 id="1234" title="Contact form 1"]' ); ?>

Šablono žymos sukūrimas

Šablono žymų sukūrimui jokio speciaus API nėra ir nereikia - tiesiog įskiepyje sukuriate paprastą funkciją atitinkamu pavadinimu. Pavyzdžiui, jeigu reikia šablono žymos mano_vardas(), įskiepyje turi atsirasti tokia funkcija:

function mano_vardas() {
  return 'Auksinis Kardas';
}

Jeigu funkcija savo rezuntatus spausdins, tuomet rekomenduoju laikytis tradicijų ir pavadinimą pradėti the_:

function the_mano_vardas() {
  echo 'Auksinis Kardas';
}

Jeigu jūs, kaip ir aš, visą savo įskiepio kodą laikote klasėje, jūsų šablono žymų funkcijos greičiausiai bus tiesiog interfeisai į klasės metodus. Galima būtų temų kūrėjams tiesiog kreiptis tiesiai į klasę (pvz. Iskiepis::rezultatas()), bet aš esu linkęs jiems duoti įprastus įrankius. Tos kelios papildomos kodo eilutės tiesiog vėliau sutaupo daug klausimų ir laiko, praleisto aiškinant, kad pasaulis nėra čemodano formos :).

class Iskiepis {
  public static rezultatas() {
    ...
    return $result;
  }
}

function iskiepis_rezultatas() {
  return Iskiepis::rezultatas();
}

function the_iskiepis_rezultatas() {
  echo Iskiepis::rezultatas();
}

Argumentai

Atskiras žodis apie argumentus - jei jūsų funkcija turi vieną-du, na tris argumentus, ir jie turi aiškią svarbumo tvarką, tada juos ir verta perduoti kaip atskirus argumentus. Tačiau jei yra daug galimų nustatymų, iš kurių kiekvienu atveju bus panaudoti vis kiti, geriau juos perduoti kaip vieną masyvą.

Tokiu atveju labai praverčia WordPress funkcija wp_parse_args( $args, $defaults ). Ji paima jūsų perduotą masyvą ir jį papildo reišmis iš numatytųjų sąrašo. Be to, pirmąjį argumentą galima perduoti ne tik kaip masyvą, bet ir anksčiau WordPress labai plačiai naudotu query_string formatu: 'kintamasis=reiksme&kitas_kintamasis=kita_reiksme'. Pavyzdys

function the_rezultatas( $args = array() ) {
    $defaults = array ( 'order' => 'asc', 'orderby'=>'id' );
    $args = wp_parse_args( $args, $defauts );
    // do stuff with $args
    echo $result;
}
the_rezultatas();
the_rezultatas( array( 'order' => 'desc' ) );
the_rezultatas( 'orderby=title&order=desc' );

tinyRelated v0.7.0

v0.7.0 versijoje pakeitimų nedaug, netgi šiek tiek gaila dėl tiek versijos numerį persukinėti. Nuo šiol tinyRelated turės vieną naują šablono žymą - the_related_posts( $id, $options ) (327-332 eilutės). Nei vienas iš atributų nėra privalomas - jei neduotas $id, jis automatiškai paimamas su get_the_id(), jei neduoti $options nustatymai, naudojami standartiniai.

Iš esmės ši šablono žymė - tiesiog dar vienas interfeisas mūsų nuolat naudojamam build_list() metodui. Greta redaktoriaus žymės ir skydelio, dabar išvaizdos temos kūrėjas galės jį įterpti šablono žymos pagalba.

Namų darbai

Jeigu išvaizdos temos kūrėjas nori labai stipriai modifikuoti susijusių įrašų sąrašo atvaizdavimą, jis gali norėti gauti susijusius įrašus tiesiog masyve, o ne jau gatavą HTML - tam sukurkite šablono žymą get_related_posts( $id, $options).



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