阻止未从DB中删除

时间:2014-04-08 06:10:32

标签: php block override concrete5

情况: 我正在为 Concrete 5 Version 5.6.3.1 开发一个软件包。

问题:

  • 从前端删除已发布的块时(如同任何一个) 用户确实),不删除DB表中对应的行。
  • 删除块而不发布时,它可以正常工作。

这是我的控制器

class PcShooterChShowSomeThingsBlockController extends Concrete5_Controller_Block_Content {
    protected $btName = "Show Some Things";
    protected $btTable = 'btPcShooterChShowSomeThings';
    protected $btInterfaceWidth = 500;
    protected $btInterfaceHeight = 400;
    protected $btWrapperClass = 'ccm-ui';

    //...
    public $pkgHandle = 'pc_shooter_ch_show_some_things';

    //...



/**
 * --------------- Overrides ----------------------
 */

    public function delete() {
        $db = Loader::db();
        //Log::addEntry('DELETE FROM ' . $this->btTable . ' WHERE bID = ' . $this->bID);
        $db->Execute('DELETE FROM ' . $this->btTable . ' WHERE bID = ' . $this->bID);
        parent::delete();
    }
}

块本身运行良好,包也是如此。它根本不是我的第一个包,也是按照C5的建议开发块/包。

我开始思考,这是一个错误,但在我在C5上发布内容之前,我很想听听其他C5开发人员...

在C5的论坛中,它说,覆盖Concrete5_Controller_Block_Content的删除方法会有所帮助。

此外,我尝试在startnig而不是结束时调用parent::delete();,但没有区别。

更新 父母从Concrete5_Library_BlockController

删除方法
/**
 * Automatically run when a block is deleted. This removes the special data
 * from the block's specific database table. If a block needs to do more 
 * than this this method should be overridden.
 * @return $void
 */
    public function delete() {
        if ($this->bID > 0) {
            if ($this->btTable) {
                $ni = new BlockRecord($this->btTable);
                $ni->bID = $this->bID;
                $ni->Load('bID=' . $this->bID);
                $ni->delete();
            }
        }
    }

更新1

缓存设置打印屏幕

enter image description here

而且,也许有帮助,db.xml

<?xml version="1.0"?>
<schema version="0.3">
    <table name="btPcShooterChShowSomeThings">
        <field name="bID" type="I">
            <key />
            <unsigned />
        </field>
        <field name="desc_true" type="I2">
        </field>
        <field name="block_css_style" type="C" size="255">
        </field>
        <field name="block_css_id" type="C" size="255">
        </field>
        <field name="block_css_class" type="C" size="255">
        </field>
        <field name="title_css_class" type="C" size="255">
        </field>
        <field name="desc_css_class" type="C" size="255">
        </field>
    </table>
</schema>

如果您需要任何进一步的信息或代码,请告诉我。我很乐意得到一些提示。

更新2

卸载/安装软件包也无济于事。

更新3

  • 从前端删除已发布的块时(如同任何一个) 用户确实),不删除DB表中的相应行 并没有删除delete()方法,既不是myne也不是父亲的

1 个答案:

答案 0 :(得分:2)

最后,我得到了C5团队开发人员的回答:

  

不是错误。块仍然存储它们的数据,以便它们可以存储   在以前版本的页面获得批准的情况下恢复   回到了。 Block's只会在调用时调用BlockController :: delete()   他们不再需要保持他们的数据。

对于其他C5开发者:

转到信息中心&gt;系统&amp;设置&gt;自动化作业(在“优化”下)并运行作业:

“删除旧版本页面”

孩子的(或父母的)删除方法正在解雇。 该块被删除。

来自C5团队的Andrew Embler