Php SilverStripe 3.1-页面创建和;从前端发布
对于我们公司的内部网,我创建了一个带有表单的页面,用于从前端创建电子邮件(创建一个新的电子邮件页面) 保存表单后,页面应处于活动状态。 我是这样做的,但我想我在什么地方犯了个错误。因为如果我转到后端并再次单击“发布”,KW1、KW2、Date和SendDate仅在前端可见Php SilverStripe 3.1-页面创建和;从前端发布,php,forms,silverstripe,Php,Forms,Silverstripe,对于我们公司的内部网,我创建了一个带有表单的页面,用于从前端创建电子邮件(创建一个新的电子邮件页面) 保存表单后,页面应处于活动状态。 我是这样做的,但我想我在什么地方犯了个错误。因为如果我转到后端并再次单击“发布”,KW1、KW2、Date和SendDate仅在前端可见 public static $allowed_actions = array( 'MailingForm' ); public function MailingForm() { $date = new Dat
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->write();
$page->writeToStage('Stage');
$page->publish('Stage', 'Live');
$page->writeToStage('Stage');
$page->publish('Stage', 'Live');
我没有收到任何错误,提交的数据显示在后端,但不在发布的版本中。我必须在后端再次发布页面,以使数据在前端可见
那么有什么办法解决这个问题吗?好的,一百万次尝试后我就知道了!:) 对于其他陷入困境的人 您只需在编写后将live页面恢复到stage即可
$page->write();
$page->doRestoreToStage();
仅此而已:)非常感谢您的两行代码
$page->write()
$page->dorestorostatage();
在过去的几天里,我一直在努力处理SiteTree表,试图为此表写入一条新记录
重要的一点是永远不要直接使用SiteTree类,否则它将无法工作
例如$mySiteTree=newsitetree();(坏)
创建新页面扩展SiteTree(),例如Mypage
$mypage = new Mypage();
$mypage->Title = 'My Page';
$mypage->URLSegment = 'testing';
$mypage->ShowInMenus = '1';
$mypage->Version = '1';
$mypage->ParentID = '24';
$mypage->write();
$mypage->doRestoreToStage();
享受吧 ->doPublish()有帮助吗?只需在$page->publish(…)之后添加,或者只添加doPublish?我会尝试
$page->write()
,然后$page->doPublish()
就像@munomono说的那样,doPublish()
会解决你的问题。嗨,好的,我添加了write()和doPublish(),删除了writeToStage()和publish()。提交后,我收到了此错误,请尝试用writeToStage替换write,然后DoPublishin,而不是只是投票否决答案,在评论中告诉我原因是有用的。代码中有错误吗?感谢分享您的解决方案!