Od verze frameworku 1.9 jsou k dispozici tzv. dynamické fieldy, resp. fieldsety. To znamená, že máte možnost využít logiku pro dynamické generování řádků s vlastními políčky s automatickým uložením do DB. Ideální využití pro dynamicky generování tabulky, a uživatelské vyplňování pak v adminsitraci ve vlastním (KT) MetaBoxu. Je před připraven především jeden Key-Value a pak možnost vlastního využití…
Nejjednodušší varianta. Přidá dynamický fieldset s dvěma sloupci klič, hodnota.
!!! POZOR V CELÉM PROJEKTU MOŽNÉ POUŽÍT POUZE JEDNOU !!! Pro použití vícekrát je nutno definovat vlastní dynamické fieldsety viz dále.
|
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 |
// yours/config/kt_zzz_car_config.inc.php class KT_ZZZ_Car_Config implements KT_Configable { const FORM_PREFIX = "kt-pl-car"; // --- fieldsety --------------------------- public static function getAllGenericFieldsets() { return self::getAllNormalFieldsets() + self::getAllSideFieldsets(); } public static function getAllNormalFieldsets() { return [ self::ADDITIONAL_PARAMS_FIELDSET => self::getAddtionalParamsFieldset() ]; } public static function getAllSideFieldsets() { return []; } const ADDITIONAL_PARAMS_FIELDSET = "kt-pl-car-additional-params"; const ADDITIONAL_PARAMS_FIELD = "kt-pl-car-additional-params-field"; public static function getAddtionalParamsFieldset() { $fieldset = new KT_Form_Fieldset(self::ADDITIONAL_PARAMS_FIELDSET, __("Další parametry", "PL_ADMIN_DOMAIN")); $fieldset->setPostPrefix(self::ADDITIONAL_PARAMS_FIELDSET); $fieldset->addKeyValueFieldset(self::ADDITIONAL_PARAMS_FIELD, __("Další parametry:", "PL_ADMIN_DOMAIN")); return $fieldset; } } |
|
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 54 55 56 57 58 59 60 61 62 |
// yours/config/kt_zzz_car_config.inc.php class KT_ZZZ_Car_Config implements KT_Configable, KT_Dynamic_Configable { // implementováním KT_Dynamic_Configable se zavazujeme implementovat nezbytnou metodu getAllDynamicFieldsets. const FORM_PREFIX = "kt-pl-car"; // --- fieldsety --------------------------- public static function getAllGenericFieldsets() { return self::getAllNormalFieldsets() + self::getAllSideFieldsets(); } public static function getAllNormalFieldsets() { return [ self::ADDITIONAL_PARAMS_FIELDSET => self::getAddtionalParamsFieldset() ]; } public static function getAllSideFieldsets() { return []; } // Metoda vrací všechny fieldsety které se generují dynamicky. public static function getAllDynamicFieldsets() { return [ self::D_PARAMS_FIELDSET => self::getDParamsFieldset() ]; } const ADDITIONAL_PARAMS_FIELDSET = "kt-pl-car-additional-params"; const ADDITIONAL_PARAMS_FIELD = "kt-pl-car-additional-params-field"; public static function getAddtionalParamsFieldset() { $fieldset = new KT_Form_Fieldset(self::ADDITIONAL_PARAMS_FIELDSET, __("Další parametry", "PL_ADMIN_DOMAIN")); $fieldset->setPostPrefix(self::ADDITIONAL_PARAMS_FIELDSET); // Poslední parametr tzv. recept je pole, kde první parametr je config kde se dynamický fieldset nachází a druhý je klíč k onomu fieldsetu. // self::class je to samé jako "KT_ZZZ_Car_Config" $fieldset->addFieldset(self::ADDITIONAL_PARAMS_FIELD, __("Další parametry:", "ZZZ_ADMIN_DOMAIN"), [self::class, self::D_PARAMS_FIELDSET]); return $fieldset; } // Dynamický fieldset - registrován v getAllDynamicFieldsets a použit v getAddtionalParamsFieldset const D_PARAMS_FIELDSET = "kt-pl-car-d-params"; const D_PARAMS_KEY = "kt-pl-car-d-params-key"; const D_PARAMS_VALUE = "kt-pl-car-d-params-value"; const D_PARAMS_COUNT = "kt-pl-car-d-params-count"; public static function getDParamsFieldset() { $fieldset = new KT_Form_Fieldset(self::D_PARAMS_FIELDSET, __("Další parametry", "PL_ADMIN_DOMAIN")); $fieldset->setPostPrefix(self::D_PARAMS_FIELDSET); $fieldset->addText(self::D_PARAMS_KEY, __("Název:", "ZZZ_ADMIN_DOMAIN")); $fieldset->addText(self::D_PARAMS_VALUE, __("Hodnota:", "ZZZ_ADMIN_DOMAIN")); $fieldset->addInt(self::D_PARAMS_COUNT, __("Počet:", "ZZZ_ADMIN_DOMAIN")); return $fieldset; } } |
Pro používání dynamických fieldsetů je nutné je aktivovat na theme setupu:
|
1 2 3 4 |
// yours/requires/common/kt_zzz_theme_setup.inc.php $config->setEnableDynamicFieldsets(); |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// single.php ?> <?php foreach($carModel->getAdditionalParamsField() as $param): ?> <tr> <td><?php echo $params[KT_ZZZ_Car_Config::D_PARAMS_KEY]; ?></td> <td><?php echo $params[KT_ZZZ_Car_Config::D_PARAMS_VALUE]; ?></td> <td><?php echo $params[KT_ZZZ_Car_Config::D_PARAMS_COUNT]; ?></td> </tr> <?php endforeach;?> <? |
Při použití defaultního key value fieldsetu (addKeyValueFieldset) jsou klíče: KT_Dynamic_Fieldset_Predefined_Config::KEY_VALUE_KEY, KT_Dynamic_Fieldset_Predefined_Config::KEY_VALUE_KEY.
Auto má spousty paramentrů … proto je spravujeme dynamicky.
Avšak spousta těchto parametrů se opakuje, proto by bylo dobré alespoň klíče mít předdefinováne a při přidávání nových aut tak ušetřit čas.
Proto mužeme dynamické fieldsety předdefinovat.
Vložíme „stejný“ fieldset na theme config. Hodnoty uložené v nastavení šablony budou tak výchozímí hodnotami při přidávání aut.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// yours/config/kt_zzz_theme_config.inc.php const DEFAULT_CAR_ADDTIONAL_PARAMS_FIELDSET = "kt-pl-theme-default-car-additional-params"; public static function getDefaultCarAddtionalParamsFieldset() { $fieldset = new KT_Form_Fieldset(self::DEFAULT_CAR_ADDTIONAL_PARAMS_FIELDSET, __("Výchozí parametry aut", "PL_ADMIN_DOMAIN")); $fieldset->setPostPrefix(self::DEFAULT_CAR_ADDTIONAL_PARAMS_FIELDSET); // Field musí mít stejný klíč jako na car configu $fieldset->addFieldset(KT_ZZZ_Car_Config::ADDITIONAL_PARAMS_FIELD, __("Další parametry:", "ZZZ_ADMIN_DOMAIN"), [KT_ZZZ_Car_Config::class, KT_ZZZ_Car_Config::D_PARAMS_FIELDSET]); return $fieldset; } |
Odebírejte novinky z FW
Sledujte nás!
Follow @BriloTeam!