2

フォームにはフィルターがあります。ボタンのクリックに基づいて、ajax 呼び出しを行います。

$.getJSON('<?php echo $this->Html->url(array('controller'=>'buying', 'action'=>'purchase_orders')); ?>/'+warehouse_id+'/'+status+'/'+start_date+'/'+end_date+'/'+supplier_id, 
            function(data) {
                var table_row = '';
                $.each(data, function(key,value){ 
                    table_row += '<tr><td class="sl"><input name="checkboxlist" type="checkbox" class="select" value="'+value.PurchaseOrder.id+'"/></td><td class="name"><a href="/snow_white/buying/view_purchase_order/'+value.PurchaseOrder.id+'">'+value.PurchaseOrder.order_no+'</a></td><td class="description">'+value.PurchaseOrder.order_date+'</td><td class="description">'+value.Supplier.company_name+'</td><td class="description">'+value.Warehouse.name+'</td><td class="align-center actions"><a class="btn btn-small edit-po" href="/snow_white/buying/edit_purchase_order/'+value.PurchaseOrder.id+'"><i class="icon-edit"></i></a><a class="btn btn-small delete-po" href="#"><i class="icon-trash"></i></a></td></tr>';
                });
                $('#table-body').empty(table_row);
                $('#table-body').append(table_row);
                $('#table-division').show();
            });

この AJAX 呼び出しは、行を JSON 形式で返します。JSON 形式を使用して、JQUERY スクリプトで $.each を使用し、反復して HTML テーブル行を取得し、最後にそれをテーブル本体に追加します。この状況では、ページネーションが必要です。誰かがそれを達成する方法を提案できますか。

4

1 に答える 1

-1

そのためのより良い解決策は、JSON-Data ではなく、レンダリングされた HTML として HTML-Results-Table 全体を受け取り、後で AJAX-Pagination を使用することです。したがって、結果テーブルとその周辺のもの (フィルタなど) を分離する必要があります。私は通常、次のように分割します。

  • 見出し、フィルターフォームなどを含むビュー ( buying/purchase_orders)
  • 結果表を含む要素 ( elements/buying/purchase_orders_filter)

それを行う私の方法は、jQuery の AJAX - Function を使用することです。

$.ajax({
    type:'get',
    url: $('base').attr('href') + 'buying/purchase_orders/warhouse_id:'+warehouse_id+'/status:'+status ...
    success: function(html){
        $('#table-division').html(html);
    }
  });

コントローラーのpurchase-Function で、 passedArgs ( $this->passedArgs['warehouse_id']),... を介してパラメーターを取得し、通常どおりページネーションを設定しようとします。

次に、コントローラーに、アクションが AJAX 経由で呼び出された場合、ビューではなく要素がレンダリングされることを伝える必要があります。はそのRequestHandlerために非常に便利です(関数の最後に追加されます):

if($this->RequestHandler->isAjax()) {
      $this->autoRender = false;
      $this->render('/elements/buying/purchase_orders_filter');
}

また、Filterarguments を Element に戻すには、ページネーションに必要になることを確認してください。

$this->set('warehouse_id',$this->passedArgs['warehouse_id']);
$this->set('status',$this->passedArgs['status']);
.
.

purchase_orders- ビューで、( を使用して) -area 内の要素をレンダリングし、起動table-division時にフィルター処理$this->element()されていないリストが表示されるようにします。

AJAX ページネーションを有効にするには、次の行を追加します。

<?php $paginator->options(array(
'update'=>'table-division', 
'url' => array(
    'controller'=>'buying', 
    'action'=>'purchase_orders',
    'warehouse_id' => $warehouse_id, 
    .
    .
))); ?>

テーブルがページ分割されたときにデータをフィルタリングしたままにするために、ここにフィルター引数を追加する必要があります。

いくつか残っています:

  • $('base').attr('href')は AJAX リクエストに役立ちます。URL の最初の部分を提供するので、-Sectionにcontroller/action/...
    追加<base href="<?php echo $this->base; ?>" />することから始めることができます。それはかなり便利です。layouts/default<head>

  • - ディレクトリに空ajax.ctp(のみを含む<?php echo this->fetch('content'); ?>)があることを確認してくださいlayouts

お役に立てれば!

于 2013-06-20T07:50:04.967 に答える