php
  • silverstripe
  • 2014-02-14 70 views 1 likes 
    1

    我試圖使用調用外部API的後臺進程將頁面添加到Silverstripe站點樹。如何以編程方式向Silverstripe添加新頁面?

    我只是想讓代碼創建一個新的程序頁權利。目前我有:

    $mySiteTree = new SiteTree(); 
    $mySiteTree->ClassName = "Programme"; 
    $mySiteTree->URLSegment = $newurl; 
    $mySiteTree->URLSegment = 'testurl'; 
    $mySiteTree->Title = 'testing title'; 
    $mySiteTree->ShowInMenus = '1'; 
    $mySiteTree->ParentID = '86'; 
    $mySiteTree->write(); 
    

    這似乎並沒有創建任何頁面。任何關於我在做什麼錯的建議,或者我可以嘗試做什麼來調試?

    +1

    可能重複的[SilverStripe 3.1 - 從FrontEnd頁面創建和發佈](http://stackoverflow.com/questions/21671943/silverstripe-3-1-page-creating-publishing-from-the-frontend) – Zauberfisch

    +0

    一個類似的問題剛剛被問到了幾天前。請結帳http://stackoverflow.com/questions/21671943/silverstripe-3-1-page-creating-publishing-from-the-frontend - 我建議這是關閉作爲重複 – Zauberfisch

    +0

    SiteTree,應該是頁面。一個很好的參考是內置的默認記錄.. https://github.com/silverstripe/silverstripe-cms/blob/3.1/code/model/SiteTree.php#L1419 – wilr

    回答

    7

    有幾件事情從你的代碼所缺少和需要修復的幾件事情:

    • 在創建新頁面調用new Programme()而不是new SiteTree()
    • 你不應該設置ClassName,以上變更將 處理此
    • 有沒有必要設置URLSegment。 Silverstripe會自動執行此基礎上,標題設置
    • 確保一個頁面ID 86存在
    • 你需要調用->publish('Stage', 'Live')->flushCache()

    下面的代碼應該工作:

    $mySiteTree = new Programme(); 
    $mySiteTree->Title = 'testing title'; 
    $mySiteTree->ShowInMenus = '1'; 
    $mySiteTree->ParentID = '86'; 
    $mySiteTree->write(); 
    $mySiteTree->publish('Stage', 'Live'); 
    $mySiteTree->flushCache(); 
    
    +0

    確保您首先將當前階段更改爲「階段」 。 AFAIK調用'$ mySiteTree-> write();'否則會寫入Live。 – bummzack

    0

    查看CMS單元測試。他們是如何以編程方式創建頁面和其他記錄的絕佳示例。 This one in particular should get you started.

    相關問題