2014-02-14 4 views
1

Я пытаюсь добавить страницы в дерево сайта Silverstripe, используя фоновый процесс, который вызывает внешний 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(); 

Это не похоже на создание какой-либо страницы. Любые предложения относительно того, что я делаю неправильно или что я мог бы попробовать сделать, чтобы отладить это?

+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 будет делать это автоматически на основе Title установить
  • Убедитесь, что страница с 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

Смежные вопросы