【问题标题】:Remove 'Duplicate this page and subpages' functionality in Silverstripe删除 Silverstripe 中的“复制此页面和子页面”功能
【发布时间】:2017-01-05 00:57:19
【问题描述】:

在 Silverstripe 中,如果您右键单击 Sitetree 中的一个页面,您可以复制单个页面或一个页面及其所有子页面。

我们发现用户偶尔会重复包含大量子页面的页面,因此希望通过删除“此页面和子页面”选项或将其仅限于管理员用户来防止这种情况发生。

如何做到这一点?

【问题讨论】:

    标签: javascript php silverstripe


    【解决方案1】:

    将以下代码添加到 page.php 可防止非管理员用户复制页面和子页面。菜单项仍然可见,虽然不是最理想的,但作为快速解决方案已经足够了。

    public function duplicateWithChildren() {
        if(!Permission::check('ADMIN')) {
            throw new ValidationException("You must be logged in as an Admin to duplicate a page and subpages");
        }
        return parent::duplicateWithChildren();
    }
    

    【讨论】:

      【解决方案2】:

      查看 SilverStripe 3.4 中的 code in cms/javascript/CMSMain.Tree.js,目前似乎没有办法将其关闭。

      我们有一个选择是向 CMS 添加一些 CSS 来为每个人隐藏菜单项:

      mysite/css/cms.css

      #vakata-contextmenu a[rel="duplicate"] + ul > li:last-child {
          display: none;
      }
      

      要启用cms.css 文件,我们将以下行添加到config.yml

      mysite/_config/config.yml

      LeftAndMain:
        extra_requirements_css:
          - 'mysite/css/cms.css'
      

      【讨论】:

      • 查看 SiteTree::canAddChildren() 以限制子页面的创建
      • 我们仍然希望能够添加子页面。我们只想删除 duplicate page and supages 选项。使用SiteTree::canAddChildren() 将无法完全创建子页面。
      • 你是对的......然后它有点复杂。尝试在 Page::onBeforeDuplicate() 中抛出异常以限制访问,或重载 SiteTree::duplicateWithChildren()。我同意,我们需要在 SS4 中简化它
      • Page::onBeforeDuplicate 和 SiteTree::duplicateWithChildren 似乎都是可行的解决方案。明天有机会写下最终解决方案的代码。
      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2012-08-22
      • 2017-05-22
      相关资源
      最近更新 更多