我有这个脚本
$cmsPage = Array (
'title' => 'Test Page 1',
'root_template' => 'one_column',
'identifier' => 'testpage1',
'content' => "<p>Testowa sprawa czy działa update ? oooooooooooo</p>",
'is_active' => 1,
'stores' => array(1),
'sort_order' => 0
);
$collection = Mage::getModel('cms/page')->getCollection()->addFieldToFilter('identifier', 'testpage1');
$page = Mage::getModel('cms/page')->load($collection->getFirstItem()->getId());
$page->setData($cmsPage)->save();
如果存在标识符为“testpage1”的cms页面,则脚本会创建另一个具有相同标识符的页面。有没有办法检查cmspage是否存在 - 如果这是真的 - 请更新吗?
答案 0 :(得分:4)
当您致电$page->setData($cmsPage)
时,您将从Mage_Cms_Model_Page
对象中删除所有数据,并将其替换为$cmsPage
数组中的数据。您要删除的部分数据是对象的内部page_id
数组中的$_data
。 page_id
是将对象映射到cms_page
数据库表中的列的内容。通过删除该ID,您可以使Magento运行INSERT
查询而不是UPDATE
。
这样的事情应该有效:
$pageId = $collection = Mage::getModel('cms/page')->getCollection()->addFieldToFilter('identifier', 'testpage1')->getFirstItem()->getId();
$page = Mage::getModel('cms/page')->load($pageId);
$cmsPage = Array (
'page_id' => $pageId,
'title' => 'Test Page 1',
'root_template' => 'one_column',
'identifier' => 'testpage1',
'content' => "<p>Testowa sprawa czy działa update ? oooooooooooo</p>",
'is_active' => 1,
'stores' => array(1),
'sort_order' => 0
);
$page->setData($cmsPage)->save();