Устанавливаем значение фильтра

Предположим, что нам надо организовать статьи в админке, когда их 100-500 еще можно просто вывести полный их список и просматривать, но если их к примеру 1000 или 10.000 тут проще вывести их отсортированными по категориям. что нам для этого понадобится:
schema:

ArticleCategory:
  actAs:
    Timestampable: ~
  columns:
    title:       { type: string(255), notnull: true }
    description: { type: string(4000) }
    is_active:   { type: boolean, notnull: true, default: true }

Article:
  actAs:
    Timestampable: ~
  columns:
    category_id: { type: integer, notnull: true }
    title:       { type: string(255), notnull: true }
    description: { type: blob }
    is_commented: { type: boolean, notnull: true, default: true }
    is_active:   { type: boolean, notnull: true, default: true }
  relations:
      ArticleCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: Articles }

теперь нам надо создать базу и админку, тут нам поможет стандартная документация
теперь у нас готовы модули админки (articleCategory, article)
добавляем действия к каждой категории articleCategory/config/generator.yml:

generator:
  class: sfDoctrineGenerator
  param:
    model_class:           ModerateMenusCategory
    theme:                 moderate
    non_verbose_templates: true
    with_show:             false
    singular:              ~
    plural:                ~
    route_prefix:          moderate_menus_category
    with_doctrine_route:   true
    actions_base_class:    sfActions

    config:
      actions: ~
      fields:  ~
      list:
        title: Manage menus categories
        object_actions:
          articles:      ~
          _edit:      ~
          _delete:    ~
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~

теперь в articleCategory/actions/actions.class.php добавляем функцию:

public function executeListArticles(sfWebRequest $request)
  {
    if ($request->getParameter('id'))
    {
      $this->redirect('article/index?id='.$request->getParameter('id'));
    }
  }

таким образом нас перекидывает на индексную страницу модуля статей с указанием в запросе айдишника, но это еще не все, теперь нам необходимо установить фильтр, который будет показывать только нужную категорию. В article/actions/actions.class.php переопределяем вывод:

public function executeIndex(sfWebRequest $request)
  {
    if ($request->getParameter('id'))
    {
      $this->setFilters(array('category_id' => $request->getParameter('id')));
      $this->getUser()->setFlash('notice', 'The articles #'.$request->getParameter('category_id').' have been successfully filtering.'); // выводим сообщение о фильтрации
      $this->redirect('article/index'); // убираем не нужные данные в урле (чисто для красоты)
    }

    parent::executeIndex($request);
  }

вот и все =)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: