2014-04-08 3 views
3

상황 : 콘크리트 5 버전 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을 '무시 delete-method가 도움이됩니다.

나는 끝 대신 beginnig에서 parent::delete();을 호출하려고했지만 차이점은 없습니다. ,

/** 
* 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(); 
      } 
     } 
    } 

UPDATE 1

캐시 설정의 인쇄 화면

enter image description here

을 그리고 :

UPDATE 부모는 Concrete5_Library_BlockController에서 방법을 삭제 그냥 말해, 더 이상의 정보를 정기적으로 또는 코드가 필요한 경우 어쩌면 그것은 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

제거 /도 도움이되지 않는 패키지의 설치합니다. UPDATE 3

  • 프론트 엔드 (모든 사용자가하는 것처럼)에서 이미 게시 된 블록을 삭제하면 DB 테이블의 해당 행이 을 삭제되지 않습니다

    없이 삭제() 방법은도 myne도 발사되는 부모의

+0

거기에 C5 개발자가 없습니까? CMS를 바꾸라고 말해주는 침묵의 방법입니까? –

답변

2

그래서 마지막으로, 나는 C5-팀의 개발자의 응답을 가지고 :

0123을

버그가 아닙니다.블록은 여전히 ​​데이터를 저장하므로 페이지의 이전 버전이 승인되면 으로 복원되고 으로 롤백됩니다. Block의 경우에만 이 더 이상 데이터를 보관할 필요가 없을 때 BlockController :: delete()를 호출합니다. 다른 C5 개발자에게

:

이동> 자동화 된 작업 ("최적화"아래)> 시스템 & 설정을 대시 보드 및 작업 실행 :

"올드 페이지 버전 제거"

을 자녀 (또는 부모) 삭제 방법이 실행 중입니다. 블록이 삭제됩니다.

Thx to Andrew Embler from the C5-Team!

관련 문제