2016-11-09 3 views
2

웹 사이트에 항상 있어야하는 페이지 (홈페이지처럼 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 메소드를 넣는 것에 관한 것입니다. 그것도 잘 작동 할거야, 그렇지?

답변

0

글쎄, $this->owner->get()은 작동하지 않습니다. $this->owner은 항상 DataList가 아닌 실제 개체를 반환합니다. 당신은 다른 이름을 고려하시기 바랍니다이의 모듈을 해제하려는 경우, 이미

+0

주셔서 감사합니다 응답을 SiteTree를 사용하는 간단한 onepage-사이트를 만들기위한 https://github.com/wernerkrauss/silverstripe-onepage/을 게시 한 : BTW

public function canCreate() { $className = $this->owner->ClassName; return $className::get()->count() == 0; } 

: 그것은처럼 작동한다 그러나'get' 함수가 작동합니다. 'DataObject'에 대한 [방법] (http://api.silverstripe.org/3.1/class-DataObject.html#_get)입니다. DataList를 반환하므로 답변에서 변경할 수 있습니까? 게다가 나는 그것을 공개 할 계획이 없으며, 단지 그것을 내 자신을 위해 사용하십시오. 그리고이 대답은 실제로 내 HomeCreate 함수가 작동하는지 명시했기 때문에 제 질문에 대답하지 않습니다. 실제 홈 페이지 클래스로 이동하면 –

+0

'get'은 정적 메서드입니다. 직접 확장에서 호출 할 수 있을지는 의문입니다. – wmk

+1

비 정적 메서드로 정적 메서드 호출 [가능한] (http://stackoverflow.com/a/10907777/6251886) 한 번 사용해보십시오. –