Php 如何通过编程向Silverstripe添加新页面?

Php 如何通过编程向Silverstripe添加新页面?,php,silverstripe,Php,Silverstripe,我正在尝试使用调用外部API的后台进程将页面添加到Silverstripe站点树 我只是想让代码正确地创建一个新的程序页面。目前我有: $mySiteTree = new SiteTree(); $mySiteTree->ClassName = "Programme"; $mySiteTree->URLSegment = $newurl; $mySiteTree->URLSegment = 'testurl'; $mySiteTree->Title = 'testing

我正在尝试使用调用外部API的后台进程将页面添加到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();

这似乎没有创建任何页面。关于我做错了什么或者我可以试着做些什么来调试这个问题,有什么建议吗?

看看CMS单元测试。它们是如何以编程方式创建页面和其他记录的极好示例

您的代码中缺少了一些东西,还有一些东西需要修复:

  • 创建新页面时,请调用
    new program()
    而不是
    new
    SiteTree()
  • 您不应该设置
    类名
    ,上面的更改将 处理好这件事
  • 无需设置
    URLSEMENT
    。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();

几天前刚刚有人问了一个类似的问题,可能是重复的。请结帐-我建议这是作为重复关闭SiteTree,应该是页面。一个好的参考是内置的默认记录。。确保您首先将当前阶段更改为“阶段”。调用
$mySiteTree->write()也将编写为Live。