【问题标题】:CakePHP: variables are cleared when next/privous is clickedCakePHP:单击下一个/私有时清除变量
【发布时间】:2012-04-20 21:58:56
【问题描述】:

我有一个来自控制器的操作,它通过$this->set('found_products', $data); 提供结果变量。查看页面products.ctp分为两部分:

  1. 在顶部,为视图设置了一个用户输入字符串以搜索$found_products 的表单。

  2. 在其下方,仅当设置了$found_products 时才会显示分页结果。即if (isset($found_products)) 为真。

当if (isset($found_products)) 为真时,我会在表单下方显示第一页,其中搜索字符串已经在文本框中。这个网址是myapp/controller/products。

当我进入下一页时出现问题。 URL 变为myapp/controller/action/products:2,并且myapp/controller/products 下使用的变量都不存在。看起来移动到新页面会清除所有变量。下面是我用于分页的代码,我没有为此编写重新路由规则。我该如何解决这个问题?

        <div class="paging">
            <?php echo $this->Paginator->prev('<< ' . __('previous', true), array(), null, array('class'=>'disabled'));?>
            <?php echo $this->Paginator->numbers();?>        
            <?php echo $this->Paginator->next(__('next', true) . ' >>', array(), null, array('class' => 'disabled'));?>
        </div>

我尝试在操作 (products) 中使用 $_SESSION 解决此问题,并将其设置为视图,但是当我这样做时,`$this->Paginator' 不再起作用。

【问题讨论】:

    标签: cakephp paginator


    【解决方案1】:

    您可以使用 $this->Paginator-> 选项来保留分页链接中传递的参数。试试这个代码

    <div class="paging">
        <?php $this->Paginator->options(array('url' => $this->passedArgs)); ?>
        <?php echo $this->Paginator->prev('<< ' . __('previous', true), array(), null, array('class'=>'disabled'));?>
        <?php echo $this->Paginator->numbers();?>        
        <?php echo $this->Paginator->next(__('next', true) . ' >>', array(), null, array('class' => 'disabled'));?>
    </div>
    

    【讨论】:

    • 这似乎不起作用。在我的第一页分页结果中,URL 是myapp/controller/products,并且这个 URL 没有参数。 $this-&gt;passArgs 也是空的。。你还有什么想法吗?
    • 我想您忘了提及您用于提交表单的方法。如果您使用“POST”,则此方法将不起作用,因为搜索参数在 url 字符串中不可用。上述解决方案适用于“GET”方法。但是如果你想使用'POST',那么你必须使用javascript来让每个分页链接提交一个带有搜索字符串和页码的表单。但是恕我直言,您应该考虑使用“GET”方法,因为它也可以让您将结果保存为书签。
    • 嗯..你是对的。谢谢!我现在更容易使用 GET。稍后我将详细介绍使用 POST 并进行重定向,但我终于想出了如何使这项工作。我确实将选项数组从您那里的内容更改为 --> $this-&gt;Paginator-&gt;options['url']['?'] = $this-&gt;passedArgs;,以便下一页遵循移动到下一页或上一页所需的 URL。
    • 但是,列排序还没有开始工作。我正在调查。
    猜你喜欢
    • 2016-09-11
    • 1970-01-01
    • 2022-11-01
    • 2017-06-23
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    相关资源
    最近更新 更多