在SilverStripe 3.1中的模型管理中添加一个新按钮

时间:2015-08-31 08:03:13

标签: silverstripe

我使用SilverStripe 3.1创建了一个新的模型管理员。

我希望在网格视图顶部的“添加”按钮旁边添加一个按钮。有什么方法可以做到这一点并为此创建一个动作吗?

这是我到目前为止所发现的。

public function getEditForm($id = null, $fields = null)
{
    /**
     * @var $EditForm CMSForm
     */
    $EditForm = parent::getEditForm($id, $fields);

    $EditForm->Fields()->add(LiteralField::create('Sync', '<button><a href="www.google.com"> Sync </a></button>'));

    return $EditForm;
}

我也希望有一个处理程序。

1 个答案:

答案 0 :(得分:1)

所以过了一段时间我才知道我需要做什么。这有三分之一。

第一步: 创建一个新类名称,并使其扩展为GridField_HTMLProvider

class GridFieldSyncButton implements GridField_HTMLProvider
{

    /**
     * @var string
     */
    protected $targetFragment;

    /**
     * @param string $targetFragment
     */
    public function __construct($targetFragment = 'before')
    {
        $this->targetFragment = $targetFragment;
    }

    /**
     * @param $gridField
     * @return array
     */
    public function getHTMLFragments($gridField)
    {
        //-- The link to where the button links
        $data = new ArrayData(array('Sync' => Controller::join_links('link')));

        //--
        return array
        (
            $this->targetFragment => $data->renderWith('GridFieldSyncButton')
        );
    }
}

这里你所做的是创建一个新的网格字段组件,你可以附加

第二步:创建模板

<a href="$Sync" class="ss-ui-button ui-button ui-widget ui-state-default ui-corner-all" data-icon="add">
    Sync Calculators
</a>

<br/><br/>

第三步:将其添加到您的网格

$GridField = $EditForm->Fields()->items[0];
$GridField->getConfig()->addComponent(new GridFieldSyncButton());