Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Admin Silverstripe中添加自定义按钮及其功能?_Php_Jquery_Html_Silverstripe - Fatal编程技术网

Php 如何在Admin Silverstripe中添加自定义按钮及其功能?

Php 如何在Admin Silverstripe中添加自定义按钮及其功能?,php,jquery,html,silverstripe,Php,Jquery,Html,Silverstripe,如何在Admin Silverstripe中添加自定义按钮及其功能 请告诉我解决办法 自定义按钮只在一个菜单中添加。与评论中提到的@wmk一样,您可以将GridFieldPrintButton的框架代码作为基础,然后从那里开始。SilverStripe也有一个 我将为您提供一个非常基本的自定义操作提供程序,您可以复制和扩展它来执行您需要的操作,而不是在这里重复教程。虽然您没有注意到按钮的确切结果,但我将提供一个非常通用的类 此代码是@wmk提到的GridFieldPrintButton的精简版本

如何在Admin Silverstripe中添加自定义按钮及其功能

请告诉我解决办法


自定义按钮只在一个菜单中添加。

与评论中提到的@wmk一样,您可以将
GridFieldPrintButton
的框架代码作为基础,然后从那里开始。SilverStripe也有一个

我将为您提供一个非常基本的自定义操作提供程序,您可以复制和扩展它来执行您需要的操作,而不是在这里重复教程。虽然您没有注意到按钮的确切结果,但我将提供一个非常通用的类

此代码是@wmk提到的
GridFieldPrintButton
的精简版本。它既支持按钮本身调用自定义代码,也支持URL

我在代码中提到了我一直使用的“grid print button”,这是为了让您的按钮很好地位于打印旁边,而不是像我在一个旧的3.1站点上测试时那样位于另一行上

具体地说,行
$gridFieldConfig->addComponent(new GridFieldCustomButton())
完成了这项工作,如我上面所示,使用自定义按钮并将其添加到
ModelAdmin
中。您还可以通过在
GridFieldCustomButton
构造函数中提供“buttons before left”作为第一个参数来指定它在
GridField
中的位置

例如,
$gridFieldConfig->addComponent(新的GridFieldCustomButton(“左前按钮”))


有关
GridField
片段的更多信息可以在中找到。

基本上,屏幕截图中的打印按钮就是一个很好的例子:请参阅感谢您的回复@wmk您能告诉我,我必须创建新文件,或者只需要编辑相同的文件来创建新按钮吗?谢谢您的回复。但我问的问题和我问他wynk的方式一样,你能告诉我,我必须创建新文件,或者只需要编辑相同的文件来创建新按钮吗?你必须创建一个新文件,并将其命名为你的php类(这样自动加载程序就可以找到它)我只在一个菜单中创建一个新按钮,即仅在公司中显示见屏幕截图。并在gridfield文件夹中创建一个新文件?此新文件可以存在于任何位置,但不存在(也不应存在于Framework文件夹中)。要为一个ModelAdmin显示,只需将其作为组件添加即可。稍后我会补充我的答案,并提供详细资料。
class GridFieldCustomButton implements GridField_HTMLProvider, GridField_ActionProvider, GridField_URLHandler {

    protected $targetFragment;
    protected $someCustomConstructData;

    //TargetFragment is just for positioning control of the HTML fragment
    //SomeCustomConstructData is just an example of providing some default options into your butotn
    public function __construct($targetFragment = "after", $someCustomConstructData = null) {
        $this->targetFragment = $targetFragment;
        $this->someCustomConstructData = $someCustomConstructData;
    }

    //Generate the HTML fragment for the GridField
    public function getHTMLFragments($gridField) {
        $button = new GridField_FormAction(
            $gridField,
            'custom',
            'Custom Action',
            'custom',
            null
        );
        return array(
            //Note: "grid-print-button" is used here to match the styling of the buttons in ModelAdmin
            $this->targetFragment => '<p class="grid-print-button">' . $button->Field() . '</p>',
        );
    }

    public function getActions($gridField) {
        return array('myCustomAction');
    }

    public function handleAction(GridField $gridField, $actionName, $arguments, $data) {
        if($actionName == 'myCustomAction') {
            return $this->handleMyCustomAction();
        }
    }

    //For accessing the custom action from the URL
    public function getURLHandlers($gridField) {
        return array(
            'myCustomAction' => 'handleMyCustomAction',
        );
    }

    //Handle the custom action, for both the action button and the URL
    public function handleMyCustomAction($gridField, $request = null) {
        //Do your stuff here!
    }
}
class MyCustomAdmin extends ModelAdmin
{
    private static $managed_models = array(
        'MyCustomObject' 
    );

    private static $url_segment = 'custom-admin';
    private static $menu_title = 'All Custom Objects';

    public function getEditForm($ID = null, $Fields = null)
    {
        $form = parent::getEditForm($ID, $Fields);
        $fields = $form->Fields();

        $gridField = $fields->fieldByName('MyCustomObject');
        $gridFieldConfig = $gridField->getConfig();
        $gridFieldConfig->addComponent(new GridFieldCustomButton());

        return $form;
    }
}