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

2024-02-20

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

请告诉我解决方案。

Custom Button add only in one menu.


就像评论中提到的@wmk一样,您可以直接获取框架代码GridFieldPrintButton作为基地并从那里出发。 SilverStripe 还有一个创建自定义的基本教程ActionProvider https://docs.silverstripe.org/en/3.1/developer_guides/forms/how_tos/create_a_gridfield_actionprovider/.

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

该代码是以下代码的精简版本GridFieldPrintButton@wmk 提到的。它支持按钮本身调用自定义代码以及 URL。

我在代码中注意到我保留了“网格打印按钮”的引用,这是为了使您的按钮很好地位于打印旁边,而不是可能位于另一行(就像我在测试中所做的那样)我建立的较旧的 3.1 网站)。

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!
    }
}

继续评论中的讨论,您将需要修改您的自定义ModelAdmin向其添加新组件GridField.

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;
    }
}

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

eg. $gridFieldConfig->addComponent(new GridFieldCustomButton("buttons-before-left"))

有关更多信息GridField片段可以在SilverStripe 开发人员文档 https://docs.silverstripe.org/en/3.1/developer_guides/forms/field_types/gridfield/#flexible-area-assignment-through-fragments.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Admin Silverstripe 中添加自定义按钮及其功能? 的相关文章

  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • HTML 中部分着色的阿拉伯语单词

    我不会说阿拉伯语 但我需要我们网站上对阿拉伯语的具体支持 我需要将部分阿拉伯语单词放在 span 与单词其他部分的风格不同 当我输入两个字符时 and 它们被组合成word 但是当我使用 HTML 标记时 span span 这些字母在输出
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在
  • jQuery 获取元素内的鼠标位置

    我希望制作一个控件 用户可以在 div 内单击 然后拖动鼠标 然后松开鼠标以指示他们想要的内容有多长 这是针对日历控件的 因此用户将指示特定事件的时间长度 看起来最好的方法是在父 div 上注册一个 mousedown 事件 而父 div
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 为什么 jquery 没有检测到单选按钮未被选中的情况? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery radioButton change 在取消选择期间不会触发 https stackoverflow com questions 5176803 jquery radiobutton c
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • FireFox 中的“contenteditable = true”高度问题

    当有空的时候div with contenteditable true CSS contenteditable true border 1px dashed dedede padding 3px HTML div div 在 IE 和 Ch

