Framework nabízí návrhový model v podobě MVP. Při přípravě dat a jejich výpisu můžete použit tři základní stavební prvky a to Model, Config a Presenter. V rámci frameworku je logika souborů rozdělena následovně:
Proč byste měli tento způsob architektury dat vůbec používat? K čemu jsou defakto tři PHP „objekty“ ke zobrazení jedné stránky?
Objekt připravuje data, která většinou připravuje pro presenter, který data následně vypisuje. Model by měl být vytvořen tak, aby neprováděl žádnou logiku – například, zda se některá data mají nebo nemají zobrazit. Měl by mít ale připravenou funkci, která vrátí, zda si uživatel vypsání dat u dané entity nastavil nebo ne. Tuto informaci byste si měli následně vyžádat v presenteru a data zobrazit. Model by neměl obsahovat žádné HTML, neměl by nic echovat. To je práce presenteru.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class KT_Car_Model extends KT_WP_Post_Base_Model { public function __construct( WP_Post $post = null, $postId = null ) { parent::__construct( $post, $postId ); } // --- veřejné metody ------------ // Funkce vrátí hodnotu z tabulky wp_postmeta, která patří ke konkrétnímu modelu. Jako klíč bude hledat // hodnotu uloženou v constantě PRICE na configu modelu public function getCarPrice(){ return $price = $this->getMetaValue(KT_Car_Config::PRICE); } public function getMileage(){ return $mileage = $this->getMetaValue(KT_Car_Config::MILEAGE); } public function getEnginePower(){ return $enginePower = $this->getMetaValue(KT_Car_Config::ENGINE_POWER); } public function isWithVat(){ $withVat = $this->getMetaValue(KT_Car_Config::WITH_VAT); if(kt_isset_and_not_empty($withVat)){ return true; } return false; } } |
Objekt, který není potřeba inicializovat. Je to sada statických funkcí a konstant, které udržují nějaký stav bez možnosti zásahu uživatele do nějakého nastavení. Je to soubor, do kterého se odkazujete často na různě definované klíče nebo formuláře, které lze v rámci frameworku velmi jednoduše definovat.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
class KT_Car_Config { // Definice konstakt s klíče pro wp_postmeta const DATA_FIELDSET = "kt-car-data-fieldset"; const PRICE = "kt-car-price"; const MILEAGE = "kt-car-mileage"; const ENGINE_POWER = "kt-car-engine-power"; const WITH_VAT = "kt-car-with-vat"; public static function getDataFieldset(){ $fieldset = new KT_Form_Fieldset(self::DATA_FIELDSET, __("Parametry vozidela", KT_DOMAIN)); $fieldset->addText(self::PRICE, __("Cena vozu", KT_DOMAIN)) ->setInputType(KT_Text_Field::INPUT_NUMBER) ->addRule(KT_Field_Validator::INTEGER, __("Cena musí být celé číslo", KT_DOMAIN)) ->addRule(KT_Field_Validator::REQUIRED, __("Cena vozu musí být vyplněna", KT_DOMAIN)); $fieldset->addText(self::MILEAGE, __("Stav tachometru", KT_DOMAIN)) ->setInputType(KT_Text_Field::INPUT_NUMBER) ->addRule(KT_Field_Validator::INTEGER, __("Stav tachometru musí být celé číslo", KT_DOMAIN)) ->addRule(KT_Field_Validator::MIN_NUMBER, __("Stav tachometru musý být větší než 0", KT_DOMAIN), 1); $fieldset->addText(self::ENGINE_POWER, __("Výkon motoru", KT_DOMAIN)) ->setInputType(KT_Text_Field::INPUT_NUMBER) ->addRule(KT_Field_Validator::INTEGER, __("Výkon motoru musí být celé číslo", KT_DOMAIN)) ->addRule(KT_Field_Validator::MIN_NUMBER, __("Výkon motoru musí být větší než 0", KT_DOMAIN), 1); $fieldset->addSwitch(self::WITH_VAT, __("Odpis DPH", KT_DOMAIN)) ->setValue(KT_Switch_Field::NO); return $fieldset; } } |
Pokud už máme model, který nám data připravuje, máme také config, který udržuje „nastavení“ modelu, můžeme již připravit presenter. Ten se bude starat o přípravu a výpis dat do samotného layoutu. Bude z modelu stahovat data, může připravovat některou část HTML kódu a bude data formátovat dle potřeby.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
class KT_Car_Presenter extends KT_WP_Post_Base_Presenter { public function __construct( $post ) { $model = new KT_Car_Model( $post ); $this->setModel( $model ); } // --- gettery ------------ /** * @return \KT_Car_Model */ public function getModel(){ return parent::getModel(); } // --- veřejné funkce ------------ public function renderPrice(){ $carPrice = $this->getModel()->getCarPrice(); echo "Cena vozidla: " . number_format($carPrice, 0, "", " ") . " CZK"; } public function renderMileage(){ $mileage = $this->getModel()->getMileage(); if(kt_isset_and_not_empty($mileage)){ echo "Najeto: " . number_form($mileage, 0, "", " ") . " KM"; } } public function renderEnginePower(){ $enginePower = $this->getModel()->getEnginePower(); if(kt_isset_and_not_empty($enginePower)){ echo "Výkon motoru: " . $enginePower . " Kw"; } } public function renderWithVat(){ if($this->getModel()->isWithVat()){ $html = __("Ano", KT_DOMAIN); } else { $html = __("Ne", KT_DOMAIN); } echo "Možnost odpisu DPH: " . $html; } } |
Odebírejte novinky z FW
Sledujte nás!
Follow @BriloTeam!