08.04.2015 | Tomáš Kocifaj
Tento díl nám ukáže, jak je možné vytvářet vlastní typy obsahu – mimo databázovou strukturu. Velmi často nastává situace, kdy je potřeba ukládat nějaké záznamy, ale obecné typy ve WordPressu se pro to příliš nehodí – například nějaké číselníky, objednávky, adresy atd. Pro tento účel byly vytvořeny metaboxy – CRUD (Create, Ready, Update, Delete), které ukládají data právě do námi potřebné tabulky.
V první řadě budeme potřebovat vlastní tabulku v naší DB. To provedeme ručně pomocí některého nástroje, který pro správu s databází používáme. Parametry naší tabulky by měly vypadat nějak takto:
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE IF NOT EXISTS `kt_wp_fw_custom_catalog` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) COLLATE utf8_czech_ci NOT NULL, `description` text COLLATE utf8_czech_ci, `code` varchar(30) COLLATE utf8_czech_ci DEFAULT NULL, `menu_order` int(10) NOT NULL DEFAULT '0', `visibility` int(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ); |
Výše popsaný script vám případně vytvoří námi potřebnou tabulku. Script vychází z obecného modelu KT Catalog Base Model.
Pro správnou komunikaci s databází bude nutné připravit svůj objekt. V tomto případě budeme opět vycházet z našeho obecného modelu KT Catalog Base Model, který byl pro tyto jednoduché „číselníky“ připraven.
|
1 2 3 4 5 6 7 8 9 10 11 |
class KT_WP_FW_Custom_Catalog_Model extends KT_Catalog_Model_Base { const TABLE = "kt_wp_fw_custom_catalog"; const ORDER_COLUMN = self::TITLE_COLUMN; const PREFIX = "fw-custom-catalog"; const FORM_PREFIX = "fw_custom_catalog"; public function __construct($rowId = null) { parent::__construct( self::TABLE, self::ID_COLUMN, null, $rowId ); } } |
Jaké konstanty, a proč jsme si je definovali, najdete v sekci o komponentě KT_CRUD, z této komponenty také vychází KT Catalog Base Model.
V předchozím díle o metaboxech typu WP_OPTION jsme si ukázali, jak definujeme vlastní stránku s metaboxy v administraci WordPressu. Vydáme se stejnou cestou, pouze si upravíme některé parametry tak, aby vyhovovali našemu řešení.
Vytvoříme si soubor, který pojmenujeme jako kt_wp_fw_custom_catalog_screen.inc.php,
tento soubor umístíme do složky: yours/requires/template_pages/.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (!is_admin()) { return; } $template = new KT_Custom_Metaboxes_Subpage( "themes.php", // Naše stránka bude podstránkou stránky vzhled "Naše záznamy", // Anchor text položky v menu "Číselník", // Text položky menu "manage_categories", // Práva editace KT_WP_FW_Custom_Catalog_Model::PREFIX // Slug stránky ); $template->register(); |
Když se nyní podíváme do naší administrace, provedeme obnovu, uvidíme naši novou stránku, která zatím nic nezobrazuje – nemá co – ale registrace proběhla úspěšně.
Nyní, když jsme si vytvořili stránku, je potřeba na ni napojit výpis a editaci záznamů.
Nyní dojde na řadu komponenta KT CRUD Admin List, pomocí které definujeme náš seznam, její sloupce a některé vlastnosti.
|
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 |
if (!is_admin()) { return; } $template = new KT_Custom_Metaboxes_Subpage( "themes.php", "Naše záznamy", "Číselník", "manage_categories", KT_WP_FW_Custom_Catalog_Model::FORM_PREFIX ); // Založíme nový objekt KT_CRUD_Admin_List $crudList = new KT_CRUD_Admin_List("KT_WP_FW_Custom_Catalog_Model", KT_WP_FW_Custom_Catalog_Model::TABLE); // Provedeme některá nastavení crudListu $crudList->setSortable() ->setNewItemButton() ->setTemplateTitle("Přehled našich záznamů"); // Do crud listu přidáme dva sloupce $crudList->addColumn(KT_WP_FW_Custom_Catalog_Model::TITLE_COLUMN) ->setLabel("Název") ->setType(KT_CRUD_Admin_Column::EDIT_LINK_TYPE) ->setDeletable(); $crudList->addColumn(KT_WP_FW_Custom_Catalog_Model::VISIBILITY_COLUMN) ->setType(KT_CRUD_Admin_Column::SWITCH_BUTTON_TYPE); // Crud list předáme do naší templaty $template->setCrudList($crudList); // Nastavíme defaultní akci na výpis našeho CRUD listu $template->setDefaultCallbackFunction(KT_Custom_Metaboxes_Base::KT_CRUD_LIST_SCREEN); $template->register(); |
Když se v tuto chvíli podíváme na naši stránku, trochu se nám změnila. Již je vidět základní struktura tabulky a tlačítko pro přidání nového záznamu. To nám ale zatím nefunguje.
V tuto chvíli budeme potřebovat oživit přidávání a editaci záznamů. K tomu nám pomůže právě náš objekt KT Metabox a jeho datový typ metaboxu typu CRUD. K tomu budeme také potřebovat config pro model, kde definujeme základní KT Form Fieldset, pro vyplnění a úpravu dat pomocí formuláře.
Protože náš model vychází z KT Catalog Model Base, můžeme použít také jeho config k tomu, abychom pro něj definovali formulář. Pokud bychom měli vlastní model bez našeho základního modelu, bude nutné definovat celý config.
Vytvoříme soubor kt_wp_fw_custom_catalog_metabox.inc.php, který umístíme do složky yours/requires/metaboxes.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if(! is_admin()){ return; } $screenName = KT_Custom_Metaboxes_Subpage::getScreenNameForNativeWpPage("themes.php", KT_WP_FW_Custom_Catalog_Model::PREFIX); $fieldset = KT_Catalog_Base_Config::getCatalogBaseFieldset("kt-wp-fw-custom-catalog", KT_WP_FW_Custom_Catalog_Model::FORM_PREFIX, "Náš detail modelu"); KT_MetaBox::createCrud( $fieldset, $screenName, "KT_WP_FW_Custom_Catalog_Model", KT_WP_FW_Custom_Catalog_Model::ID_COLUMN ); |
V tuto chvíli budeme potřebovat rozšířit definici naší stránky o to, aby uměla pracovat s příslušnou akcí pro vytvoření a úpravu záznamů, které si pomocí našeho modelu připravíme. Nezapomeneme také dodat zapnutí tlačítka pro uložení přidaných záznamů.
|
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 |
if (!is_admin()) { return; } $template = new KT_Custom_Metaboxes_Subpage( "themes.php", "Naše záznamy", "Číselník", "manage_categories", KT_WP_FW_Custom_Catalog_Model::PREFIX ); // Založíme nový objekt KT_CRUD_Admin_List $crudList = new KT_CRUD_Admin_List("KT_WP_FW_Custom_Catalog_Model", KT_WP_FW_Custom_Catalog_Model::TABLE); // Provedeme některá nastavení crudListu $crudList->setSortable() ->setNewItemButton() ->setTemplateTitle("Přehled našich záznamů"); // Do crud listu přidáme dva sloupce $crudList->addColumn(KT_WP_FW_Custom_Catalog_Model::TITLE_COLUMN) ->setLabel("Název") ->setType(KT_CRUD_Admin_Column::EDIT_LINK_TYPE) ->setDeletable(); $crudList->addColumn(KT_WP_FW_Custom_Catalog_Model::VISIBILITY_COLUMN) ->setType(KT_CRUD_Admin_Column::SWITCH_BUTTON_TYPE); // Crud list předáme do naší templaty $template->setCrudList($crudList); // Nastavíme defaultní akci na výpis našeho CRUD listu $template->setDefaultCallbackFunction(KT_Custom_Metaboxes_Base::KT_CRUD_LIST_SCREEN) ->addScreenFunctionForAction("action", "create", KT_Custom_Metaboxes_Base::KT_METABOX_SCREEN) // Akce pro vytvoření záznamu ->addScreenFunctionForAction("action", "update", KT_Custom_Metaboxes_Base::KT_METABOX_SCREEN); // Akce pro editaci záznamu $template->register(); |
Když nyní klikneme na tlačítko přidat záznam, dostaneme prázdný formulář pro přidání nového záznamu do našeho modelu.
Máme hotovo – vše nyní funguje a můžeme mít vlastní číselník pro uživatele v prostředí, na které je zvyklý. Všechno nás to přitom stálo jen sepsání několika řádků kódu. O ostatní věci se postará framework bez nutností dalšího napojení na databázi.
Když si nyní přidáme několik záznamů, uvidíme, co vše nám crudList dle našeho nastavení připravil.
Více informací o tom, jaké funkce nám KT CRUD Admin List nabízí, se dočtete na popisu samotné komponenty. V našem případě jsme aktivovali možnost řazení záznamů. Pomocí první ikonky je možné záznamy přetahovat a určovat tak jejich pořadí.
Pokud si někdo není jistý, co to metabox je, rádi bychom udělali malou rekapitulaci. Metabox je ve WordPressu blok, který…
V předchozích dílech jsme si ukázali, jak snadno a rychle vytvořit metabox, jak do něj umístit prvky formuláře proto, abychom…
V minulém díle jsme si ukázali, jak snadno přidat metabox k post typům – ať už nativním v rámci WordPressu…
Odebírejte novinky z FW
Sledujte nás!
Follow @ktstudiocz!