CakephpのFormHelperでチェックボックスを複数用意する

Cakephp 2.6で、FormHelperでチェックボックスを複数表示したのでメモ

echo $this->Form->create('sample'); 
$option = ['サンプル', 'サンプル2'];
echo $this->Form->select('item', $option, array('multiple' => 'checkbox'));
echo $this->Form->end(); 

な感じでチェックボックスが複数出せませす

初期値をつけるのなら

$this->data[‘sample’][‘item’][0] = 0;
$this->data[‘sample’][‘item’][1] = 1;

とか$optionのインデックスの値を渡してやればチェックがつきます

$data = $this->Model->find(‘all’)

(int) 0 => array('sample' => array('item' => '1')),
(int) 1 => array('sample' => array('item' => '2')),
(int) 2 => array('sample' => array('item' => '3')),
(int) 3 => array('sample' => array('item' => '4')),

な感じでくるので、

$selected = [];
foreach ($data as $obj) {
    $selected['sample']['item'][] = $obj['sample']['item'];
}

でViewに渡してあげたらチェックセットされました

ECCUBEで決算処理中の注文が勝手に消える

ECCUBE 2.13.3を使い出してから、手で決算処理中に変えた注文が勝手に消えるようになりました

調べてみると 2.13 から自動で消すような処理が入ったっぽいです
運用手順上、これは困るので処理を止めました

パラメータの
PENDING_ORDER_CANCEL_FLAG
を false にすればいいようです

システム設定>パラメータ
を見たけど、存在しない..のでソースコードで修正

$ vim data/mtb_constants_init.php

PENDING_ORDER_CANCEL_FLAG
を false に変更しました

data/cache
の中身を削除して、対応完了、消されなくなりました

Cakephpでajaxを使って非同期にすっきりpostする

CakephpでFormの値をjQueryを使って非同期にpostの値を渡してみました

まずViewでformをつくります

echo $this->Form->create('sample');
echo $this->Form->checkbox('test');
echo 
// などなど..
echo $this->Form->end();

formのsubmitイベントで、phpへpostします
jQueryのserializeをつかって、formの値をクエリ文字列にします
.serialize() | jQuery API Documentation

$('form').on('submit', function() {                                                               
    event.preventDefault();                                                                       
    event.stopPropagation();                                                                      

    $.ajax({                                                                                      
        type: 'POST',                                                                             
        url: '<?php echo $this->Html->Url(array('action'=>'save'));?>',                   
        data: { data: $(this).serialize() },                                                      
    }).done(function(data) {
        // 後処理                                                                      
    });                                                                                           
});     

コントローラーのsaveアクションへアクセス
これで
$this->data
にふつうのformのpostした値が入ってきます

public function save()
{
    $this->layout = null;
    parse_str($this->data);

    $ret = $this->SomeModel->saveAll($data);
    // などなど..
}

PHP: parse_str – Manual
で、クエリ文字列を変数に落とし込めばそのまま
$dataにまるごとデータが入ってきます
(jQueryでdata: で渡したので)

だいぶCakeらしくできた気がします

ECCUBEで削除した注文を復活させる

ECCUBE 2.13.3を使っています
削除した注文を復活させたいことがあったのでやってみました

バックアップ取って、データベースを直接触りました
注文の削除は論理削除(レコード削除じゃなく、フラグ立てるだけ)のようです

order_idを指定して、dtb_orderのdel_flgを0に変更してやれば復活

UPDATE  dtb_order SET del_flg = 0 WHERE order_id = 1;

これでいいはず..
自己責任でお願いします

プラグインがあるみたいで、こっちのほうがいいかもしれません(試してません)
削除された受注を復活 / ECサイト構築・リニューアルは「ECオープンプラットフォームEC-CUBE」