2017-09-20 8 views
0

私はOpenCartで作業しています。リストとフォーム.tplを一緒に使用すると、フォームは新しいレコードを作成し、その情報がリストに表示されます。このリストには、編集機能を動作させるための各レコード(編集、削除、アーカイブ)のオプションが表示されます。特定の行に対して編集をクリックすると、フォームには既に入力済みの入力情報が表示されます。その後、ユーザによって更新されることができる。現在のところ、編集をクリックするとフォームが起動せず、現在のレコードが編集されますが、ゼロと空の列が編集されます。フォームに戻って起動する方法がわからないそして、表示され、ユーザー情報その動的に設定されたリストのレコードを更新する

モデル:

public function editCampaign($campaign_id, $data) { 
     $this->db->query("UPDATE " . DB_PREFIX . "campaigns SET campaign_name = '" . $this->db->escape($data['campaign_name']) . "', campaign_giving_goal = '" . (float)$data['campaign_giving_goal'] . "', campaign_giving_count_goal = '" . (float)$data['campaign_giving_count_goal'] . "', campaign_owner = '" . $data['campaign_owner'] . "', date_beginning = '" . $this->db->escape($data['date_beginning']) . "', date_ending = '" . $this->db->escape($data['date_ending']) ."' WHERE campaign_id = '" . (int)$campaign_id . "'"); 

    } 

コントローラー:

public function edit() { 
     $this->load->language('campaigns/campaign'); 

     $this->document->setTitle($this->language->get('heading_title')); 

     $this->load->model('campaigns/campaign'); 

     if (isset($this->request->post['editButton'])) { 
       $campaign_id = $this->request->post['editButton']; 
      $this->model_campaigns_campaign->editCampaign($campaign_id); 

      $this->session->data['success'] = $this->language->get('text_success'); 



      $this->response->redirect($this->url->link('campaigns/campaign', 'token=' . $this->session->data['token'] . $url, true)); 
     } 

     $this->getForm(); 
    } 

ビュー:

<form method="post" action="" enctype="multipart/form-data" id="form-order"> 

      <div class="table-responsive"> 
      <table class="table" id="campaign-table"> 
       <thead> 
       <tr> 
       <td><?php echo $column_campaign_id; ?></td> 
        <td><?php echo $column_campaign; ?></td> 
        <td><?php echo $column_giving_goal; ?></td> 
        <td><?php echo $column_giving_count_goal; ?></td> 
        <td><?php echo $column_owner; ?></td> 
        <td></td> 
       </tr> 
       </thead> 
       <tbody> 
       <?php if ($orders) { ?> 
       <?php foreach ($orders as $order) { ?> 
       <tr class="campaign-list"> 

        <td><?php echo $order['campaign_id']; ?></td> 
        <td><?php echo $order['campaign_name']; ?></td> 
        <td><?php echo $order['campaign_giving_goal']; ?></td> 
        <td><?php echo $order['campaign_giving_count_goal']; ?></td> 
        <td><?php echo $order['campaign_owner']; ?></td> 
        <td> 
        <div class="dropdown"> 
         <button class="campaign-dropdown-btn dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"><?php echo $text_campaign_dropdown;?><span class="caret"></span></button> 
         <ul class="campaign-list-more dropdown-menu"> 
         <li class="campaign-dropdown-list"><button type="submit" id="campaign-del" name="editButton" value="<?php echo $order['campaign_id']; ?>" onclick="javascript:changeFormAction('<?php echo $edit; ?>');"> 
          <?php echo $button_edit; ?> 
         </button></li> 
         <li class="campaign-dropdown-list">Archive</li> 
         <li class="campaign-dropdown-list"> 
          <button type="submit" id="campaign-del" name="deleteButton" value="<?php echo $order['campaign_id']; ?>" onclick="javascript:changeFormAction('<?php echo $delete; ?>');"> 
           <?php echo $button_delete; ?> 
          </button> 
         </li> 
         </ul> 
        </div> 
        </td> 

       </tr> 
       <?php } ?> 
       <?php } else { ?> 
       <tr> 
        <td class="text-center" colspan="8"><?php echo $text_no_results; ?></td> 
       </tr> 
       <?php } ?> 
       </tbody> 
      </table> 
      </div> 
     </form> 

JS:

<script type="text/javascript"> 

    function changeFormAction(action) { 
     var form = document.getElementById('form-order'); 
     form.action = action; 
     return true; 
    } 
</script> 

答えて

1
  1. タイプtype="button"の編集ボタンを作成して、送信しないようにします。
  2. これをクリックすると、コントローラーのアクションedit()にタイプPOSTのajax要求がアクティブになり、キャンペーン idが要求値として渡されます。
  3. edit()は、 対応するレコードの詳細をdbから取得し、レンダリングされたform.tplの内容(詳細が渡されている)を返すことのみに責任があります。
  4. レンダリングされたフォームの内容は、その後、(successコールバック内部)Ajaxオブジェクト によって読み取られ、どこか 内部、前、またはcampaign-tableリスト後形 容器(等<div class="form-container"></div>)に書き込まれます。代わりに、各レコードに フォームコンテナを定義し、投稿されたキャンペーンIDが属する form.tplのコンテンツをajaxに入力させることができます。ユーザーが完成 - - update()という名前のコントローラ アクションへ
  5. フォームは、独自の送信ボタンを フォームフィールドの値を送信します、(そのvalue属性でキャンペーンIDを持つ)updateButton という名前になります。もちろん、キャンペーンIDは に送信されます。
  6. update()アクションは、POSTで渡されたすべての値を読み取り、 データベースのレコードを更新します。最後に、フォームの有無にかかわらず、 キャンペーンリストを再送する必要があります。つまり、 をどのように表示するかを再表示し、対応する「更新 成功/失敗」メッセージです。

幸運!

関連する問題