3

私のテーブルには、各行にチェックボックスのある列があります。選択したすべてのアイテムを削除できるようにしたい。このウェブサイトからコードを見つけて、自分のものに合わせて修正しました。 リンク

チェックボックスのWebサイトの命名規則に従いました。次のとおりです。

<td>  <?php echo $this->Form->checkbox('LocalClocks.id.['.$LocalClock['LocalClock']['id'].']', array('value' => $LocalClock['LocalClock']['id'])); ?></td>

これは、コントローラーの deleteSelected() 関数のコードです。

    public function deleteSelected()
    {
        foreach($this->data['LocalClocks'] as $key => $value)
        {
            if($value != 0)
            {
                $this->LocalClock->del($value);
            }
        }
        $this->redirect($this->referer());
    }

これは実際の削除ボタンのコードです (必要な場合に備えて):

<?php echo $this->Form->postLink('Delete Selected', array('action' => 'deleteSelected'), array('confirm' => 'Are you sure?')); ?>

問題と思われることがいくつかあります。

  1. コードはケーキの古いバージョン用に書かれています.Webサイトには1.3と書かれていたと思いますが、既存のコードを更新/修正して機能させるにはどうすればよいかわかりません。
  2. 削除ボタンは、ブログチュートリアルの Cakephp の Web サイトにあるものと同じです。私が行った唯一の変更は、削除するアイテムのIDを削除することでした。これは、単一のアイテムではなく複数のアイテムを削除するためです。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

5

チェックボックスの入力は次のようになります

echo $this->Form->checkbox('LocalClocks.'.$LocalClock['LocalClock']['id'], array(
  'value' => $LocalClock['LocalClock']['id'],
  'hiddenField' => false
));

これにより、次のようなデータ配列が作成されます

array(
  'LocalClocks' => array(
    1 => 1,
    42 => 1
  )
);

隠しフィールドを使用していないため、チェックされていないものはデータ配列から省略されます。最後に、アクションをいくつか変更します

public function deleteSelected()
{
    foreach($this->request->data['LocalClocks'] as $key => $value)
    {
       $this->LocalClock->delete($key);
    }
    $this->redirect($this->referer());
}

コールバックを実行するため、を使用Model::delete()することを好みますが、そうではありません。Model::deleteAll()deleteAll

最後に、リンクは実際には送信ボタンになります。これにより、データがコントローラーに POST されます。

echo $this->Form->end('Submit');

ajax を使用する場合は、代わりにJsHelperを使用して送信してください。#mytable以下は、アクションの結果 (この場合はリダイレクト先のリファラー) でdom 要素を更新する Ajax 送信を作成します。

echo $this->Js->submit('Submit', array(
  'update' => '#mytable'
));
echo $this->Form->end();
于 2012-06-21T14:08:17.757 に答える