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="-" />

