2

私が取り組んでいるプロジェクト用にいくつかのウィジェットを作成していますが、ウィジェットはウィジェットの外部から他のクラスにアクセスできないようです。画像クラスと SiteTree クラスの両方に has_one 静的を追加しようとしました (画像の例については、以下の例を参照してください)。cms フィールドを追加しようとすると、同じエラーが発生します: 致命的なエラー: メンバー関数 FormAction() の呼び出し/..../sapphire/forms/FormField.php の 139 行目の非オブジェクト

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


}
4

1 に答える 1

0

このような状況を防ぐために、1 つの Ad から DataObject を作成できます。
Ad DataObjects を編集するための ModelAdmin を提供します。

ウィジェットでは、ウィジェットの広告を選択するために、DropDownField を持つ has_one を使用できます。

これはウィジェットモジュールの実際の問題を解決しませんが、回避します。

于 2013-01-27T16:11:47.470 に答える