3

SiteTreeドロップダウンにTreeDropdownFieldを使用していますが、これはオプションのフィールドであり、この値をクリア/削除できるようにしたいと考えています。Silverstripeでこれをどのように行うのですか?

    <?php 
class StaticSidebar extends Page {

    static $db = array(
        'ExternalLink' => 'Text',
        'ExternalText' => 'Varchar',
        'ImageLink' => 'Text'
    );

    static $has_one= array(
        "Image" => "Image",
        "InternalLink" => "SiteTree"
    );

    static $allowed_children = array("none");

    public function getCMSFields()
    {
    $fields = parent::getCMSFields();   

    $fields->addFieldToTab("Root.Content.Main", new TextField("ExternalText", "External Text"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TextField("ExternalLink", "External Link"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TreeDropdownField("InternalLinkID", "Internal Link", "SiteTree"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new ImageField("Image"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TextField("ImageLink", "Image Link"), "Content");

        return $fields;
    }       
} 

class StaticSidebar_Controller extends Page_Controller 
{


}
4

4 に答える 4

5
$fields->addFieldToTab('Root.TreeDropdown', new TreeDropdownField('PageID','Link','SiteTree'));
$fields->addFieldToTab('Root.TreeDropdown', new CheckboxField('UnselectTreeDropdown','remove Link'));

私にとってのシンプルで簡単な解決策は、CBフィールドを作成し、CBがチェックされている場合はツリードロップダウンをクリアすることでした。

function onBeforeWrite(){
    if($this->UnselectTreeDropdown)
        $this->PageID= 0;
    parent::onBeforeWrite();
}

編集:現在選択されているものと同じアイテムを選択するだけで、TreeDropdownFieldをクリアすることができます。

于 2013-10-17T13:56:13.683 に答える
2

TreeDropdownFieldではこれは不可能だと思います。

ユーザーが選択できる「None」(特定のページタイプ、たとえばNoPage)というダミーページを作成するなど、少しハッキーなことを行うことができます。次に、onBeforeWriteメソッドを実装して、このページタイプを確認し、「選択したページがそのページタイプの場合、InternalLinkID"フィールドを0に設定します。しかし、それほどエレガントではありません。

もう1つのオプションは、代わりにDropdownFieldを使用することです。これにより、簡単な選択ボックスが表示されます。サイトツリービューを表示するという点ではそれほど良くありませんが、「空」の値を設定できます。

3番目のオプションは、代わりにTreeMultiselectFieldを使用することです。このフィールドでは、複数の選択が可能です(TreeDropdownFieldと同じですが、チェックボックスを使用します)。少なくともこの方法では、すべてのアイテムの選択を解除できます。唯一の問題は、CMSユーザーが複数のアイテムを選択した場合に使用するページです。

編集:SilverStripe 3では、現在選択されている項目を選択することにより、TreeDropdownFieldの選択をクリア/削除することができます。

于 2012-01-31T11:18:44.687 に答える
2

現在選択されているアイテムを再選択するだけで、TreeDropdownFieldをクリアすることができます。

于 2015-01-09T17:02:41.923 に答える
1

TreeDropdownFieldを拡張して、TreeDropdownFieldの選択をクリアできるようにする単純なモジュールを作成しました。githubで入手できます:https ://github.com/richardsjoqvist/silverstripe-optionaltreedropdownfield

于 2013-04-16T10:54:32.537 に答える