随机推荐

  • 将所有数据从一个订阅传输到另一订阅

    如何将我的所有云服务 数据库 虚拟机和 Blob 存储转移到我新订阅的另一个订阅 有没有更简单的方法 更新 2016 年 6 月 6 日 这个答案相当旧了 必须寻求 Azure 支持才能将数据从一项订阅传输到另一项订阅 此外 Azure 门
  • 如何从 bigcommerce API(地面、快递)获取订单“送货方式”?

    如何从 bigcommerce API 地面 快递 获取订单 送货方式 客户下订单时选择的运输方式 Thanks 参考这个page https developer bigcommerce com api stores v2 orders s
  • ECMAScript 规范:规范中问号的含义

    我见过很多这样的情况Let value be Return sth在规范中 example https tc39 github io ecma262 sec tonumber 有谁知道 的含义是什么 From 算法约定 http www e
  • 在 C# 中从字符串调用函数

    我知道在 php 中你可以进行如下调用 function name hello function name function hello echo hello 这在 Net 中可能吗 是的 您可以使用反射 像这样的事情 Type thisT
  • 同一页面上有多个 iScroll 元素

    我正在使用 jQtouch 和 iScroll 制作一个移动网站 我不想使用 iScroll 获得多个可滚动区域 但只有列表可以使用 iScroll 我尝试过这个 var scroll1 scroll2 function loaded sc
  • Spark 抛出 java.util.NoSuchElementException:找不到密钥:67

    在 Zeppelin 中运行 Spark 平分 kmmeans 算法 I transform my data using the TF IDF algorithm val idf new IDF minFreq fit data val h
  • 在 Python OpenCV 4.2.0(2020 年)中使用 SIFT(或替代方案)

    我正在尝试使用 SIFT 与 Python 进行特征检测 但它不再是 OpenCV 的一部分orOpenCV 贡献 使用 OpenCV opencv contrib python 两个版本 4 2 0 34 这个问题的最新版本 我得到 gt
  • MPI_Bsend 的缺点?

    我最近遇到了一个死锁 我可以通过使用来解决MPI Bsend代替MPI Send 如果我理解正确的话 MPI Bsend 是一个非阻塞发送 并且可以安全地修改我发送的内容 而不必担心发送操作何时完成 所以 double x 1 MPI Bs
  • 在关闭之前的 AlertViewController 后呈现新的 AlertViewController - Swift

    我试图在用户选择第一个 AlertViewController 中的操作后呈现新警报 请在下面找到我的代码 IBAction func forgotPassword sender AnyObject 1 Create the alert c
  • Firestore 规则(判断真假)

    在 firestore 中你可以有如下规则 service cloud firestore match databases database documents match products document allow read writ
  • 在 C# 中将一组成员标记为私有/公共

    在 C 类声明中 您可以将一组成员标记为私有或公共 例如 private int x double y 好像c 中没有办法做到这一点 我错了吗 不 您不能在 C 中执行此操作 最好的情况下 你可以对成员使用默认的可见性 即私有的 而不是使用
  • 为什么以及何时需要多个构建代理?

    考虑 TFS 2010 的构建控制器拥有 1 个以上构建代理的能力 由于构建对于团队 环境来说是一个主观主题 因此请考虑在提交 签入时执行构建的环境 每个项目集合将包含 10 多个团队项目 但一天内可能只致力于其中 1 或 2 个 TFS
  • 改造覆盖端点

    我可以覆盖设置的端点路径吗RestAdapter建造者 假设我有 20 个端点使用相同的基本 URL 但有 1 个端点不使用相同的基本 URL 我想调用 setEndpoint 供所有 20 个使用 但在我需要使用不同基本 URL 的一种情
  • 在有源的情况下使用 HTML 脚本标签进行编码

    我注意到标签不允许您在其中使用 JavaScript 例如 这不起作用 也不会在 FireBug 中抛出错误 为什么会发生这种情况 为什么我们必须添加额外的
  • 使 qhull/qvoronoi 将 Voronoi 限制为凸包或给定多边形

    平面 Voronoi 曲面细分将始终具有无界多边形 无限区域 我如何告诉 qhull voronoi 将曲面细分与其中之一相交 原始点的凸包 或者带有我明确的多边形 指定 可能是一个矩形 具体例子 https github com barr
  • 如何在日期之间设置范围并且仅显示某些特定行

    下面的代码工作正常 请注意 我有一个名为f3然后我就这么做了Output生成从以下位置获得的所有数据f3 一切都好 但现在我的想法是在日期之间设定一个范围 并且只指定一些特定的行Output appear Example 我想看看Time获
  • 解析从请求发布中收到的多部分/表单数据

    我正在使用请求库编写 Web 服务客户端 我正在获取包含文件和文本 json 的 multipart form data 中的数据 我不知道如何解析它 是否有一个合适的库来解析 python 中的多部分 表单数据格式 或者我应该自己编写解析
  • 在 Dockerfile 中使用“pyenv activate”

    我正在尝试在 Dockerfile 中安装和设置 pyenv FROM nvidia cuda 8 0 cudnn5 devel ubuntu16 04 这是 Dockerfile 的后半部分 前半部分只是安装依赖项 RUN useradd
  • iOS开发中如何彻底去除bundle id?

    如何重复使用为应用程序 ID 创建的捆绑包 ID 我什至删除了关联的应用程序ID 但捆绑包ID仍然不可用 是否说捆绑包ID一旦创建就无法完全删除 捆绑包 ID 无法准确地重复使用 例如com abc xxx只能使用一次 如果您从一个帐户创建
  • 如何在 Admin Silverstripe 中添加自定义按钮及其功能?

    如何在 Admin Silverstripe 中添加自定义按钮及其功能 请告诉我解决方案 Custom Button add only in one menu 就像评论中提到的 wmk一样 您可以直接获取框架代码GridFieldPrint