WordPress – dynamiczna strona główna czyli Exec–PHP w praktyce

8.11.2008 09:30
Like

Autorem wpisu jest Stanisław Matczak, który wygrywa tym samym pierwszy egzemplarz Fallout3.

Bardzo użyteczną funkcją w WordPressie jest możliwość niemalże dowolnego dostosowania paska bocznego (sidebar) do własnych potrzeb – można tam mieć listę ostatnich postów, listę ostatnich komentarzy, tekst statyczny, kategorie, tagi, wyszukiwanie, i czego jeszcze tylko dusza zapragnie. Większość użytecznych funkcjonalności jest w standardowych widgetach – a to, czego nie ma w standardzie, znajdziemy w przeróżnych pluginach.

Natomiast problem zaczyna się w momencie, kiedy chcemy mieć to wszystko nie na pasku bocznym, a na stronie głównej… Tworząc stronę Forum Rodziców w pewnym momencie zapragnąłem mieć na pasku bocznym jedynie listę stron statycznych, linki oraz archiwum wiadomości, natomiast listę ostatnich postów oraz ostatnich komentarzy wyświetlać na stronie głównej – tak aby osoba, która odwiedza ten portal, była od razu informowana o nowościach w serwisie.

kodowanieWordPress oferuje możliwość wyboru, czy stroną startową mają być aktualności, czy też strona statyczna – ale to wszystko, co mamy do wyboru. W tym momencie marzyłaby mi się możliwość personalizowana strony głównej tak samo personalizowanie paska bocznego – przenosimy sobie różne widgety i budujemy z nich, jak z klocków, stronę główną. W standardzie tego nie ma. Nie udało mi się również znaleźć żadnego plugina, który realizowałby taką funkcjonalność. Dlatego postanowiłem zrobić to sam – poniżej jest opis, jak ta dynamiczna strona główna powstała.

Po pierwsze: tworzymy w WordPress stronę, która nazywa się “Strona główna” i ustawiamy nasz serwis, żeby wyświetlał ją jako stronę startową (menu “Settings” i podmenu “Reading Settings” – ustawiamy opcję “Front page displays” na “Static page”).

Po drugie: musimy zainstalować jakiś plugin, która pozwoli nam na wykonywanie kodu PHP wewnątrz postów. Ja wybrałem plugin “Exec–PHP”, który jest dostępny pod adresem bluesome.net.

Procedura instalacji jest standardowa. Natomiast ważne jest to, że plugin ten ma jedną wadę – po zainstalowaniu go artykuły, które używają kodu PHP, mogą być edytowane jedynie przy użyciu edytora HTML. Próba użycia edytora wizualnego powoduje, że kod PHP może być źle zinterpretowany i usunięty. Oczywiście artykułu, które nie zawierają kodu w PHP, mogą być nadal pisane w edytorze wizualnym.

Po trzecie: piszemy naszą dynamiczną stronę główną!

Poniżej znajduje się kod strony głównej portalu “Forum Rodziców” wraz z komentarzami.

<table>
<tr>
<td width="50%">

