更改Paginator排序模板CakePHP 3

时间:2015-12-14 09:39:34

标签: cakephp cakephp-3.0

我尝试在<option> HTML标记内使用 CakePHP 3 Paginator排序,但这会输出value atributte中的链接,如下所示:

<option> value atributte中的whith paginator:

<select name="products-order" class="form-control products-order inline-pagination-menu" onchange="redirect(this)">
    <option value="<?= $this->Paginator->sort('product_name') ?>">A - Z</option>
    <option value="<?= $this->Paginator->sort('product_name', null, ['direction' => 'desc']) ?>">Z - A</option>
    <option value="<?= $this->Paginator->sort('price') ?>">Menor preço</option>
    <option value="<?= $this->Paginator->sort('price', null, ['direction' => 'desc']) ?>">Maior preço</option>
</select>

输出

<select name="products-order" class="form-control products-order inline-pagination-menu" onchange="redirect(this)">
    <option value="<a href="/posts/index?page=1&amp;sort=user_id&amp;direction=asc">User Id</a>">A - Z</option>
</select>

我尝试更改模板,但这并没有奏效(被抛出:在$this->Paginator->templates中调用未定义的方法)我在下面尝试:

将此付诸实践(clontroller中的方法):

public $helpers = [
    'Paginator' => ['templates' => 'paginator-templates']
];

并更改模板:

$this->Paginator->templates([
    'sort' => '{{url}}'
]);

Paginate完整代码

        $this->paginate = [
            'conditions' => ['product_name LIKE' => '%' . $search . '%'],
            'maxLimit' => 10,
            'contain' => ['Medias' => function($q){
                return $q->select(['path', 'product_id'])
                    ->where(['media_type_id' => 3]);
            }]
        ];

        $this->Paginator->templates([
            'sort' => '{{url}}'
        ]);
        $products = $this->paginate($this->Products);

错误:

2015-12-14 15:31:47 Error: Fatal Error (1): Call to undefined method Cake\Controller\Component\PaginatorComponent::templates() in [C:\xampp\htdocs\PROJETOS\Shopping\src\Controller\ProductsController.php, line 121]
Trace:
Cake\Error\BaseErrorHandler::handleFatalError() - CORE\src\Error\BaseErrorHandler.php, line 192
Cake\Error\BaseErrorHandler::Cake\Error\{closure}() - CORE\src\Error\BaseErrorHandler.php, line 91
[main] - [internal], line ??



2015-12-14 15:31:47 Error: [Cake\Error\FatalErrorException] Call to undefined method Cake\Controller\Component\PaginatorComponent::templates()
Request URL: /products/search?search=a
Stack Trace:
#0 C:\xampp\htdocs\PROJETOS\Shopping\vendor\cakephp\cakephp\src\Error\BaseErrorHandler.php(91): Cake\Error\BaseErrorHandler->handleFatalError(1, 'Call to undefin...', 'C:\\xampp\\htdocs...', 121)
#1 [internal function]: Cake\Error\BaseErrorHandler->Cake\Error\{closure}()
#2 {main}

1 个答案:

答案 0 :(得分:3)

paginator 组件没有templates()方法,因此出错。它是提供此类方法的paginator helper ,可用于更改模板。

从控制器上下文中,只有templates选项可以在$helpers变量中传递,如代码段中所示。但是,这可用于从外部文件加载模板!

您似乎已从文档中复制了该片段,请阅读示例下方的文字说明:

  

这将加载位于 config / paginator-templates.php 的文件。请参阅下面的示例,了解文件的外观。

     

[...]

     

无论您的模板位于主应用程序还是插件中,您的模板文件应如下所示:

return [
    'number' => '<a href="{{url}}">{{text}}</a>',
];

简而言之,请使用该选项并按照说明将模板放入正确的文件中,或将templates()调用代码段放入视图模板中。

此外,您应该知道有更多与排序相关的模板:

  • sort
  • sortAsc
  • sortDesc
  • sortAscLocked
  • sortDescLocked

所以请务必覆盖所有必要的内容。

另请参阅 Cookbook > Views > Helpers > Paginator > PaginatorHelper Templates