SilverStripe按代码

时间:2016-12-01 15:19:02

标签: php silverstripe

这似乎是SS的一个难点。

我正在尝试使用以下代码删除页面:$page->doArchive();

但是,这会在SiteTree菜单中留下页面的重影,并带有“恢复草稿”选项。然而,这会破坏我的模块的功能,根本不需要。

如何彻底删除网页以便用户无法查看/恢复该网页?

编辑:也尝试过:

DB::query("DELETE FROM SomePage WHERE ForeignID = {$this->ID}");
DB::query("DELETE FROM SomePage_Live WHERE ForeignID = {$this->ID}");
DB::query("DELETE FROM SomePage_versions WHERE ForeignID = {$this->ID}");

甚至手动清除MySQL表(phpmyadmin)和 STILL ,它显示页面(在菜单中划掉)并带有恢复草稿选项。

EDIT2:这段凌乱的代码将删除所有记录并删除恢复草稿的功能。但是,已删除的页面图标仍显示在网络树中,并在刷新后消失。

DB::query("DELETE FROM SomePage WHERE ForeignID = {$this->ID}");
DB::query("DELETE FROM SomePage_Live WHERE ForeignID = {$this->ID}");
DB::query("DELETE FROM SomePage_versions WHERE ForeignID = {$this->ID}");
DB::query("DELETE FROM SomePage_versions WHERE ForeignID = 0");

DB::query("DELETE FROM SiteTree WHERE ID = {$pageID}");
DB::query("DELETE FROM SiteTree_Live WHERE ID = {$pageID}");
DB::query("DELETE FROM SiteTree_versions WHERE RecordID = {$pageID}");

问题:如何阻止已删除页面图标的“闪烁”?

1 个答案:

答案 0 :(得分:3)

SilverStripe无法删除,它使用归档,您可以通过$page->doArchive();进行归档。我想如果你正在编写一个模块,你绝对应该使用这种删除页面的方式,因为它是人们所期望的。除非你的模块是关于从数据库中完全删除记录......

如果您确实需要清理数据库并希望手动执行操作,则还需要挂钩到站点树JavaScript(缠绕),以便在删除页面后正确刷新站点树。

<强>更新

这里有一小段代码,您可以如何在某些或所有树节点上强制更新。

创建自定义缠绕脚本,让它保存在mysite/javascript/tree-hook.js

(function($) {
    $(function(){
        // ss.tree "namespace" is needed to be able to access the tree methods
        $.entwine('ss.tree', function($){
            // Match your custom button selector
            $(".myCustomButton").entwine({
                onmatch: function () {
                    this._super();
                    // bind a namespaced click handler (for easy removal)
                    $(this).on("click.treeHook", function (e) {
                        e.preventDefault();
                        e.stopImmediatePropagation();
                        // pass in all the tree node IDs you need to update
                        $(".cms-tree").updateNodesFromServer([/* IDs */]);
                    });
                },
                onunmatch: function () {
                    this._super();
                    $(this).off("click.treeHook");
                }
            })
        });
    });
})(jQuery);

然后将以下内容添加到config.yml

,将自定义JS加载到CMS中
LeftAndMain:
  extra_requirements_javascript:
    - 'mysite/javascript/tree-hook.js'

有关缠绕的更多信息,请考虑查看此beginners guidegithub repository