2014-02-13 40 views
1

我有此腳本如何更新現有的CMS頁面通過安裝腳本

$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是否存在 - 如果是這樣 - 更新?

回答

4

當您撥打$page->setData($cmsPage)時,將從Mage_Cms_Model_Page對象中刪除所有數據,並將其替換爲$cmsPage數組中的數據。部分要刪除的數據是來自對象內部$_data陣列的page_idpage_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(); 
+0

好吧,它工作正常!但一如既往,我有另一個問題:-) 如果我們有幾個具有相同標識符的靜態頁面(對於其他存儲視圖(多層存儲)的expample) - 如何過濾標識符和存儲togather(存儲存儲在cms/page_store) – user3245106

+0

閱讀「Mage_Cms_Model_Resource_Page_Collection :: addStoreFilter()」。它看起來像你可以做類似'Mage :: getModel('cms/page') - > getCollection() - > addFieldToFilter('identifier','testpage1') - > addStoreFilter(array('storeid1', 'storeid2'),true);'。檢查功能瞭解更多有關參數的信息。 – Pete171

相關問題