inv*_*tus 2 php forms silverstripe
对于我们公司的内部网,我创建了一个带有表单的页面,用于从前端创建电子邮件(创建新的电子邮件页面).
保存表单后,页面应为Live.我是这样做的,但我认为我在某个地方犯了错误.因为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);
}
Run Code Online (Sandbox Code Playgroud)
如果我更换$page->writeToStage('Stage');
$page->publish('Stage', 'Live');
与$page->write()
比网页未发布,如果我添加$page->write()
其他两个比我收到此错误
在舞台阶段找不到[页面标题]/[页面ID]
有人可以帮我吗?
先感谢您
再次打破这个问题
如果我发布页面
$page->write();
$page->writeToStage('Stage');
$page->publish('Stage', 'Live');
Run Code Online (Sandbox Code Playgroud)
比所有数据都正确提交但我收到以下错误http://www.picbutler.de/bild/301819/erroroirpt.jpg并且该页面仅保存为实时版本.在后端,页面被标记为"从草稿中删除".所以我认为这是正确的方向.
如果我发布页面
$page->writeToStage('Stage');
$page->publish('Stage', 'Live');
Run Code Online (Sandbox Code Playgroud)
我没有收到任何错误,提交的数据出现在后端,但不是在已发布的版本中.我必须在后端再次发布页面,以使数据在前端可见.
那么任何想法如何解决这个问题?
好吧,一百万次尝试后我得到了它!:)对于那些陷入困境的人.
您只需要在写入后将实时页面恢复到舞台
$page->write();
$page->doRestoreToStage();
Run Code Online (Sandbox Code Playgroud)
就这样 :)