Zend Framework虚荣网址分页无法正常工作
问题描述:
我正在使用Zend Framework应用程序,并且我刚刚在http://tfountain.co.uk/blog/2010/9/9/vanity-urls-zend-framework/上使用指南工作,但我的分页不起作用,并且没有虚空网址指南,已经能够找到它的触摸。Zend Framework虚荣网址分页无法正常工作
我的虚荣心路线设置为/:username/:filter/:pag
',其中最后2个参数是可选的。该页面正确显示,'/ jaimerump/badges/2'将进入徽章的第二页,但分页程序不工作,因为它似乎无法确定下一页的网址应该是什么。我在这里使用标准paginationControl.phtml文件从每一个Zend的分页教程,代码:
<?php if ($this->pageCount): ?>
<div class="paginationControl" id="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
<a href="<?php echo $this->url(array('page' => $this->previous)); ?>" id="previous">
< Previous
</a> |
<?php else: ?>
<span class="disabled">< Previous</span> |
<?php endif; ?>
<!-- Infinite Scroll doesn't use numbered page links -->
<!-- Next page link -->
<?php if (isset($this->next)): ?>
<a id="next" href="<?php echo $this->url(array('page' => $this->next)); ?>" >
Next >
</a>
<?php else: ?>
<span class="disabled">Next ></span>
<?php endif; ?>
</div>
<?php endif; ?>
,而不是返回 '/ jaimerump /徽章/ 3',$this->url()
回报 '/' 的。我确信这与我的自定义路线类有关。我改变了Tim Fountain的教程中的匹配功能,并将类的名称更改为VanityRouteUser并将其放入我的模型文件夹中,但除此之外,所有内容都是相同的。匹配功能:
public function match($path, $partial = false)
{
/* User profile routes are of form /:username/:filter/:page
Where filter can be haves, wants, badges, etc.
*/
if ($path instanceof Zend_Controller_Request_Http) {
$path = $path->getPathInfo();
}
$path = trim($path, $this->_urlDelimiter);
$pathBits = explode($this->_urlDelimiter, $path);
if (count($pathBits) < 1) {
return false;
}
// check database for this user
$result = DB::call()->fetchRow('SELECT user_id
FROM users
WHERE username = ?', $pathBits[0]);
if ($result) {
// user found
$values = $this->_defaults;
$values['username'] = $pathBits[0];
$values['page'] = (empty($pathBits[2]))?1:$pathBits[2]; //if they didn't provide a page
// figure out which action based on second segment
$filter = $pathBits[1];
if(empty($filter) || $filter == 'default'
|| $filter == 'haves' || $filter == 'wants'){
//Looking for user's haves, wants, or both
$values['action'] = 'index';
$values['filter'] = (empty($filter))?'default':$filter; //To catch the blank
}
else if($filter == 'badges'){
//Looking for user's badges
$values['action'] = 'badges';
}
else if($filter == 'shelves'){
//Looking for user's shelves
$values['action'] = 'shelves';
}
else{
//Must be a shelf id
$values['action'] = 'index';
$values['filter'] = $filter;
}
return $values;
}
return false;
}
什么是$this->url()
?我一直无法在Zend Paginator中找到url函数。我假设它正在调用路由类中的某个函数来尝试获取下一页的URL。它调用了什么函数,是否必须重载?
答
问题在于汇编函数。我试图用蒂姆喷泉的教程中提供的功能,它是:
public function assemble($data = array(), $reset = false, $encode = false)
{
return $data['username'];
}
后来我得到了“/”回来,因为$data['username']
是不确定的;路由器只提供页面参数。在编写自己的自定义路由类时,汇编函数必须为未传入数据数组的数据段提供默认值。修正它与:
public function assemble($data = array(), $reset = false, $encode = false)
{
//Check if username was provided
$username = ($data['username'])?$data['username']:$this->_defaults['username'];
//Check if filter was provided
$filter = ($data['filter'])?$data['filter']:$this->_defaults['filter'];
//Check if page was provided
$page = ($data['page'])?$data['page']:$this->_defaults['page'];
return $username.'/'.$filter.'/'.$page;
}
很高兴你得到它的工作。仅供参考,'$ this-> url()'调用标准的ZF URL助手,该助手又调用相关路由的汇编。这个函数可以返回任何你想要的,所以你可以很容易地修改你的解决方案,只提供过滤器和页面参数。 – 2013-03-14 15:54:21
@TimFountain在这种情况下,'$ this'是指什么?从被调用的所有其他函数和属性看来,它似乎必须是分页器。分页程序是否在您尝试调用它没有的函数时自动检查所有帮助程序? – jaimerump 2013-03-14 16:39:35
'$ this'将是'Zend_View'实例。分页程序会在尝试渲染部分时将所有其他变量分配给视图(可能通过部分助手)。 – 2013-03-14 16:55:47