我尝试在<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&sort=user_id&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}
答案 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