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