웹 사이트에 항상 있어야하는 페이지 (홈페이지처럼 1 개 이상은 아닙니다)의 경우 확장 기능을 만들고 싶었습니다. 페이지는 dev/build를 실행할 때 만들어 져야하며 CMS에서 생성, 삭제, 게시 취소 또는 보관할 수 없습니다. 그러나 편집 할 수 있습니다.실버 스트라이프는 확장 기능을 만들 수 있습니다.
canCreate
기능을 제외한 모든 기능이 정상적으로 작동하는 것 같습니다. 이 함수는 (n) (데이터) 확장에있을 때 CMS에 많은 영향을 미치지 않는 것처럼 보입니다. 내가 .../admin/pages/add에있을 때 나는 원하는만큼 여러 번 페이지를 만들 수 있습니다.
canCreate
을 HomePage 클래스로 이동하면 작동합니다. 하지만 그것은
class OnePage extends DataExtension
{
public function requireDefaultRecords()
{
if($this->canCreate()) {
$page = $this->owner;
$page->Title = $this->owner->className;
$page->write();
$page->publish('Stage', 'Live');
$page->flushCache();
}
}
public function canCreate($member = null)
{
return $this->owner->get()->count() == 0;
}
public function canDeleteFromLive($member = null)
{
return false;
}
public function canArchive($member = null)
{
return false;
}
}
class HomePage extends Page
{
private static $extensions = [
'OnePage'
];
}
:-) 내 확장에서 원하는 나는이 올바른 방법을하는 건가요 아니면 내가 뭔가를 놓친 거지?
편집
canCreate
방법은 잘 작동, 그래서 이런 식으로 해결할 수 있습니다;
class HomePage extends Page
{
public function canCreate($member = null)
{
return $this->get()->count() == 0;
}
}
이것은 원하는 효과가 있고 매력처럼 작동합니다. 그러나 질문은 확장에 canCreate
메소드를 넣는 것에 관한 것입니다. 그것도 잘 작동 할거야, 그렇지?
주셔서 감사합니다 응답을 SiteTree를 사용하는 간단한 onepage-사이트를 만들기위한 https://github.com/wernerkrauss/silverstripe-onepage/을 게시 한 : BTW
: 그것은처럼 작동한다 그러나'get' 함수가 작동합니다. 'DataObject'에 대한 [방법] (http://api.silverstripe.org/3.1/class-DataObject.html#_get)입니다. DataList를 반환하므로 답변에서 변경할 수 있습니까? 게다가 나는 그것을 공개 할 계획이 없으며, 단지 그것을 내 자신을 위해 사용하십시오. 그리고이 대답은 실제로 내 HomeCreate 함수가 작동하는지 명시했기 때문에 제 질문에 대답하지 않습니다. 실제 홈 페이지 클래스로 이동하면 –
'get'은 정적 메서드입니다. 직접 확장에서 호출 할 수 있을지는 의문입니다. – wmk
비 정적 메서드로 정적 메서드 호출 [가능한] (http://stackoverflow.com/a/10907777/6251886) 한 번 사용해보십시오. –