Silverstripe 3:Widget中的has_one图像错误

时间:2012-09-17 03:49:30

标签: silverstripe

我正在为我正在处理的项目创建一些小部件,似乎小部件无法访问小部件外部的任何其他类。我已经尝试为图像和SiteTree类添加一个has_one静态(请参见下面的示例示例),当我尝试添加cms字段时出现相同的错误:致命错误:调用成员函数FormAction()on第139行/..../sapphire/forms/FormField.php中的非对象

<?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;
    }


}

1 个答案:

答案 0 :(得分:0)

为了防止出现这种情况,您可以使用一个广告制作数据对象 提供ModelAdmin以编辑Ad DataObjects。

在您的小部件中,您可以使用带有DropDownField的has_one来为小部件选择广告。

这不会解决小部件模块的实际问题,但它可以解决。