gpt4 book ai didi

php - jquery和cakephp中的分页和过滤问题

转载 作者:行者123 更新时间:2023-12-01 06:10:32 26 4
gpt4 key购买 nike

表单中有过滤器。根据按钮的点击,我进行 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 表行,最后将其附加到表体。在这种情况下,我需要分页,任何人都可以建议我实现它的方法。

最佳答案

更好的解决方案是接收整个 HTML-Results-Table 作为渲染的 HTML,而不是 JSON-Data,然后使用 AJAX-Pagination。因此,您需要将结果表和周围的东西(过滤器等)分开。我通常把它分为

  • 包含 Headline、Filterform、... ( buying/purchase_orders ) 的 View
  • 一个元素,包含结果表 ( elements/buying/purchase_orders_filter )

我的方法是使用 jQuery 的 AJAX - 函数。

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

在您的 purchase 中- 在您的 Controller 中,您尝试通过 PassedArgs 获取参数($this->passedArgs['warehouse_id']),...并像往常一样设置分页。

然后您必须告诉 Controller ,如果通过 AJAX 调用操作,则渲染元素而不是 View 。 RequestHandler对此非常方便(添加在函数末尾):

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

还要确保,要将 Filterarguments 设置回元素,您的分页将需要它

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

在您的 purchase_orders 中- 查看、渲染 table-division 内的元素-area (使用 $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 的第一部分,因此您可以从 controller/action/... 开始
    添加<base href="<?php echo $this->base; ?>" />给您layouts/default<head> -部分。非常方便。

  • 确保您有一个空的 ajax.ctp (仅包含 <?php echo this->fetch('content'); ?> )在您的 layouts 中- 目录

希望这有帮助!

关于php - jquery和cakephp中的分页和过滤问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com