Блок не удален из БД
Ситуация: Я разрабатываю пакет для Конкретной версии 5 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
помогает.
Также я пытался вызвать 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
- При удалении уже опубликованного блока из внешнего интерфейса (как это делает любой пользователь) соответствующая строка в таблице БД не удаляется и никакой метод delete() не является увольнение, ни майна, ни родителей
1 answers
Итак, наконец, я получил ответ от разработчика из команды C5:
Не ошибка. Блоки по-прежнему хранят свои данные, чтобы их можно было восстановить в случае утверждения и отката предыдущей версии страницы. Блок будет вызывать BlockController::delete() только тогда, когда им больше не нужно хранить свои данные.
Для других разработчиков C5:
Перейдите на Панель мониторинга > Система и настройки > Автоматизированные задания (в разделе "Оптимизация") и запустите задание:
"Удалить старые версии Страниц"
Срабатывает метод удаления ребенка (или родителя). Блок удаляется.
Спасибо Эндрю Эмблеру из команды C5!