教程栏目

joomla中文网出品的官方教程

在组件中使用过滤器是一件很常见的功能。比喻我们在文件中按照条件过滤来找到我们需要的文章。在本节中,我们将介绍如何在joomla中使用过滤器。

下面是一个ZMAX超级汉化组件的截图,这个截图就用到了两个过滤器,一个状态过滤器,一个是类型过滤器。另外还用到了搜索功能。

下面我们就分别看看这两个功能是如何实现的。

搜索

我们需要解决的第一个问题是在界面上产生这些元素。非常的简单,直接修改项目的视图页面。直接在该视图中加上相应的代码就行了

<fieldset id="filter-bar">
		<!--  搜索 过滤-->
		<div class="filter-search fltlft">
			<label class="filter-search-lbl" for="filter_search">搜索</label>
			<input type="text" name="filter_search" id="filter_search" value="<?php echo $searchVal;?>" title="搜索" />
			<button type="submit"><?php echo JText::_("JSEARCH_FILTER_SUBMIT");?></button>
			<button type="button" onclick="document.id('filter_search').value='';this.form.submit();"><?php echo JText::_('JSEARCH_FILTER_CLEAR');?></button>	
		</div>
		<!-- 搜索结束-->
		
		<div class="filter-select fltrt">
			<select name="filter_state" class="inputbox" onchange="this.form.submit()">
				<option value=""><?php echo JText::_('JOPTION_SELECT_PUBLISHED');?></option>
				<?php echo JHtml::_('select.options',SuperHHHelper::stateOptions(),'value','text',$this->state->get('filter.state'),true);?>
			</select>
			<select name="filter_type" class="inputbox" onchange="this.form.submit()">
				<option value="">选择扩展类型</option>
				<?php echo JHtml::_('select.options',SuperHHHelper::typeOptions(),'value','text',$this->state->get('filter.type'),true);?>
			</select>
		</div>
		
		
	</fieldset>

 上面的代码理解起来并不困难。重点有两个地方。

第一是清除功能的实现。系统响应了onClick消息。使用document.id('filter_search').value=""来清空搜索框中的值,然后使用this.form.submit()方法提交表单。

第 二是搜索框中的值的保存。当点击搜索,系统会依据搜索的条件来刷新页面。为了更好的用户体验,我们需要在搜索框中保存上次用户搜索的值。在上面的代码 中,value="<?php echo $searchVal;?>;"就实现了这个功能。很明显这需要在页面间传递参数。如果继续深究,$searchVal =$this->escape($this->state->get('filter.search')); 实际上他是从sesion中读取的值。有关session的详细使用,可以参考本站的相应文章。

在上面的代码中,我们可以总结出两点。1,我们可以用this.form.submit()方法来提交表单 2,我们可以用session来实现在不同页面间传递参数。


 

完成了上面的部分,我们只完成了一半,还需要继续处理后台。

剩下的部分就是在后台获得需要搜索的值,然后在后台获取结果集的SQL中加入刚才的过滤器进行模糊匹配。这就是大体的思路。

思路清楚了,那么我们首先需要修改的地方就是模型了。代码相对简单:

	//通过搜索过滤
		$search = $this->getState('filter.search');
		
		
		if(!empty($search))
		{
			$query->where('LOWER(name) LIKE "%'.$search.'%"');
		}

 无需多说,代码已经表名意图了。

理论上做完这些就可以实现我们想要的搜索功能了。但实际上却并不是这样的。我们还需要做一些其他的事情,就是更新状态变量。至于说为什么要这么做,现在还不清楚。

我们需要在模型中实现一个方法,这个方法的名称为:populateState.这个方法的被系统自动调用。

 protected function populateState($ordering = null ,$direction = null)
	 {
		//初始化变量
		$app = JFactory::getApplication("administrator");
		
		//加载过滤状态变量 搜索
		$search = $this->getUserStateFromRequest($this->context.'.filter.search','filter_search');
		$this->setState('filter.search' ,$search);
		
		//加载过滤状态变量 发布
		$published = $this->getUserStateFromRequest($this->context.'.filter.state','filter_state','','string');
		$this->setState('filter.state',$published);
		
		$type = $this->getUserStateFromRequest($this->context.'.filter.type','filter_type');
		$this->setState('filter.type',$type);
		
		parent::populateState('extension_id' ,'asc');
	 }

 如果你看过本网站介绍的session相关的章节。那么你大体可以猜想出这代代码在干什么了。这段代码主要是用Request中的参数来更新Session中用户状态的一些值。

到此。搜索功能就可以使用了。

我们在下一节中将会继续介绍过滤器。

 

 

评论 (0)

  • 最新在前
  • 最佳在前

第1章 Joomla入门教程

第3章 C计划

第5章 E计划

第6章 H计划

第7章 G计划

第9章 运行环境

第11章 主从与集群

第12章 模块开发

第13章 插件开发

第14章 j2.x组件开发教程

第15章 页面定制教程

第16章 页面构造器