SilverStripe 3.1 – Создание и публикация страницы с FrontEnd

для нашей интрасети компании я создал страницу с Формой для создания электронной почты из внешнего интерфейса (Создать новую страницу электронной рассылки).

После сохранения формы страница должна быть активной. Я сделал это так, но я думаю, что я где-то ошибся. Поскольку KW1, KW2, Date и SendDate видны только во внешнем интерфейсе, если я перехожу к серверу и снова нажмите публикацию.

public static $allowed_actions = array( 'MailingForm' ); public function MailingForm() { $date = new DateField('EndDate', 'Gültig bis'); $date->setConfig('showcalendar', true); $sendDate = new DateField('SendDate', 'Versanddatum'); $sendDate->setConfig('showcalendar', true); $fields = new FieldList( new TextField('Title', 'Title'), new TextField('KW1', 'Start KW'), new TextField('KW2', 'End KW'), $date, $sendDate ); $actions = new FieldList( new FormAction('createMailing', 'Erstellen') ); //$validator = new RequiredFields('Title'); return new Form($this, 'MailingForm', $fields, $actions);//, $validator); } public function createMailing($data, $form) { $member = Member::currentUser(); $filter = new URLSegmentFilter(); $page = new Mailing(); $form->saveInto($page); $page->PublisherID = $member->ID; $page->AuthorID = $member->ID; $page->ParentID = $this->ID; $page->URLSegment = $filter->filter($page->Title); $page->writeToStage('Stage'); $page->publish('Stage', 'Live'); // EMAIL BEG $email = new Email(); $email->setTo('mail@mail.de'); $email->setFrom('intranet@mail.de'); $email->setSubject('Neues E-Mailing für '.$this->Title); $messageBody = " <p>Neues E-Mailing wurde angelegt und wartet auf Freischaltung</p> <p><strong>Name:</strong> {$data['Title']}</p> <p><strong>KWs:</strong> {$data['KW1']} - {$data['KW2']}</p> <p><strong>Gültig bis:</strong> {$data['EndDate']}</p> <p><strong>Versanddatum:</strong> {$data['SendDate']}</p> "; $email->setBody($messageBody); $email->send(); // EMAIL END return $this->redirect($this->Parent()->URLSegment.'/'.$this->URLSegment.'/'.$page->URLSegment); } 

Если я заменил $page->writeToStage('Stage'); $page->publish('Stage', 'Live'); $page->writeToStage('Stage'); $page->publish('Stage', 'Live'); с $page->write() поскольку страница не публикуется, если я добавляю $page->write() к двум другим, чем я получаю эту ошибку

Невозможно найти [Название страницы] / [Идентификатор страницы] в стадии Этап

Может ли кто-нибудь помочь мне здесь?

заранее спасибо


Чтобы снова решить проблему

Если я опубликую страницу с

 $page->write(); $page->writeToStage('Stage'); $page->publish('Stage', 'Live'); 

чем все данные отправлены правильно, но я получаю следующую ошибку: http://img.ruphp.com/php/erroroirpt.jpg, и страница сохраняется только в виде живой версии. В бэкэнд страница помечена как «удалена из черновика». Поэтому я считаю, что это правильное направление.

Если я опубликую страницу с

 $page->writeToStage('Stage'); $page->publish('Stage', 'Live'); 

Я не получаю ошибки, представленные данные появляются в бэкэнд, но не в опубликованной версии. Я должен снова опубликовать страницу в бэкэнд, чтобы сделать данные видимыми в интерфейсе.

Итак, какие-нибудь идеи, как это исправить?