Сортировка списка статей в Symfony - PullRequest
2 голосов
/ 08 января 2010

У меня есть модуль под названием article, где я отображаю список статей, которые я загрузил. В индексе просто перечислены все статьи.

Но мне было интересно, как я могу сделать так, чтобы, например, если я нажму на автора, он переместится на страницу, на которой будет отображена только статья этого автора (и сделав URL довольно красивым, например: article / daniel ) или другой областью, такой как публикация. Я знаю, как делать запросы очевидно, но я не понимаю, должен ли я создавать новые шаблоны для этих вещей или просто изменять параметры на странице индекса и проверять их.

1 Ответ

3 голосов
/ 08 января 2010

Вы можете использовать маршрут объекта ORM для достижения этого с минимальным кодированием с вашей стороны. Я собираюсь предположить, что вы используете Doctrine, но если вы используете Propel, реализация должна быть очень похожей (возможно, просто используя sfPropelRoute в качестве вашего класса). В config / routing.yml вашего приложения добавьте свой собственный маршрут:

author_articles:
  url:   /authors/:author
  param: { module: articles, action: author }
  class: sfDoctrineRoute
  options: { model: Article, type: list }

Примечание. Я использовал URL / авторы / вместо запрошенного вами / article /, чтобы этот маршрут не конфликтовал с какими-либо действиями в вашем модуле статей, но вы можете использовать любой URL, который вы предпочитаете в своей конфигурации. .

Очистите кэш после сохранения этих изменений, чтобы Symfony узнал о новом маршруте. Это говорит вашему приложению, чтобы оно взяло все URL-адреса, совпадающие с / author / / *, и передало их через действие author вашего модуля Articles, создавая список объектов, который соответствует параметру: author в URL-адресе. Маршрут объекта делает все это автоматически с помощью только что указанной конфигурации.

Теперь в авторе действия вашего модуля статей добавьте:

public function executeAuthor() {
  $this->articles = $this->getRoute()->getObjects();
}

Теперь у вас есть результат запроса в переменной для вашего шаблона действия. В вашем шаблоне authorSuccess.php выполните цикл массива $ Articles, как считаете нужным.

Чтобы связать этот маршрут из вашего основного списка с именем автора, вы можете использовать помощник url_for с только что созданным маршрутом для динамической генерации полных URL:

<a href="<?php echo url_for('@author_articles?author=' . $article['author']) ?>"><?php echo $article['author'] ?></a>

Это все, что нужно.

...