将表单操作添加到配置页面

时间:2016-04-01 23:36:03

标签: php forms silverstripe

我一直在努力扩展以向CMS添加一些功能。由于它是CMS的设置,我已将其添加到设置选项卡中。虽然我可以获取值并保存它们,但我需要在页面上执行一个操作来同步系统,我无法调用我的操作,这是我的代码。

var appDelegate: AppDelegate!
appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

player = VLCMediaPlayer()
player.media = VLCMedia(URL: NSURL(string: "http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"))
player.play()
player.drawable = appDelegate.window // or self.view if this code is in a UIViewController

它没有被调用。如果我需要将功能添加到左侧导航而不是部分设置,我也可以使用,但我也尝试过,但成功率更低。是否可以按下按钮调用操作?

1 个答案:

答案 0 :(得分:3)

您需要将$allowed_actionsupdate方法放在CMSSettingsController的扩展名中。您也应该将FormAction放入CMSActions列表中。

以下是我将如何做到这一点:

<强> SiteConfigExtension.php

class SiteConfigExtension extends DataExtension
{
    private static $db = array(
        'Path' => 'Varchar(50)',
    );

    public function updateCMSFields(FieldList $fields)
    {
        $fields->addFieldsToTab('Root.Importer', array(
            ImporterPathField::create('Path', 'Path')->setDescription('Path to area')
        ));
    }

    public function updateCMSActions(FieldList $actions)
    {
        $actions->push(
            FormAction::create('update', 'Synchronise')
        );
    }
}

<强> CMSSettingsControllerExtension.php

class CMSSettingsControllerExtension extends DataExtension
{
    private static $allowed_actions = array (
        'update',
    );

    public function update() {
        SS_Log::add_writer(new SS_LogEmailWriter('test@example.com'), SS_Log::ERR);
    }
}