Блок не удален из БД


Ситуация: Я разрабатываю пакет для Конкретной версии 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

Печать настроек кэша экран

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

  • При удалении уже опубликованного блока из внешнего интерфейса (как это делает любой пользователь) соответствующая строка в таблице БД не удаляется и никакой метод delete() не является увольнение, ни майна, ни родителей
Author: toesslab.ch, 2014-04-08

1 answers

Итак, наконец, я получил ответ от разработчика из команды C5:

Не ошибка. Блоки по-прежнему хранят свои данные, чтобы их можно было восстановить в случае утверждения и отката предыдущей версии страницы. Блок будет вызывать BlockController::delete() только тогда, когда им больше не нужно хранить свои данные.

Для других разработчиков C5:

Перейдите на Панель мониторинга > Система и настройки > Автоматизированные задания (в разделе "Оптимизация") и запустите задание:

"Удалить старые версии Страниц"

Срабатывает метод удаления ребенка (или родителя). Блок удаляется.

Спасибо Эндрю Эмблеру из команды C5!

 2
Author: toesslab.ch, 2014-07-21 18:47:03