Welcome, Guest
Username: Password: Remember me

TOPIC: [FIXED] Datetime filter NOT WORKING in generated component

Datetime filter NOT WORKING in generated component 09 Jan 2014 07:26 #11947

  • Tomaselli
  • Tomaselli's Avatar
  • Offline
  • Elite Member
  • Posts: 293
  • Thank you received: 87
  • Karma: 46
I'm sorry to say this, but to be honest I always found the datetime filter a bit buggy and it never really worked to me (but maybe it was due to my settings in the jcook builder, not using the default values.), so I always tried to avoid to use it, now that I'm in need of it, I had to take a look on it.
By the way the datetime filter doesn't filter anything with my configuration, because the filter value is not converted to unixtime in the model list.

jcook Scenario:
- datetime filed with unixtime selected and format d-m-Y H:i:s
- filter "from date" - "to date" added in grid view
- submit on change, selected


generated component:
- UI perfectly working
- model list doesn't submit the unixtime to the DB query


bug caused by:
ROOT\administrator\components\com_mycomponent\models\myitemslist.php
		//Define the filterable fields
		$this->set('filter_vars', array(
			'creation_date_from' => 'cmd',
			'creation_date_to' => 'cmd',
			'sortTable' => 'cmd',
			'directionTable' => 'cmd',
			'limit' => 'cmd'
				));
with that code the function getUserStateFromRequest doesn't return the correct value for the datetime, so nothing can work.


fix:
		//Define the filterable fields
		$this->set('filter_vars', array(
			'creation_date_from' => 'string', /* hack */
			'creation_date_to' => 'string', /* hack */
			'sortTable' => 'cmd',
			'directionTable' => 'cmd',
			'limit' => 'cmd'
				));


then in the same file:
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_from') !== null)
	$this->addWhere("a.creation_date >= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_from')));

//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_to') !== null)
	$this->addWhere("a.creation_date <= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_to')));
the FORMAT of the datetime is missing, so the getUnixTimestamp will return an empty value


fix:
//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_from') !== null)
	$this->addWhere("a.creation_date >= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_from'),array('d-m-Y H:i:s'))); /* hack */

//WHERE - FILTER : Creation date
if($this->getState('filter.creation_date_to') !== null)
	$this->addWhere("a.creation_date <= " . (int)JformsHelperDates::getUnixTimestamp($this->getState('filter.creation_date_to'),array('d-m-Y H:i:s'))); /* hack */
Last Edit: 09 Jan 2014 07:28 by Tomaselli.
The administrator has disabled public write access.
The following user(s) said Thank You: admin

Datetime filter NOT WORKING in generated component 17 May 2015 10:11 #13014

  • admin
  • admin's Avatar
  • Offline
  • Administrator
  • Chef
  • Posts: 3711
  • Thank you received: 984
  • Karma: 140
Fixed now.

Thank you very much for this good catch.
K+
Coding is now a piece of cake
The administrator has disabled public write access.
Time to create page: 0.084 seconds

Get Started