Magento Stack Exchange is a question and answer site for users of the Magento e-Commerce platform. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am working on a site that has, I believe 9 separate Magento instances, same site.

Therefore there are strict procedures surrounding any back-end data - config and even for CMS blocks.

I would like to find out how to add a CMS block via a setup script.

share|improve this question
up vote 32 down vote accepted

For this, I suggest using the data folder of one of your custom modules.
Let's say that the module is currently at version 1.0.4.

Create the file data/[module]_setup/data-upgrade-1.0.4-1.0.5.php with the following content:

Edit: changed file name

$content = 'BLOCK CONTENT HERE';
//if you want one block for each store view, get the store collection
$stores = Mage::getModel('core/store')->getCollection()->addFieldToFilter('store_id', array('gt'=>0))->getAllIds();
//if you want one general block for all the store viwes, uncomment the line below
//$stores = array(0);
foreach ($stores as $store){
    $block = Mage::getModel('cms/block');
    $block->setTitle('Block title here');
    $block->setIdentifier('block_identifier_here');
    $block->setStores(array($store));
    $block->setIsActive(1);
    $block->setContent($content);
    $block->save();
}

After this just change the version in config.xml to 1.0.5 clear the cache and refresh any page.

share|improve this answer
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$staticBlock = array(
                'title' => 'Test Block',
                'identifier' => 'test-block',                   
                'content' => 'Sample Test Block',
                'is_active' => 1,                   
                'stores' => array(0)
                );

Mage::getModel('cms/block')->setData($staticBlock)->save();

From: http://blog.chapagain.com.np/magento-create-cms-page-static-block-programmatically/#sthash.1FYKYYhI.dpuf

share|improve this answer

Instead of using the sql folder, you should put any setup scripts modifying CMS data in the data folder. See app/code/core/Mage/Cms/data/cms_setup for some good examples. These install scripts add static blocks and CMS pages.

For changing config values, use this code:

$installer->setConfigData(
    Mage_Page_Model_Config::XML_PATH_CMS_LAYOUTS,
    'your_value_here'
);

Also, Here's a useful article

share|improve this answer

You can also use below code in upgrade script:

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
$connection = $installer->getConnection();
/* @var $connection Varien_Db_Adapter_Pdo_Mysql */

$installer->startSetup();
$connection->insert($installer->getTable('cms/block'), array(
    'title'             => 'Footer Links',  
    'identifier'        => 'footer-links',
    'content'           => '<ul>\r\n<li><a href=\"{{store direct_url=\"about-magento-demo-store\"}}\">About Us</a></li>\r\n<li class=\"last\"><a href=\"{{store direct_url=\"customer-service\"}}\">Customer Service</a></li>\r\n</ul>',
    'creation_time'     => now(),
    'update_time'       => now(),
));
$connection->insert($installer->getTable('cms/block_store'), array(
    'block_id'   => $connection->lastInsertId(),
    'store_id'  => 0
));
$installer->endSetup();
share|improve this answer
    
You should not add content to the database with direct SQL if it can be avoided (which is almost always). In this case you can use the model cms/block to add data safely. – Ian Oct 2 '14 at 16:56

The following code create and update static block using magento scripts

http://www.pearlbells.co.uk/how-to-create-and-update-the-static-blocks-using-magento-script/

function createBlock($blockData) {

$block = Mage::getModel('cms/block')->load($blockData['identifier']);
$block->setTitle($blockData['title']);
$block->setIdentifier($blockData['identifier']);
$block->setStores(array($blockData['storeId']));
$block->setIsActive($blockData['active']);
$block->setContent($blockData['content']);
$block->save();

}

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.