Magento Version: 1.14.2.2 (Enterprise)
Background / Problem
Using the following as a guide, I successfully created a module that adds custom form fields (fb_og_image and fb_og_video) to CMS pages (revisions on) and adds columns to two database tables (cms_page and enterprise_cms_page_revision).
- https://www.atwix.com/magento/adding-custom-attribute-to-a-cms-page/,
- https://magento.stackexchange.com/a/53094
- https://magento.stackexchange.com/a/5124
In the module's Observer, I successfully added the two fields.
public function cmsFields(Varien_Event_Observer $observer)
{
// per https://www.atwix.com/magento/adding-custom-attribute-to-a-cms-page/
// get CMS model with data
$model = Mage::registry('cms_page');
// get form instance
$form = $observer->getForm();
// apply new fields to 'Meta Data' CMS tab
$fieldset = $form->getElement('meta_fieldset');
// create new custom fields `fb_og_image` and `fb_og_video`
$fieldset->addField('fb_og_image', 'text', array(
'name' => 'fb_og_image',
'label' => Mage::helper('cms')->__('Facebook Image (og:image)'),
'title' => Mage::helper('cms')->__('Facebook Image (og:image)'),
'disabled' => false
));
$fieldset->addField('fb_og_video', 'text', array(
'name' => 'fb_og_video',
'label' => Mage::helper('cms')->__('Facebook Video (og:video)'),
'title' => Mage::helper('cms')->__('Facebook Video (og:video)'),
'disabled' => false
));
}
I also updated $_revisionControlledAttributes to make sure revision happens on those two fields.
class ST_Social_Model_Config extends Enterprise_Cms_Model_Config
{
protected $_revisionControlledAttributes = array_merge(
array('fb_og_image', 'fb_og_video'),
$this->_revisionControlledAttributes // parent attributes
);
}
When entering values in the two fields, they persist on save/publish. However, this is where the strangeness happens. Here are the relevant queries in the database:
mysql> select page_id, identifier, update_time, is_active, published_revision_id, under_version_control, fb_og_image, fb_og_video from cms_page where identifier = 'our-vision';
+---------+------------+---------------------+-----------+-----------------------+-----------------------+-------------+-------------+
| page_id | identifier | update_time | is_active | published_revision_id | under_version_control | fb_og_image | fb_og_video |
+---------+------------+---------------------+-----------+-----------------------+-----------------------+-------------+-------------+
| 13 | our-vision | 2017-03-03 16:40:54 | 1 | 3483 | 1 | NULL | NULL |
+---------+------------+---------------------+-----------+-----------------------+-----------------------+-------------+-------------+
1 row in set (0.01 sec)
mysql> select revision_id, version_id, page_id, revision_number, fb_og_image, fb_og_video from enterprise_cms_page_revision where revision_id = 3483;
+-------------+------------+---------+-----------------+--------------+--------------+
| revision_id | version_id | page_id | revision_number | fb_og_image | fb_og_video |
+-------------+------------+---------+-----------------+--------------+--------------+
| 3483 | 12 | 13 | 15 | imagecmstest | videocmstest |
+-------------+------------+---------+-----------------+--------------+--------------+
1 row in set (0.01 sec)
Notice that the two custom field values are set in the enterprise_cms_page_revision database table. However, the two custom field values are missing the same data in the cms_page database table.
When I use var_dump('<pre>', Mage::getSingleton('cms/page')); die; in my Block, the custom fields are pulling from the cms_page database table (which do not have the necessary data).
Questions (finally!)
- How do I make sure to get the data from the latest revision (found in the
enterprise_cms_page_revisiontable)? Should I use a different singleton or a different class/method altogether? - Is there a reason that the custom
cms_pagedatabase table columns don't get set as they do in theenterprise_cms_page_revision?
Please don't tell me to ask Magento for support. I have.