教程栏目

joomla中文网出品的官方教程

下拉框过滤器的后台实现思路和搜索功能的思路相差不大。重点是前台如何产生下拉框的代码。

在前面的章节中简单的介绍了一下搜索框的实现。现在我们来看看下拉框的实现。

下拉框前台的实现代码:

		<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>

 有了上一节的基础,我们很容易的清楚系统提交表单的流程了。系统相应sleect框的onchange 消息,然后调用this.form.submit()方法来实现表单的提交。另外,保存上一次提交的值的操作也相对简 单。$this->state->get(filter.type)就是干这件事的。

看一下重点:

上面代码的重点就是如何产生下拉框的选项的。产生选项的代码如下:

<option value="">选择扩展类型</option>
<?php echo JHtml::_('select.options',SuperHHHelper::typeOptions(),'value','text',$this->state->get('filter.type'),true);?>

 利 用了JHtml::_()方法,产生了一个slect.options类型的html元素。第二个参数是 SuperHHHelper::typeOptions()。实际上这个他调用了组SuperHHHelper类的typeOptions()方法。这个 类的实现文件位于组件的helper目录下的superhh.php文件中。

关于这个文件的名称和位置,都不重要,因为我们在视图中使用下面的代码加载这个类的:

include_once(JPATH_COMPONENT.'/helpers/superhh.php');

 看一下类的实现文件:

class SuperhhHelper
{
	public static $extension = 'com_superhh';

	/**
	 * Configure the Linkbar.
	 *
	 * @param	string	The name of the active view.
	 */
	public static function addSubmenu($vName)
	{
		// No submenu for this component.
	}

	

	/**
	 * Returns an array of standard published state filter options.
	 *
	 * @return	string			The HTML code for the select tag
	 */
	public static function stateOptions()
	{
		// Build the active state filter options.
		$options	= array();
		$options[]	= JHtml::_('select.option', '1', 'JENABLED');
		$options[]	= JHtml::_('select.option', '0', 'JDISABLED');

		return $options;
	}
	
	public static function typeOptions()
	{
		// Build the active state filter options.
		
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);
		
		$query->select('DISTINCT(type) As value ,type AS text');
		$query->from('#__extensions');
		$query->order('type');
		
		$db->setQuery($query);
		$options = $db->loadObjectList();
		
		if($error = $db->getErrorMsg())
		{
			JError::raiseWarning(500,$err);
		}
		return $options;
	}

	
}

 代码逻辑非常清楚,从数据库中读取所有的类型,然后返回一个对象数组,之后系统就会搞定剩下的工作。

理解了前台的原理,后台的原理就不啰嗦了,看代码:

protected function getListQuery()
	{
		// Create a new query object.
		$db		= $this->getDbo();
		$query	= $db->getQuery(true);

		// Select the required fields from the table.
		$query->select("*");
		$query->from($db->quoteName('#__extensions'));

		
		$filter_order = JRequest::getVar('filter_order',"extension_id");
		$filter_order_Dir = JRequest::getVar('filter_order_Dir',"ASC");
		
		$query->order($db->getEscaped($filter_order)." ".$db->getEsacped($filter_order_Dir));
		
		//通过搜索过滤
		$search = $this->getState('filter.search');
		
		
		if(!empty($search))
		{
			$query->where('LOWER(name) LIKE "%'.$search.'%"');
		}
		
		//通过状态过滤
		$published = $this->getState('filter.state');
		if(is_numeric($published))
		{
			$query->where('enabled = '.(int) $published);
		}
		
		//通过类型过滤
		$type = $this->getState('filter.type');
		if(!empty($type))
		{
			
			$query->where($db->quoteName('type').' = "'.$type.'"');
		}
		
		return $query;
	}
	

 

 

评论 (0)

  • 最新在前
  • 最佳在前

第1章 Joomla入门教程

第3章 C计划

第5章 E计划

第6章 H计划

第7章 G计划

第9章 运行环境

第11章 主从与集群

第12章 模块开发

第13章 插件开发

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

第15章 页面定制教程

第16章 页面构造器