понедельник, 13 апреля 2009 г.

Symfony: filter by 2 fields in backend

Простая ситуация: в таблице 2 поля
  sf_post:
_attributes: { phpName: Post }
id: ~
title: { type: varchar(255) }
content: { type: longvarchar }
...

Нам не важно в заголовке или в описании есть искомое поле, мы хотим в админке сделать фильтрацию по обоим полям. Берем исходник из кэша и модифицируем /backend/modules/post/actions/actions.class.php
  protected function buildCriteria()
{
$filters = $this->getFilters();
if (is_null($this->filters))
{
$this->filters = $this->configuration->getFilterForm($this->getFilters());
}

$criteria = $this->filters->buildCriteria($this->getFilters());

$this->addSortCriteria($criteria);

$event = $this->dispatcher->filter(new sfEvent($this, 'admin.build_criteria'), $criteria);
$criteria = $event->getReturnValue();

if (!empty($filters['title']['text']))
{
//добавим так же фильтр по полю CONTENT
$c1 = $criteria->getNewCriterion(PostPeer::TITLE, '%'.$filters['title']['text'].'%', Criteria::LIKE);
$c2 = $criteria->getNewCriterion(PostPeer::CONTENT, '%'.$filters['title']['text'].'%', Criteria::LIKE);
$c1->addOr($c2);
$criteria->add($c1);
}

return $criteria;
}

1 комментарий:

Unknown комментирует...

слу
а как узнать установлен фильтр или нет ? мне в зависимости от этого нужно в шаблоне вывод поменять - получается проверять только по значениям полей фильтра ? если все null то он не активный ? чет не очень удобно получается ?