因为分页使用getUserStateFromRequest
方法来获取limit
和limitstart
变量,所以当我从一个组件导航到另一个组件时,我遇到了一个问题,我看到了没有找到任何项目消息。
为了澄清,我有一个产品组件,其中列出了3页的产品。然后我有一个分支组件,有2页的分支信息。因此,如果我导航到产品列表中的第三页,然后转到分支组件,则不会显示任何内容。
有谁知道如何阻止这种情况发生?有没有办法清除会话数据?
答案 0 :(得分:1)
我最终做的是这个, 在library / joomla / application / application.php文件的第624行中,我添加了以下行
$this->setUserState('option','default');
$curr_comp = JRequest::getCmd( 'option' );;
if($this->getUserState('option') != $curr_comp)
{
$this->setUserState($option . 'limitstart',0);
$this->setUserState('option',$curr_comp);
}
所以整个函数读取了这个,
public function getUserStateFromRequest($key, $request, $default = null, $type = 'none')
{
$this->setUserState('option','default');
$curr_comp = JRequest::getCmd( 'option' );
if($this->getUserState('option') != $curr_comp)
{
$this->setUserState($option . 'limitstart',0);
$this->setUserState('option',$curr_comp);
}
$cur_state = $this->getUserState($key, $default);
$new_state = JRequest::getVar($request, null, 'default', $type);
// Save the new value only if it was set in this request.
if ($new_state !== null)
{
$this->setUserState($key, $new_state);
}
else
{
$new_state = $cur_state;
}
return $new_state;
}
目前这似乎工作得很好。但请在实际网站上实施之前进行测试
答案 1 :(得分:1)
要防止编辑核心文件,但效果仅限于您的扩展名(因此其他扩展程序可能会在错误的页面加载,而不是您的加载),并且如果您的模型扩展为modellist,请覆盖getStart()
方法:
public function getStart()
{
$store = $this->getStoreId('getstart');
$input = JFactory::getApplication()->input;
$start = $limitstart = $input->getInt('limitstart', 0);
$this->setState('list.start', $limitstart); // maybe redundant
$limit = $this->getState('list.limit');
$total = $this->getTotal();
if ($start > $total - $limit)
{
$start = max(0, (int) (ceil($total / $limit) - 1) * $limit);
}
// Add the total to the internal cache.
$this->cache[$store] = $start;
return $this->cache[$store];
}
如果您想要一个适用于系统范围和所有扩展的解决方案,您应该能够在插件中使用您的实现覆盖modellist。开始here。
答案 2 :(得分:0)
这是一个老问题,但我和OP有同样的问题,但在我的情况下使用Joomla 3.4.3。
经过大量的挖掘和测试后,我发现了一个解决方案,不涉及任何插件或核心更改:
如果您将limitstart=0
放入网址,则会为该网页重新启动分页,这样就解决了菜单之间的问题。
实现这个的方法可以是使用javascript,或者通过覆盖菜单模块,我选择了覆盖:
"
video-area"
(没有引号)。html
文件夹中,
在我的情况下,它是菜单模块,所以这是一个添加的问题
mod_menu文件夹:templatefolder/html/mod_menu
)在模块的组件部分的覆盖中
(default_component.php
),检查我们是否有CSS类,if
所以,将额外的查询添加到URL(我编辑case 0
):
case 0: $paginationLinks = ""; if(isset($class) && strpos($class, '
video-area') !== false){ $paginationLinks =
"?limitstart=0&limit=12"; } ?><a <?php echo $class; ?>href="<?php
echo $item->flink; ?><?php echo $paginationLinks;?>" <?php echo
$title; ?>><span><?php echo $linktype; ?></span></a><?php break;
那就是它!它解决了我的问题,甚至分页链接都有额外的查询:)
BONUS :请注意我有&limit=12
,这会将页面的限制更改为每页12
,而不需要任何额外的代码!(之前,我有一个很多代码实现这一点,并通过添加到菜单,它计算正确的页码和总数,并筛选查询,漂亮的Joomla!)