Programmatically creating a CMS/Page in Magento

KyleDugger picture KyleDugger · Feb 17, 2012 · Viewed 17.6k times · Source

I saw the following answer to the post Where are Magento static CMS blocks stored? regarding programatically using PHP generating cms/blocks in Magento.

I changed the code to the following

$newBlock = Mage::getModel('cms/page')
      ->setTitle('Test CMS Page Title')
      ->setContent('Hello I\'m a new cms page.')
      ->setIdentifier('this-is-the-page-url')
      ->setIsActive(true)
      ->save();

... and it works. I see a new page show up in the CMS Pages area in the backend.

What I need to add to this is the ability to set the content of the other fields in the CMS/Page. Namely:

  • Layout (trying to set to 1 column)
  • meta keyword
  • meta description

fields. These fields are blank currently. I so far haven't been able to figure this part out.

Thanks,

Answer

OSdave picture OSdave · Feb 17, 2012

here you go:

$cmsPageData = array(
    'title' => 'Test CMS Page Title',
    'root_template' => 'one_column',
    'meta_keywords' => 'meta,keywords',
    'meta_description' => 'meta description',
    'identifier' => 'this-is-the-page-url',
    'content_heading' => 'content heading',
    'stores' => array(0),//available for all store views
    'content' => "Hello I'm a new cms page."
);

Mage::getModel('cms/page')->setData($cmsPageData)->save();

The keys of the array are the name of the fields of the cms_page table (check the db). And to know the value, I manually create the cms page I want and then see the value for this entry in the db.