mFilter2 и фильтр :date

Пробую фильтровать по дате. Нашел фильтр :date, которого почему-то нет в документации (там только :day, :month и :year).

Вызыв фильтра так:
'filters' => '
    tv|date_from:date,
',
'aliases' => '
    tv|date_from==date_from
',

Сейчас работает дата в таком порядке: ?date_from=2015-12-15.
Как поменять порядок на другой: ?date_from=2015-12-15 (дд-мм-гггг)?
Или хотя бы где найти документацию к этому фильтру :date?
Василий Столейков
14 декабря 2015, 14:01
modx.pro
3
2 129
0
Поблагодарить автора Отправить деньги

Комментарии: 3

Василий Столейков
14 декабря 2015, 17:34
0
На гитхабе код mSearch2 уже похоже нету. В каком файле хотя бы копать и найти код :date?
    Василий Столейков
    14 декабря 2015, 17:55
    0
    Нашел в файле core/components/msearch2/model/msearch2/filters.class.php такой код:
    /**
    	 * Prepares values for filter
    	 * Returns array with resources grouped by specified date format
    	 *
    	 * @param array $values
    	 * @param string $name
    	 * @param string $format
    	 * @param string $sort
    	 *
    	 * @return array Prepared values
    	 */
    	public function buildDateFilter(array $values, $name = '', $format = 'Y-m-d', $sort = 'desc') {
    		$results = array();
    		foreach ($values as $value => $ids) {
    			if (!is_numeric($value)) {
    				$value = strtotime($value);
    			}
    			$value = date($format, $value);
    			if (!isset($results[$value])) {
    				$results[$value] = array(
    					'title' => $value,
    					'value' => $value,
    					'type' => 'date',
    					'resources' => $ids,
    				);
    			}
    			else {
    				$results[$value]['resources'] = array_merge(
    					$results[$value]['resources'],
    					$ids
    				);
    			}
    		}
    
    		if (count(array_keys($results)) < 2 && empty($this->config['showEmptyFilters'])) {
    			return array();
    		}
    
    		if (strtolower($sort) == 'asc') {
    			ksort($results);
    		}
    		else {
    			krsort($results);
    		}
    
    		return $results;
    	}
    Что мне с ним делать? Можно ли как-то передать своё значение даты в $format?
    Или нужно будет переопределять этот код через свой метод фильтрации?
      Василий Столейков
      14 декабря 2015, 18:59
      +2
      Отвечаю себе же )))
      Да, нужно написать свой метод фильтрации взяв за основу существующие. получилось так:
      <?php
      class customFilter extends mse2FiltersHandler {
      
          // Здесь можно переопределить методы родительского класса, или создать собственные
      
      	public function filterDateRev(array $requested, array $values, array $ids) {
      		return $this->filterDate($requested, $values, $ids, 'd-m-Y');
      	}
      
      }
      + в системной настройке указал название своего класса customFilter
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3