In this blog, you will learn all the mandatory steps on how to include the custom CSS and JS files on CMS pages in your Magento 2 store. This task may seem a bit complicated to you, so here’s a simplified summary of all you need to know:
Create folder under app/code/
app/code/Folio3/CustomDesignFields
Create file registration.php and composer.json under app/code/Folio3/CustomDesignFields/ registration.php <?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Folio3_CustomDesignFields', __DIR__ ); composer.json { "name": "folio3/module-customdesignfields", "description": "Custom CMS Fields Module", "license": "proprietary", "minimum-stability": "dev", "require": {}, "autoload": { "psr-4": { "Folio3\\CustomDesignFields\\": "" }, "files": [ "registration.php" ] } }
Create file module.xml under app/code/Folio3/CustomDesignFields/etc/ module.xml
<?xml version="1.0" ?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Folio3_CustomDesignFields" setup_version="1.0.0"/> </config>
Create file InstallSchema.php under app/code/Folio3/CustomDesignFields/Setup/ InstallSchema.php
<?php namespace Folio3\CustomDesignFields\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; class InstallSchema implements InstallSchemaInterface { public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $connection = $installer->getConnection(); $connection->addColumn('cms_page','page_css',['type' =>\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,'comment' => 'Page Css']); $connection->addColumn('cms_page','page_js',['type' =>\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,'comment' => 'Page Js']); } }
Create file cms_block_form.xml and cms_page_form.xml under app/code/Folio3/CustomDesignFields/view/adminhtml/ui_component/cms_page_form.xml
<?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="content"> <field name="page_css"> <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">Page CSS</item> <item name="formElement" xsi:type="string">textarea</item> <item name="source" xsi:type="string">page</item> <item name="dataScope" xsi:type="string">page_css</item> </item> </argument> </field> <field name="page_js"> <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">Page JS</item> <item name="formElement" xsi:type="string">textarea</item> <item name="source" xsi:type="string">page</item> <item name="dataScope" xsi:type="string">page_js</item> </item> </argument> </field> </fieldset> </form>
Create Block file Page.php under app/code/Folio3/CustomDesignFields/Block/Cms/ to get specific page details
Page.php <?php namespace Folio3\CustomDesignFields\Block\Cms; class Page extends \Magento\Framework\View\Element\Template { /** * @var \Magento\Cms\Model\Page */ protected $_page; /** * Page factory * * @var \Magento\Cms\Model\PageFactory */ protected $_pageFactory; public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Cms\Model\PageFactory $pageFactory, \Magento\Cms\Model\Page $page, array $data = []) { parent::__construct($context, $data); $this->_page = $page; $this->_pageFactory = $pageFactory; } /** * Retrieve Page instance * * @return \Magento\Cms\Model\Page */ public function getPage() { if (!$this->hasData('page')) { if ($this->getPageId()) { /** @var \Magento\Cms\Model\Page $page */ $page = $this->_pageFactory->create(); $page->setStoreId($this->_storeManager->getStore()->getId())->load($this->getPageId(), 'page_id'); } else { $page = $this->_page; } $this->setData('page', $page); } return $this->getData('page'); } public function getPageId(){ return $this->_request->getParam('page_id'); } }
Create layout and template file to render new field content on frontend under Layout File
app/code/Folio3/CustomDesignFields/view/frontend/layout/cms_page_view.xml
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="before.body.end"> <block class="Folio3\CustomDesignFields\Block\Cms\Page" name="cms.page.pagecssjs" template="Folio3_CustomDesignFields::cms/before_body_end.phtml"/> </referenceContainer> </body> </page> Template File app/code/Folio3/CustomDesignFields/view/frontend/templates/cms/ before_body_end.phtml <?php $page = $this->getPage(); ?> <style> <?php if($pageCss = trim($page->getPageCss())):?> <?php echo $pageCss ;?> <?php endif;?> </style> <?php if($js = $page->getPageJs()):?> <script> <?php echo $js; ?> </script> <?php endif;?>
And that’s it!
Please feel free to comment or reach out if you have any questions. If you need any help with customizing your Magento or Magento 2 web store, please get in touch with us.
USA408 365 4638
1301 Shoreway Road, Suite 160,
Belmont, CA 94002
Whether you are a large enterprise looking to augment your teams with experts resources or an SME looking to scale your business or a startup looking to build something.
We are your digital growth partner.
Tel:
+1 408 365 4638
Support:
+1 (408) 512 1812
COMMENTS ()
Tweet