gpt4 book ai didi

php - SilverStripe 3.1 - 从前端创建和发布页面

转载 作者:行者123 更新时间:2023-12-02 07:30:57 24 4
gpt4 key购买 nike

对于我们公司的内部网,我创建了一个页面,其中包含一个表单,用于从前端创建电子邮件(创建新的电子邮件页面)。

保存表单后页面应该是实时的。我是这样做的,但我想我在某个地方犯了一个错误。因为KW1、KW2、Date和SendDate只有在我去后台再点击publish的情况下才能在前台可见。

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->write() 如果我添加 $page- 则页面不会发布>write() 给其他两个而不是我收到这个错误

Can't find [Title of Page]/[Page ID] in stage Stage

有人可以帮我吗?

提前致谢


再次分解问题

如果我发布页面

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

所有数据都已正确提交,但我收到以下错误 http://www.picbutler.de/bild/301819/erroroirpt.jpg并且该页面仅保存为实时版本。在后端页面被标记为“从草稿中删除”。 所以我认为这是正确的方向。

如果我发布页面

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

我没有收到任何错误,提交的数据出现在后端,但没有出现在发布的版本中。我必须在后端再次发布页面以使数据在前端可见。

那么有什么解决办法吗?

最佳答案

好的,一百万次尝试后我明白了! :)对于其他陷入困境的人。

写完后只需要将直播页面恢复到stage即可

$page->write();
$page->doRestoreToStage();

就是这样:)

关于php - SilverStripe 3.1 - 从前端创建和发布页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21671943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com