No cóż… Tabelek do formatowania treści nie powinno się używać… Tymczasowo zrobiłem tabelkę do podziału strony na dwie równe części, obiecując sobie, że w chwili wolnego czasu skonwertuję to na użycie CSS–a… Ale jeszcze nie miałem czasu się za to zabrać :-(

<h2>Kim jesteśmy?</h2>
"Forum rodziców" jest serwisem prowadzonym przez rodziców zainteresowanych sprawami dotyczącymi przedszkolnej oraz szkolnej edukacji ich dzieci. <a href="http://www.forumrodzicow.pl/?page_id=7">Czytaj dalej...</a>

Pierwszy box – statyczny tekst z linkiem, nic ciekawego, idziemy dalej.

<h2>Aktualności</h2>
<ul>
   <?php
      mdv_recent_posts(5);
   ?>
</ul>

Do wyświetlania ostatnich postów używam bardzo prostej wtyczki Recent Posts, którą lekko zmodyfikowałem dla własnych potrzeb. Funkcja mdv_recent_posts zwraca tytuły oraz początki ostatnich postów. Argument funkcji określa ilość wyświetlanych postów.

Zakończenie lewej części i rozpoczęcie prawej części tabeli:

</td>
<td width="50%">

Kolejny element – lista kategorii.

<h2>Tematy</h2>
<ul>
   <?php
      wp_list_categories('title_li=&amp;parent=17');
   ?>
</ul>

Lista tematów w serwisie. Generalnie kategorie w serwisie “Forum Rodziców” są podzielone na dwie niezależne grupy. Jedna grupa (o ID równym 17) określa tematy postów. Druga (ID równe 16) oznacza miasta, których dotyczą wiadomości. Podanie w argumencie funkcji tekstu “parent=17″ oznacza, że chcemy wyświetlić tylko podkategorie kategorii o takim identyfikatorze.

Jak dowiedzieć się, jaki identyfikator ma dana kategoria? Bardzo prosto. Wybieramy w panelu administracyjnym edycję tej kategorii i patrzymy na pasek adresu strony. Będzie on wyglądał w następujący sposób:

http://adres/wp–admin/categories.php?action=edit&amp;cat_ID=17

Ostatni numer jest właśnie identyfikatorem tej kategorii.

Podanie argumentu funkcji “title_li=” powoduje, że lista kategorii nie ma nagłówka.

<h2>Wiadomości z Twojego miasta</h2>
   <?php
      $str = wp_list_categories('echo=0&amp;style=&amp;title_li=&amp;parent=16');
      $str = str_replace("<br />\n", ', ', $str);
      $str = substr($str, 0, –2);
      echo $str;
   ?>

Tutaj powstało już trochę kodu… Generalnie robimy to samo, co wyżej, czyli wyświetlamy listę kategorii. Ale nie chcemy tej kategorii prezentować jako listę wypunktowaną, tylko jako tekst w jednym wierszu, który jest rozdzielony przecinkami – “Gdańsk, Gdynia, Gorzów, Kraków, Lublin…”. W tym celu został stworzony następujący kod:

  • Do argumentów funkcji wp_list_categories dodajemy argument “echo=0″, który powoduje, że funkcja ta nie wyświetla wyniku działania w przeglądarce, tylko zwraca ją do zmiennej $str. W następnych liniach kodu będziemy modyfikować zawartość tej zmiennej, a potem ją wyświetlimy w przeglądarce.
  • Do argumentów funkcji wp_list_categories dodajemy argument “style=”, który powoduje, że funkcja nie dodaje formatowania listy, tzn. nie otacza kategorii przez html–oweg tagi <li>
  • Linia “$str = str_replace(“
    \n”, ‘, ‘, $str);”
    powoduje, że znaki końca wiersza w zmiennej $str są zamieniane na przecinek i spację
  • Linia “$str = substr($str, 0, –2);” usuwa ze zmiennej $str dwa ostatnie znaki – to znaczy ostatni przecinek i spację.
  • I w końcu robimy “echo $str;”, czyli zwracamy zawartość zmiennej $str do przeglądarki.
  • <h2>Ostatnie komentarze</h2>
    <ul>
       <?php
          get_recent_comments();
       ?>
    </ul>

    I ostatnio blok funkcjonalny – funkcja get_recent_comments zwraca listę ostatnich komentarzy w serwisie korzystając z pluginu “Get Recent Comments” dostępnego pod adresem blog.jodies.de. Ta funkcja nie ma żadnych parametrów, ponieważ cała personalizacja tego pluginu (ilość wyświetlanych komentarzy, ilość jest dokonywana przez panel użytkownika

    Pozostało nam już tylko zakończyć tabelę na stronie głównej…

    </td>
    </tr>
    </table>

    …i zakończyć ten tekst. Dzięki użyciu wtyczki Exec–PHP i przy bardzo ograniczonym użyciu PHP możemy wyciągnąć z WordPressa wszelkie dane, jakie tylko chcemy i wyświetlić je na dowolnej stronie w naszym serwisie. Autorzy większości wtyczek podają kod PHP, który trzeba podać, żeby uruchomić daną wtyczkę, więc nie ma problemu z użyciem tej wtyczki na stronie zamiast w pasku bocznym.

    Życzę udanych eksperymentów!

    Foto by: pevra

    Like
« »

Dodaj do:

develway.pl

Komentarze

Dodaj swój komentarz
  • Tego szukałem – Fallout3 należy się i to bezsprzecznie.
    Mam nadzieję, że dzięki temu wpisowi uda mi się zawalczyć z główną stroną na PrzedsiebiorczyBialystok.pl

  • Napisałeś, że dobrze byłoby móc budować stronę główną przy pomocy widgetów – dokładnie tak można zrobić. Można przecież stworzyć sobie dowolną liczbę widgetów w pliku functions.php i następnie poumieszczać odwołania do nich w szablonach poszczególnych stron/kategorii/wpisów itp.

    Przykład takiego zastosowania jest między innymi na moim blogu, gdzie widgety są umiejscowione w sidebarze, stopce i w niektórych szablonach.

    Oczywiście wydajność takiego rozwiązania nie powala, ale prostota już tak.

  • Wpadłem na inny możliwy pomysł rozwiązania problemu – wystarczy utworzyć w szablonie strony głównej kilka “sidebarów”, pomijając kod wyświetlający nowe posty. Potem to już można sobie wszystko z poziomu panelu admina skonfigurować, ktoś, kto będzie zarządzał potem stroną, żeby np zmienić kolejność boxów nie będzie musiał napisać ani linijki html! ;)

Pingi i Trackbacki

Dodaj komentarz

Możesz wykorzystać następujące tagi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Preview:

Switch to our mobile site