0

phalcon (volt) 中是否有一个辅助函数来使用 GET-Parameters 创建指向路由的链接?我有分页链接,我想添加 ?cat=category 和 ?year=year 取决于它们是否设置。

<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}">First</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->before; ?>">Previous</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->next; ?>">Next</a>
<a href="{{ url.getBaseUri() }}tags/{{ tagname.tag }}?page=<?= $page->last; ?>">Last</a>

以便

http://site.tld/tags/xyz?page=2

会成为:

http://site.tld/tags/xyz?cat=a&year=b&page=2

或者这个,如果 cat 未设置或为空:

http://site.tld/tags/xyz?year=b&page=2

编辑

这样它似乎工作:

<a href="{{ pagingurl ~ page.first }}">First</a>
<a href="{{ pagingurl ~ page.before }}">Previous</a>
<a href="{{ pagingurl ~ page.next }}">Next</a>
<a href="{{ pagingurl ~ page.last }}">Last</a>

其余的发生在控制器中

4

1 回答 1

1

IMO 在控制器中执行此操作比使用电压更容易。首先,使用URL Service为您的分页链接生成基本 URL :

$pagingUrl = $this->url->get('tags/' . $tagname->tag);

现在你可以得到'cat'和'year',比如$this->request->getPost('cat');检查它是否已设置并将其$pagingUrl作为GET参数附加到。在末尾留下一个“&page=”,$pagingUrl以便稍后轻松附加页码。

设置$page$pagingUrl作为视图的变量,以便您可以轻松地从 volt 访问它:

$this->view->setVar('page', $page);
$this->view->setVar('pagingUrl', $pagingUrl);

最后在视图中你可以使用类似的东西:

{{ link_to(pagingUrl ~ '1', 'First') }}
{{ link_to(pagingUrl ~ page.before, 'Previous') }}
{{ link_to(pagingUrl ~ page.next, 'Next') }}
{{ link_to(pagingUrl ~ page.last, 'Last') }}

编辑

上面的解决方案看起来有点骇人听闻,因为 Phalcon 设计者的目标是更多地使用干净的 URL,而不是显式的 GET 参数。如果您以这种方式传递参数,则TagController可以有一个支持分页的操作,如下所示:

class TagController
{
  ...
  public function ListAction($page = 1, $category = 'default-cat', $year = 1997)
  {
    ...

以这种方式工作,您可以轻松地创建如下链接:

  • tags/list
  • tags/list/2/stuff
  • tags/list/9/stuff/2014
于 2014-04-14T01:30:29.683 回答