Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC:

[ tutorial | how make your own filter ] 10 Oct 2011 17:33 #186

  • doob
  • doob's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 22
  • Thank you received: 2
Change 'com_calendar' and 'events' for your names...

You need those files:

MODEL :
(M1) - components/com_calendar/models/events.php

HELPER :
(H1) - administrator/components/com_calendar/helpers/helper.php

VIEW :
(V1) - components/com_calendar/views/events/tmpl/default_filters.php
(V2) - components/com_calendar/views/events/view.html.php

CONTROLLER :
(C1) - components/com_calendar/controllers/events.php


(M1)
class CalendarModelEvents extends CalendarModelList
{
...
function _buildQueryWhere()
	{
		$where = array();

		$app = &JFactory::getApplication();
		$db=& JFactory::getDBO();
		$option	= JRequest::getCmd('option');
		$view	= JRequest::getCmd('view');
		$layout	= JRequest::getCmd('layout', 'default');

		$baseUserState = $option . '_' . $view . '.' . $layout . '.';

		if ($this->_active['filter'])
		{
			$filter_type = $this->getState('filter_type');
			if ($filter_type != '')	$where[] = "a.type = " . $db->Quote($filter_type);

			$filter_category = $this->getState('filter_category');
			if ($filter_category != '')	$where[] = "a.category = " . $db->Quote($filter_category);
>>> JUST ADD THOSE CODE ( CHANGE ANY DATE FOR YOUR FIELD NAME )
>>>			$filter_date = $this->getState('filter_date');
>>>			if ($filter_date != '')	$where[] = "a.date = " . $db->Quote($filter_date);
>>> END
		}


(H1)
class CalendarHelper
{
 ...
>>> ADD THOSE CODE ( CHANGE ANY DATE FOR YOUR FIELD NAME )
	function dbList($ctrl, $fieldName)
	{
		$db =& JFactory::getDBO();
		$query = 'SELECT *,'. $fieldName .' FROM #__' . 'calendar_'.$ctrl;

		$db->setQuery( $query );

		$list = $db->loadObjectList();

		$lists[$ctrl][$fieldName] = array();
		$id = 1;
		foreach($list as $l ){
			$lists[$ctrl][$fieldName][$id] = array("value" => $l->date, "text" => $l->date);
			$id++;
		}	

		return $lists[$ctrl][$fieldName]; 

	}

>>> ....


(V1)
...
<script language="javascript" type="text/javascript">
<!--

function resetFilters()
{
	if ($('filter_type') != null)
	    $('filter_type').value='';
	if ($('filter_category') != null)
	    $('filter_category').value='';
>>>>>>>>>>>>>>>>>>>>
>>>	if ($('filter_date') != null)
>>>	    $('filter_date').value='';
>>>>>>>>>>>>>>>>>>>>

....

window.addEvent('domready', function()
{
	//Reset broken filter (if selected value is not anymore available)
	if (  !checkFilter('filter_type', ("<?php echo($this->filters['type']->value); ?>" == ''))
		|| !checkFilter('filter_category', ("<?php echo($this->filters['category']->value); ?>" == ''))

>>>>>
	>>>	|| !checkFilter('filter_date', ("<?php echo($this->filters['date']->value); ?>" == '')))

>>>>>
....
<legend onclick="toggle_div('filters_wrapper');"><?php echo JText::_( "JSEARCH_FILTER_LABEL" ); ?></legend>
>>>>>
>>> <!-- SELECT : Datee  -->

	<div class='filter filter_date'>
			<label for="filter_date"><?php echo(JText::_("CALENDAR_JSEARCH_DATE")); ?> :</label>			
			<?php echo JHTML::_('select.genericlist',  $this->filters['date']->list, 'filter_date', " onchange = 'this.form.submit()'", 'value', 'text', $this->filters['date']->value);?>

		</div>

>>>>>>>> 

....



(V2)
class CalendarViewEvents extends JView
{
	function display($tpl = null)
	{

....
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_________HERE......
	$statesVars = array('limit', 'limitstart', 'filter_order', 'filter_order_Dir', 'filter_date', 'filter_type', 'filter_category');

.... 

function display_default($tpl = null)
{
.....
// table ordering
		$lists['order'] = $model->getState('filter_order');
		$lists['order_Dir'] = $model->getState('filter_order_Dir');

	>>>>	$lists['enum']['events.date'] = CalendarHelper::dbList('events', 'date');

.....

		//Filters
		//Date
		$this->filters['date'] = new stdClass();
		$this->filters['date']->list = $lists['enum']['events.date'];
		array_unshift($this->filters['date']->list, array("value"=>"", "text" => JText::_("CALENDAR_FILTER_NULL_DATE")));
		$this->filters['date']->value = $app->getUserState( $option . "_events.default.filter_date");

.....







(C1)
class CalendarControllerEvents extends CalendarController
{
	var $ctrl = 'events';
	var $singular = 'event';

	function __construct($config = array())
	{

		parent::__construct($config);

		$app = &JFactory::getApplication();


		// Register the filtering request variables
		$app->getUserStateFromRequest( $this->namespace . 'filter_type',		'filter_type',		'',	'varchar' );
		$app->getUserStateFromRequest( $this->namespace . 'filter_category',	'filter_category',	'',	'varchar' );
	>>>>>	$app->getUserStateFromRequest( $this->namespace . 'filter_date',		'filter_date',		'',	'date' );


....

		//Predefine fields depending on filters values
		$get = array();
		$app = &JFactory::getApplication();

>>>		//Date
>>>		$filter_date = $app->getUserState( $this->namespace . "filter_date");
>>>		if ($filter_date) $get[] = "filter_date=" . $filter_date;                
                
		//Type
		$filter_type = $app->getUserState( $this->namespace . "filter_type");
		if ($filter_type) $get[] = "filter_type=" . $filter_type;

The following user(s) said Thank You: JoomGuy

Please Log in or Create an account to join the conversation.

Last edit: by doob.
  • Page:
  • 1
Time to create page: 0.053 seconds

Amazing Tool !
And only tool I know that allows complete Scaffolding in terms of component creation. It really saves loads of time (actually much more than that). Simple architecture enables quick and painless changes at any time. Code is clean and consintent. It's just... what's the word... neat! :) Great work! You should definetely try this one!

pi_wo (JED)
         

Get Started