WP Framework – Přehlednost šablony zevnitř


Dnešním dílem se ještě úplně nepustím do složitých čar a kouzel složitého programování, ale chtěl bych Vám dnes ukázat několik základních principů, které jsme začali používat a velmi se nám osvědčily. Určitě víte, a dáte snad i za pravdu, že WordPress šablona, která má detail stránky, příspěvků, hlavičku, patičku a index není úplně těžké udržovat a hned se v ní snadno zorientovat. Co když ale budete mít opravdu „projekt“? Něco tak velkého, že budete mít řadu vlastních typů obsahu, různé taxonomy, některé šablony pro stránky, různé vzhledy kategorií a k tomu všemu složitý layout, kde bude spoustu prvků? A ještě k tomu máte na projektu pracovat třeba dva programátoři a jeden kodér (a to se držím s týmem při zemi).

Co třeba takovýto příklad WordPress šablony

 sablona_root

Věřím, že na první pohled to každému přijde jako klasická WordPress šablona, na kterou jsme třeba i od autorů WordPressu zvyklí, ale proboha, proč? A to Vás upozorňuji, že jsem byl ještě mírný s počtem souborů, které jsou pro zobrazování dat potřeba. Dělali jsme projekty, kde si klient vymýšlel spoustu vylomenin.

 sablona_root_ad

Zde je už aspoň nějaká známka struktury. Když budete hledat layout nějaké stránky, víte, že půjdete do složky pages, stejně za účelem změny nějaké položky ve výpisu zase budeme hledat ve složce loops. Důležité je, že nejde jenom o Vás, ale například i o nějakého kolegu v týmu, který po Vás má něco změnit nebo upravit.

Část rozdělení souborů je čistě manuální záležitost. Soubory následně voláme pomocí funkce get_template_part() a jsou naší interní konvencí – hlavně tedy složka contents, loops a sidebars. Postupem vývoje jsme se naučili i tyto části házet do složek, protože u některých projektů jich je pak velké množství. Ostatní věci již zajišťuje WP Framework, který scanování layotů rozšiřuje i do složek.

Určitě bych zde chtěl podotknout, že spousta vzhledových odlišností není potřeba dělat novým layoutem, ale dá se použít nějaké nastavení šablony. Pozor na Nastavení šablony = další dotaz do databáze. Proto je v některých případech lepší udělat layout, a tam potřebné věci upravit.

WordPress šablona a skládka odpadu v podobě functions.php

Určitě každý, a opravdu si troufám říct každý, vývojář na WordPressu zajisté napsal spoustu kódů do souboru functions.php. Včetně mě nebo kolegy Martina – když člověk začíná, je to přesně skládka za Vaším domečkem, která je dostatečně daleko. Za chvíli tam máte ale 10 sousedů, 12 chatařů a Vaše skládka se začíná jevit jako problém. Přesně tak bych přirovnal soubor functions.php. Účel souboru je jasný, načítá se před inicializací šablony a je pro to vhodné do něj dát vše, že? OMYL! Jestli je někdo, kdo má v souboru více jak jeden řádek kódu (který se vejde na šířku monitoru), je pro mě programový barbar. Dokonce jsem viděl v souboru asi 4500 řádků kódu – upřímně, kdo se v tom vyzná?

V souboru má být pouze načtení nějaké Vaší struktury souborů. Jedná se o strukturu jednoho modelu – modelů můžete mít neomezeně mnoho. U nás sturkutura modelu vypadá takto:

  • interfaces – Soubory s interface
  • enmus – soubory s pevnými výčtovými typy
  • exceptions – Soubory s výjimkami
  • classes – Soubory s třídami php
  • pressenters –  soubory s presentery pro layouty
  • models  – soubory s modely s přípravou dat pro presentery
  • templates – Pro vlastní layouty (ať frontend nebo backand)
  • js –  Soubory se soubory javascriptu
  • css – Soubory css
  • images – Obrázky – zde hlavně pro backend část.
  • requires – Vše, co je zde a má prefix kt_ a suffix .inc., je automaticky načteno
    • definitions –  Definice post_type, taxonomy, layoutů, filtrů, atd.
    • metaboxes – Metaboxy pro vlastní layouty nebo layout WordPressu
    • common – Všeobecné věci šablony – načtení souborů, nastavení akcí šablony, atd.
    • functions – Soubory s funkcemi
    • widgets – Vlastní widgety
    • packs – Rozšíření funkcí šablony, vzhledu, doplňky, atd.

Všechny soubory pak mají také vlastní systém pojmenování – ať už kvůli Autoloaderu nebo z hlediska přehlednosti a snadné dohledatelnosti. V rootu této struktury máme následně soubor kt_init.inc.php. Tento soubor je schopen následně načíst všechna potřebná data, hledat objekty, atd.

Například ukázka struktury našeho WordPress E-shopu

  • kt
    • core (modul s frameworkem)
    • shop (modul se základní stukturou e-shopu)
    • shop_gopay (modul pro e-shop s platební bránou gopay)
    • shop_vyfakturuj (modul pro e-shop s napojením na vyfakturuj.cz)
    • shop_stocks (modul pro e-shop se skladovým hospodářstvím)
    • kt_init.inc.php (soubor, který vše našte a zavede do šablony)

Následně má každý modul vlastní kt_init.inc.php, který určuje pravidla (a hlavně konstanty s cestami), jak načítat daný modul. Moduly nemáme limitované, můžeme proto zakládat dle libosti moduly pro různé projekty nebo jejich složitější a nezávislé části.

Soubor functions.php následně vypadá takto:

/*
 * Inicializace KT frameworku - nic nemazat !!!
 */
require( TEMPLATEPATH . "/kt/kt_init.inc.php" );

Závěrem dílu

Dnes jsme se hodně bavili teoreticky. Chtěl jsem Vám ukázat, jak jsme došli k nějaké struktuře, jak to u nás s většími projekty funguje a co kam umisťujeme. Určitě je potřeba se zamyslet, jestli na šablonu, která má jedno menu a stránky, je potřeba používat framework a vše potřebné definovat. Je to však pouze naše myšlenka, není to návod, bez kterého nemůžete fungovat – díl má být ukázkou jak se to dá dělat čistě i ve WordPressu.

Tomáš Kocifaj, KTStudio.cz

, ,

  1. #1 Radek P. 31.7.2014 - 06:15

    Jo tak přesně tohle nakopnutí s functions.php jsem potřeboval. Je to přesně ta skládka. Jak tak na to koukám, tenhle soubor by se měl kouskovat v každé šabloně. Spousta balastu a špatně se v něm hledá.
    Díky

  2. #2 Tomáš Kocifaj 31.7.2014 - 06:31

    Přesně tak, někde jsem viděl i myšlenku, že do functions.php dávají hooky, které proběhnou hned po aktivaci šablony – takže třeba založení databázových tabulek. Následně se již pak autor odkazoval nějakým requirem mimo functions.php – to bych ještě možné kousknul :-) Ale kdo tam napíše jedinou funkci, kterou následně používá v layoutech je pro mě špatný WP programátor :-)

Komentáře jsou uzavřeny.