If you need to add custom field in cms pages then follow below steps:
1, You need to create a module for that so create module folders app/code/Magemonkey/CmspageBanner
2, Add registration.php file in your module Magemonkey/CmspageBanner
<?php /** * @author Magemonkey Team * @package Magemonkey_CmspageBanner */ MagentoFrameworkComponentComponentRegistrar::register( MagentoFrameworkComponentComponentRegistrar::MODULE, 'Magemonkey_CmspageBanner', __DIR__ );
3, Add module.xml file in your module Magemonkey/CmspageBanner/etc
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="Magemonkey_CmspageBanner" setup_version="1.0.1"> </module> </config>
4, Then create new schema file InstallSchema.php in Magemonkey/CmspageBanner/setup
<?php namespace MagemonkeyCmspageBannerSetup; use MagentoFrameworkSetupInstallSchemaInterface; use MagentoFrameworkSetupModuleContextInterface; use MagentoFrameworkSetupSchemaSetupInterface; class InstallSchema implements InstallSchemaInterface { /** * Add Secondary Custom Content */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $setup->getConnection()->addColumn( $setup->getTable('cms_page'), 'banner_block', [ 'type' => MagentoFrameworkDBDdlTable::TYPE_TEXT, 'length' => 255, 'nullable' => true, 'comment' => 'Banner Block Identifier' ] ); $installer->endSetup(); } }
5, Then add your need to add a field in ui_component form file cms_page_form.xml in Magemonkey/CmspageBanner/vew/adminhtml/ui_component
<?xml version="1.0" encoding="UTF-8"?> <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd"> <fieldset name="general"> <field name="banner_block"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">Banner Block Identifier</item> <item name="formElement" xsi:type="string">input</item> <item name="source" xsi:type="string">page</item> <item name="dataScope" xsi:type="string">banner_block</item> </item> </argument> </field> </fieldset> </form>
6, Then you need to create one block file for the call that field in the frontend, Banner.php in Magemonkey/CmspageBanner/Block
<?php namespace MagemonkeyCmspageBannerBlock; use MagentoStoreModelScopeInterface; class Banner extends MagentoFrameworkViewElementTemplate { /** * @var MagentoCmsModelTemplateFilterProvider */ protected $_filterProvider; /** * @var MagentoCmsModelPage */ protected $_page; /** * Store manager * * @var MagentoStoreModelStoreManagerInterface */ protected $_storeManager; /** * Page factory * * @var MagentoCmsModelPageFactory */ protected $_pageFactory; /** * @var MagentoFrameworkViewPageConfig */ protected $pageConfig; /** * Construct * * @param MagentoFrameworkViewElementTemplate $context * @param MagentoCmsModelPage $page * @param MagentoCmsModelTemplateFilterProvider $filterProvider * @param MagentoStoreModelStoreManagerInterface $storeManager * @param MagentoCmsModelPageFactory $pageFactory * @param MagentoFrameworkViewPageConfig $pageConfig * @param array $data */ public function __construct( MagentoFrameworkViewElementTemplateContext $context, MagentoCmsModelPage $page, MagentoCmsModelTemplateFilterProvider $filterProvider, MagentoStoreModelStoreManagerInterface $storeManager, MagentoCmsModelPageFactory $pageFactory, MagentoFrameworkViewPageConfig $pageConfig, array $data = [] ) { // used singleton (instead factory) because there exist dependencies on MagentoCmsHelperPage $this->_page = $page; $this->_filterProvider = $filterProvider; $this->_storeManager = $storeManager; $this->_pageFactory = $pageFactory; $this->pageConfig = $pageConfig; parent::__construct($context); } /** * Retrieve Page instance * * @return MagentoCmsModelPage */ public function getPageData() { if (!$this->hasData('page')) { if ($this->getPageId()) { /** @var MagentoCmsModelPage $page */ $page = $this->_pageFactory->create(); $page->setStoreId($this->_storeManager->getStore()->getId())->load($this->getPageId(), 'identifier'); } else { $page = $this->_page; } $this->setData('page', $page); } return $this->getData('page'); } }
After that you need to run setup:upgrade command
Then after you can call that block in your cms page Like:
<block class="MagemonkeyCmspageBannerBlockBanner" name="page.banner" template="Magemonkey_CmspageBanner::html/banner.phtml" after="-" />