Skip to content

Instantly share code, notes, and snippets.

@dfelton
Last active May 18, 2016 16:03
Show Gist options
  • Save dfelton/7a70d2b1b97ba61303bb5bd78fb49e43 to your computer and use it in GitHub Desktop.
Save dfelton/7a70d2b1b97ba61303bb5bd78fb49e43 to your computer and use it in GitHub Desktop.
Magento - Add Webform drop down to CMS Pages (Works with VladimirPopov_WebForms)
<?php
// app/code/local/FirstScribe/ModuleName/Model/Observer/Adminhtml.php
/**
* Observer class. Public method names correspond directly to the event which
* they observe.
*
* @category FirstScribe
* @package FirstScribe_ModuleName
* @author ${author}
* @version ${date}
*/
class FirstScribe_ModuleName_Model_Observer_Adminhtml
{
/**
* @param $observer Varien_Event_Observer
*/
public function adminhtmlBlockHtmlBefore($observer)
{
/* @block Mage_Core_Block_Abstract */
$block = $observer->getData('block');
switch ($block->getData('type')) {
case 'adminhtml/cms_page_edit_tab_content':
$this->_cmsPageEditFormTabContent($block);
break;
default:
break;
}
}
/**
* Adds form fields to the "Content" tab of the add/edit cms page.
*
* @param Mage_Adminhtml_Block_Cms_Page_Edit_Tab_Content $block
*/
protected function _cmsPageEditFormTabContent($block)
{
/* @var $cmsPage Mage_Cms_Model_Page */
/* @var $fieldset Varien_Data_Form_Element_Fieldset */
/* @var $helper Mage_Cms_Helper_Data */
/* @var $webforms VladimirPopov_WebForms_Model_Mysql4_Webforms_Collection */
/* @var $webform VladimirPopov_WebForms_Model_Webforms */
$cmsPage = Mage::registry('cms_page');
$fieldset = $block->getForm()->getElement('content_fieldset');
$helper = Mage::helper('cms');
if ( $helper->isModuleEnabled('VladimirPopov_WebForms')
&& $helper->isModuleOutputEnabled('VladimirPopov_WebForms')
) {
// Add "Webform" dropdown
$webforms = Mage::getResourceModel('webforms/webforms_collection');
$webforms->setOrder('name', Varien_Data_Collection::SORT_ORDER_ASC);
$options = array('' => $helper->__('-- Select --'));
foreach ($webforms as $webform) {
$options[$webform->getId()] = $webform->getData('name');
}
$fieldset->addField(
'webform_id',
'select',
array(
'title' => $helper->__('Webform'),
'label' => $helper->__('Webform'),
'options' => $options,
'value' => $cmsPage->getData('webform_id'),
'name' => 'webform_id'
),
'content_heading'
);
}
}
}
<!--
app/code/local/FirstScribe/ModuleName/etc/config.xml
-->
<!--
Assumes that your extension already has the following configured:
Models, Blocks, Setup Resources, Frontend Layout XML file
-->
</config>
<adminhtml>
<events>
<adminhtml_block_html_before>
<observers>
<firstscribe_moduleName>
<type>singleton</type>
<class>firstscribe_moduleName/observer_adminhtml</class>
<method>adminhtmlBlockHtmlBefore</method>
</firstscribe_moduleName>
</observers>
</adminhtml_block_html_before>
</events>
</adminhtml>
</config>
<?xml version="1.0"?>
<!--
(your extension may have this file in different package and/or theme)
app/design/frontend/base/default/layout/firstscribe/moduleName.xml
-->
<layout>
<cms_page>
<reference name="content">
<block type="firstscribe_moduleName/cms_page_view_webform" name="cms.page.webforms" />
</reference>
</cms_page>
</layout>
<?php
// Make sure to name this file approprately according to your extension version.
// app/code/local/FirstScribe/ModuleName/sql/firstscribe_modulename_setup/upgrade-*-*.php
/**
* Installer Script
*
* @category FirstScribe
* @package FirstScribe_ModuleName
* @author ${user}
* @version ${date}
*/
/* @var $this Mage_Core_Model_Resource_Setup */
$this->startSetup();
$this
->getConnection()
->addColumn(
$this->getTable('cms/page'),
'webform_id',
array(
'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
'length' => 11,
'nullable' => true,
'default' => null,
'comment' => 'Webform Id'
)
)
;
$this->endSetup();
<?php
/**
* Adds a webform to the page if the page is assigned one.
*
* @category FirstScribe
* @package FirstScribe_ModuleName
* @author ${user}
* @version ${date}
*/
class FirstScribe_ModuleName_Block_Cms_Page_View_Webform extends Mage_Core_Block_Text
{
/**
* Set the text for this block.
*/
protected function _prepareLayout()
{
/* @var $block VladimirPopov_WebForms_Block_Webforms */
/* @var $cmsPage Mage_Cms_Model_Page */
/* @var $helper Mage_Core_Helper_Data */
parent::_prepareLayout();
$cmsPage = Mage::getSingleton('cms/page');
$helper = Mage::helper('core');
if ( $cmsPage->getData('webform_id')
&& $helper->isModuleEnabled('VladimirPopov_WebForms')
&& $helper->isModuleOutputEnabled('VladimirPopov_WebForms')
) {
$layout = $this->getLayout();
$block = $layout->createBlock(
'webformsl/webforms',
'cms.page.webforms.form',
array(
'template' => 'webforms/default.phtml',
'webform_id' => $cmsPage->getData('webform_id')
)
);
if (false !== $block) {
try {
Mage::log($block->toHtml());
} catch (Exception $e) {
Mage::logException($e);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment