我正在开发一个Zend Framework应用程序,我刚刚通过http://tfountain.co.uk/blog/2010/9/9/vanity-urls-zend-framework/的指南获得了我的虚荣路由,但是我的分页不起作用,而且我所能找到的任何虚荣url指南都没有涉及到它。
我的虚荣路由设置为/:username/:filter/:pag',其中最后两个参数是可选的。页面显示正确,'/jaimerump/ badges /2‘将转到我的徽章的第二页,但分页器无法工作,因为它似乎找不到下一页的url应该是什么。我使用的是每个Zend分页教程中的标准paginationControl.phtml文件,代码如下:
<?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; ?>$this->url()返回的不是'/jaimerump/badges/3',而是'/‘。我确信这与我的自定义路由类有关。我更改了Tim Fountain教程中的match函数,并将类名更改为VanityRouteUser并将其放入models文件夹中,但除此之外,一切都是一样的。匹配函数:
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分页器中找不到url函数。我假设它正在调用route类中的某个函数来尝试获取下一个页面的url。它调用的是什么函数,我必须重载它吗?
发布于 2013-03-14 23:50:01
问题出在汇编函数上。我尝试使用Tim Fountain教程中提供的函数,即:
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;
}https://stackoverflow.com/questions/15413531
复制相似问题