Hinzufügen eines CMS-Blocks über das Setup-Skript

19

Ich arbeite an einer Site, die, glaube ich, 9 verschiedene Magento-Instanzen hat, dieselbe Site.

Daher gibt es strenge Verfahren für alle Back-End-Daten - Config und sogar für CMS-Blöcke.

Ich möchte herausfinden, wie man einen CMS-Block über ein Setup-Skript hinzufügt.

Francis Kim
quelle

Antworten:

36

Dazu empfehle ich, den dataOrdner eines Ihrer benutzerdefinierten Module zu verwenden.
Nehmen wir an, das Modul ist aktuell in der Version 1.0.4.

Erstellen Sie die Datei data/[module]_setup/data-upgrade-1.0.4-1.0.5.phpmit folgendem Inhalt:

Bearbeiten: Dateiname geändert

$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();
}

Danach ändern Sie einfach die Version in config.xml, 1.0.5um den Cache zu leeren und alle Seiten zu aktualisieren.

Marius
quelle
Das Hinzufügen eines CMS zum Block ist kaum ein Bugfix, daher muss die Feature-Version gestoßen werden. 😜
user487772
Würde das auch Mage::app()->getStores()tun?
user487772
4

Anstatt den sqlOrdner zu verwenden, sollten Sie alle Setup-Skripts, mit denen CMS-Daten geändert werden, in den dataOrdner einfügen. Hier finden Sie app/code/core/Mage/Cms/data/cms_setupeinige gute Beispiele. Diese Installationsskripte fügen statische Blöcke und CMS-Seiten hinzu.

Verwenden Sie zum Ändern der Konfigurationswerte den folgenden Code:

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

Auch ist hier ein nützlicher Artikel

jharrison.au
quelle
1

Sie können den folgenden Code auch im Upgrade-Skript verwenden:

$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();
Bijal Bhavsar
quelle
Sie sollten der Datenbank keinen Inhalt mit direktem SQL hinzufügen, wenn dies vermieden werden kann (was fast immer der Fall ist). In diesem Fall können Sie das Modell cms / block verwenden, um Daten sicher hinzuzufügen.
Ian
0

Der folgende Code erstellt und aktualisiert statische Blöcke mithilfe von Magento-Skripten

http://www.pearlbells.co.uk/wie-zu-erstellen-und-aktualisieren-des-statischen-Blocks-mit-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();

}

Liz Eipe C
quelle