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