2012-09-17 2 views
2

내가 작업하고있는 프로젝트의 위젯을 몇 개 만들고 있는데 위젯이 위젯 외부의 다른 클래스에 액세스 할 수없는 것 같습니다. 이미지 및 SiteTree 클래스에 대한 has_one 정적 추가 (이미지 예제에서는 아래 예제 참조) 시도하고 cms 필드를 추가 할 때 같은 오류가 발생합니다. 치명적인 오류 : FormAction() 멤버 함수 호출 라인 139Silverstripe 3 : 위젯 오류의 has_one 이미지

<?php 
class AdBoxWidget extends Widget{ 
    static $title = ""; 
    static $cmsTitle = "Ad Box Widget"; 
    static $description = "Ad Box widget. To add an image, Title and Link"; 

    static $db = array(
     "Title" => "Text", 
     "Link" => "Text", 
     "AdLinkText" => "Text" 
    ); 

    static $defaults = array(
     "Title" => 'Ad Title', 
     "Link" => 'http://',   
     "AdLinkText" => 'Click here for more info', 
    ); 

    static $has_one = array(
     'AdImage' => 'Image' 
    ); 

    function getCMSFields(){ 
     return new FieldList(
      new TextField("Title", "Ad Title"), 
      new TextField("Link", "Ad Link"), 
      new TextField("AdLinkText", "Text for Link"), 
      new UploadField("AdImage", "Ad image") 
     ); 
    } 

    function getAd(){ 
     $output = new ArrayList(); 
     $output->push(
      new ArrayData(
       array(
        "Title" => $this->Title, 
        "Link" => $this->Link, 
        "AdLinkText" => $this->AdLinkText 
       ) 
      ) 
     ); 
     return $output; 
    } 


} 

답변

0

에 /..../sapphire/forms/FormField.php에서 비 객체를 사용하면 하나 개의 광고 밖으로 데이터 객체를 만들 수있는이 같은 상황을 방지합니다.
광고 데이터 객체를 편집하려면 ModelAdmin을 제공하십시오.

위젯에는 DropDownField가있는 has_one을 사용하여 위젯에 대한 광고를 선택할 수 있습니다.

위젯 모듈의 실제 문제는 해결되지 않지만 해결됩니다.

관련 문제