情况: 我正在为 Concrete 5 Version 5.6.3.1 开发一个软件包。
问题:
这是我的控制器
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
缓存设置打印屏幕
而且,也许有帮助,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
答案 0 :(得分:2)
最后,我得到了C5团队开发人员的回答:
不是错误。块仍然存储它们的数据,以便它们可以存储 在以前版本的页面获得批准的情况下恢复 回到了。 Block's只会在调用时调用BlockController :: delete() 他们不再需要保持他们的数据。
对于其他C5开发者:
转到信息中心&gt;系统&amp;设置&gt;自动化作业(在“优化”下)并运行作业:
“删除旧版本页面”
孩子的(或父母的)删除方法正在解雇。 该块被删除。
来自C5团队的Andrew Embler!