Strona zarządzana za pomocą kategorii

Założeniem projektowanej strony jest sposób nawigacji uzależniający artykuły od kategorii. Kategorie są głównymi podstronami strony www i wyświetlane artykuły w komunikacji z tabelą Articletocategorie wyświetlają zawartość.

Generujemy moduł kategorii identycznie jak dla Artykułów. Dlatego, że ten moduł będzie tak samo zarządzalny jak artykułów.

 $ php symfony doctrine:generate-module –with-show –non-verbose-templates frontend categorie categorie

Jeżeli nie chcielibyśmy rozbudowanego modułu. Wystarczyło by wywołać komendę

$ php symfony generate:module Categorie

Następnie przeładowujemy model Doctrine ze względu na to, że tabela Categorie ma pomocnika slug niezbędnego do prawidłowej pracy routingu.

Wpisujemy w konsoli komendę.

$ php symfony doctrine:build –all –and-load –no-confirmation

Aby wszystko poprawnie działało należy jeszcze w nowo zbudowanym module w akcji show zmienić wpis na następujący

class categoryActions extends sfActions
  {
     public function executeShow(sfWebRequest $request)
      {
        $this->categorie = $this->getRoute()->getObject();
      }
   }

Od tej pory w oknie przeglądarki widzimy łatwy do zapamiętania adres dla użytkownika bazujący na wbudowanym pomocniku dla sfDoctrineRoute, który dodaje kolumnę do tabeli kategorii. I tak na przykład mamy bardzo przyjazny adres http://www.mojastrona.pl/categorie/aktualnosci

Symfony domyślnie zbuduje model oparty na routingu z pobieranego Id w tabeli Categorie. W naszym przypadku należy zmieniać stronę na podstawie nazwy kategorii. W tm celu modyfikujemy w indexsuccess.php sposób wybierania adresu na podany poniżej.

Przejdźmy teraz to wyświetlania artykułów na stronie kategorii.

Na początek modyfikujemy w warstwie akcji, akcję executeIndex dopisując na końcu jeszcze jedną liniję.  Ma to na celu wyświetlanie artykułów odpowiadającym im kategoriom.

Po modyfikacji akcja wygląda następująco:

Nowa zmienna posiada połączone tabele Article z Articletocategorie.

Tak więc warstwa akcji pobiera nam dane z naszych tabel. Przejdźmy do warstwy widoku.

Aby artykuły wyświetlały się po nazwie kategorii należy dołączyć jeszcze jedną pętlę.

       <?php foreach ($categoriesIds as $article): ?>

Jednak w ten sposób po każdej kategorii wyświetli się cała lista artykułów, nie sprawdzając czy dany artykuł należy do tej kategorii. Aby to zmienić należy wprowadzić warunek if, który będzie porównywał zmienną Id z tabeli categorie ze zmienną categorie_id tabeli Articletocategorie. Trzeba jeszcze pamiętać, że pobierana tabela Articletocategorie jest już połączona z tabelą Article. Tak więc jeżeli warunek zostanie spełniony to wyświetlą się tylko te artykuły, które należą do danej kategorii.

Poprawny kod realizujący to zadanie jest następujący.

Reklamy

Posted on 4 września 2011, in Symfony and tagged , . Bookmark the permalink. Możliwość komentowania Strona zarządzana za pomocą kategorii została wyłączona.

Możliwość komentowania jest wyłączona.

%d blogerów lubi to: