教程栏目

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章 页面构造器

第17章 joomla升级

第18章 其他系统迁移

第19章 流量翻倍计划