我有一个项目列表页面和一个用于搜索的过滤区域。要从过滤器表单传递和检索变量,我使用getUserStateFromRequest然后根据这些列出项目。但是当我在行或其他视图之间移动时,我返回我想重置变量以查看整个列表,但它没有。我想我应该在视图改变时重置它们。如何控制这个或任何其他建议?
答案 0 :(得分:2)
也许您根本不想使用 getUserStateFromRequest 。 getUserStateFromRequest将请求变量存储到用户会话。 如果您希望在离开页面时重置状态,则可以选择不在用户会话中保存变量。
在你的模型populateState中,类似于:
$app = JFactory::getApplication();
$search_term = $app->input->get('search_term', null, 'CMD');
$this->setState('filter.search_term', $search_term);
然后回顾状态(仍然在你的模型中):
$search_term = $this->getState('filter.search_term');
if($search_term != null)
$query->where('my_field = ' . $db->quote($search_term));
请注意,代码未经过测试。
答案 1 :(得分:0)
您可以像这样重置活动过滤器,然后将resetuserstate = 1添加到查询中:
protected function populateState($ordering = null, $direction = null) {
... ... ...
parent::populateState('a.title', 'asc');
$activefilters=$this->getActiveFilters();
$jinput = JFactory::getApplication()->input;
$resetUserState=(bool) $jinput->get("resetuserstate",0, 'INT');
if ($resetUserState) {
foreach ($activefilters as $activefilter => $filterstate) {
// clearing filters
$app->setUserState($this->contect . 'filter.'. $activefilter, '');
$this->setState('filter.'.$activefilter,'');
}
}
}
注意: 当您通过错误地设置过滤器来混淆用户状态时会发生奇怪的事情,登录和注销也会清除用户状态并且有时会有所帮助。
答案 2 :(得分:-4)
我仍然无法解决我的问题。得到没用。这些代码有什么区别
$mainframe =& JFactory::getApplication();
$filter_carryingW = $mainframe->input->get( 'filter_carryingW', '', 'int' );
$filter_carryingF = $mainframe->input->get( 'filter_carryingF', '', 'int' );
$filter_services = $mainframe->input->get( 'filter_services', '', 'int' );
$filter_country = $mainframe->input->get( 'filter_country', '', 'word' );
$filter_city = $mainframe->input->get( 'filter_city', '', 'int' );
$filter_town = $mainframe->input->get( 'filter_town', '', 'int' );
$this->setState('com_dratransport.members.filter_carryingW' , $filter_carryingW);
$this->setState('com_dratransport.members.filter_carryingF' , $filter_carryingF);
$this->setState('com_dratransport.members.filter_services' , $filter_services);
$this->setState('com_dratransport.members.filter_country' , $filter_country);
$this->setState('com_dratransport.members.filter_city' , $filter_city);
$this->setState('com_dratransport.members.filter_town' , $filter_town);
$f['filter_carryingW'] = $this->getState('com_dratransport.members.filter_carryingW');
$f['filter_carryingF'] = $this->getState('com_dratransport.members.filter_carryingF');
$f['filter_services'] = $this->getState('com_dratransport.members.filter_services');
$f['filter_country'] = $this->getState('com_dratransport.members.filter_country');
$f['filter_city'] = $this->getState('com_dratransport.members.filter_city');
$f['filter_town'] = $this->getState('com_dratransport.members.filter_town');
和
$f['filter_carryingW'] = $mainframe->input->get( 'filter_carryingW', '', 'int' );
$f['filter_carryingF'] = $mainframe->input->get( 'filter_carryingF', '', 'int' );
$f['filter_services'] = $mainframe->input->get( 'filter_services', '', 'int' );
$f['filter_country'] = $mainframe->input->get( 'filter_country', '', 'word' );
$f['filter_city'] = $mainframe->input->get( 'filter_city', '', 'int' );
$f['filter_town'] = $mainframe->input->get( 'filter_town', '', 'int' );