Zapowiedź CMS-a i porządki na stronie

Około dwudziestego grudnia 2010 postanowiłem zacząć wcielać w życie pomysł, który przechodził mi przez myśl co jakiś czas. Miałem zamiar w końcu odrestaurować stronę sobak.pl. Był to czas, gdy blog stał się rozwiązaniem tymczasowym, w zamian za starą wersję mojej strony (kilka skryptów na krzyż). Postanowiłem napisać taki zalążek CMS-a do jej zarządzania.

Dosłownie dzień później stwierdziłem jednak, że mój przyszły skrypt można by uczynić jeszcze bardziej uniwersalnym i stworzyć niego "takiego pełnoprawnego CMS-a". I zacząłem pisać… szło mi to dość opornie. Dla przyspieszenia prac postanowiłem, że skorzystam z ogólnodostępnego szablonu (za co niektórzy chętnie by mnie zabili), aby jak najszybciej móc skupić się na pisaniu "kodu właściwego".

Pierwsza zmiana nastąpiła siódmego lutego 2011. Wtedy to do udziału w projekcie udało mi się namówić m4tx'a. W tym momencie zmieniłem też nazwę skryptu z samozwańczego SobakCMS na IronCMS (wiem, pachnie ironią…). Jeśli by kogoś interesowało pochodzenie nazwy (w co wątpię ;)), to po w poszukiwaniu nazwy przeglądałem iTunes'a i leciałem właśnie po dłuugiej liście utworów Iron Maiden.

Podczas tego już ponad czteromiesięcznego procesu tworzenia naklepałem tyle kodu i tyle razy go poprawiałem, że wydałem sobie cztery wewnętrzne, niepublikowane wersje dla utrzymania porządku. 25.03 postanowiłem zakończyć tworzenie ówczesnej wersji 0.4 i cały kod uzyskany do tej pory… napisać od nowa.

W ten sposób miałem okazję przyjrzeć się jak bardzo partyzanckie i nieoptymalne rozwiązania tam stosowałem (przykład jednego z nich już przedstawiałem). Poprawiłem naprawdę dużo kodu i w dniu dzisiejszym mogę powiedzieć z radością, że prace zmierzają ku końcowi. Premiera zapowiadanego skryptu powinna się odbyć najpóźniej za tydzień (oby nie było tak jak z Fx4). Uprzedzam tylko uczciwie: proszę nie spodziewać się fajerwerków. Nie jestem zawodowym programistą PHP i jest to mój pierwszy CMS. Nie znaczy to z drugiej strony, że będzie tam masa register_globals, magic quotes ect. Starałem się korzystać z nowoczesnych rozwiązań.

I teraz druga część dzisiejszego wpisu. Przeprowadziłem właśnie (kolejne już) porządki na stronie. Podjęte działania:

  • skasowanie starej wersji bloga - niektórzy może pamiętają, że kiedyś blog mój znajdował się pod adresem sobak.pl/blog. Instalacja Wordpressa leżała tam aż do dziś
  • odinstalowałem wtyczki All in one SEO Pack i Syntax Highlighter Evoled, z którymi miałem małe problemy. Pytanie na marginesie: zna ktoś z Was dobrą wtyczkę do podświetlania kodu w WP
  • odinstalowałem wtyczkę Google Analytics for WordPress zastępując ją zwykłym wklejeniem kodu do szablonu. Naprawdę niepotrzebny mi skrypt PHP na 3000 linii do wygenerowania ośmiu linii JavaScriptu.
  • kilka mniejszych optymalizacji
  • wycofałem wsparcie dla IE6. Przy udziale tej przeglądarki w Polsce na poziomie 2% uznałem, że mogę z czystym sumieniem usunąć hacki na tą przeglądarkę

Ogłoszenia parafialne zakończone. O tym, czy Mojżesz uratował się z potopu dowiecie się w następnym odcinku ;)

[PHP] Pobranie najnowszych wpisów z WordPressa

W tym wpisie przedstawię prosty skrypt pobierający ostatnie wpisy z bloga opartego na WordPressie. Skrypt powinien działać co najmniej na wszystkich WP z gałęzi 3.x

Prezentuję dwie leciutko się różniące wersje pod wyświetlanie dokładnie jednego ostatniego wpisu i wyświetlaniu określonej ilości ostatnich wpisów.

Wersja na jeden wpis

<?php
// Database config
$db['host'] = 'serwer_twojej_bazy';
$db['user'] = 'nazwa_usera';
$db['pass'] = 'haselko';
$db['name'] = 'nazwa_bazy_danych';

@mysql_connect ($db['host'], $db['user'], $db['pass']) or die ('Nie udało się połączyć z bazą danych');
@mysql_select_db ($db['name']) or die('Nie udało się wybrać bazy danych.');

// Get title of newest post
$query = mysql_query ("SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT 1") or die ('Nie udało się pobrać najnowszego wpisu');

$row = mysql_fetch_array ($query);
$post_title = $row['post_title'];
echo $post_title;
mysql_close();

Wersja na wiele wpisów

<?php
// Database config
$db['host'] = 'serwer_twojej_bazy';
$db['user'] = 'nazwa_usera';
$db['pass'] = 'haselko';
$db['name'] = 'nazwa_bazy_danych';
// Other config
$num_posts  = '5';

@mysql_connect ($db['host'], $db['user'], $db['pass']) or die ('Nie udało się połączyć z bazą danych');
@mysql_select_db ($db['name']) or die('Nie udało się wybrać bazy danych.');

// Get titles of newests posts
$query = mysql_query ("SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT $num_posts;") or die ('Nie udało się pobrać najnowszego wpisu');

echo '<ul>';
while ($row = mysql_fetch_array ($query)) {
   echo "t<li>";
   echo $row['post_title'];
   echo "</li>n";
}
echo '</ul>';

mysql_close();

Sercem obu tych skryptów jest jedno zapytanie czyli:

SELECT `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_type`='post' ORDER BY `post_date`  DESC LIMIT *

różnicą jest jedynie różna wartość ustawienia LIMIT. W pierwszym skrypcie wynosi ona oczywiście jeden, ponieważ pobieramy tylko jeden wpis, a więc tylko jeden rekord. W drugim zaś zależy od ustawienia odpowiedniej zmiennej $num_posts w konfiguracji skryptu.

Oba warianty skryptu różnią się też oczywiście sposobem wyświetlenia pobieranych danych. W pierwszym jest to zwyczajne wywołanie funkcji mysql_fetch_array, w drugim zaś wypadku jest ona użyta w pętli, a wpisy pokazywane są jako lista nieuporządkowana, co można dość łatwo zmodyfikować do swoich potrzeb.

Przedstawione skrypty stanowią tylko swoisty "rdzeń". Musimy oprawić je w ramy dokumentu HTML i ewentualnie możemy ustawić dla nich style CSS.

Zdaję sobie sprawę, że przedstawione skrypty dla wielu osób mogą się wydawać banalne i źle napisane (przecież nie użyłem PDO i miliona wyjątków), ale mam nadzieję, że choć dla jednej początkującej osoby ten prosty skrypt stanie się jakąś bazą do dalszego eksperymentowania z SQL i PHP.

Aktualizacja Sobak's Dev Center

Przed chwilą odbyła się aktualizacja mojego Dev Center gromadzącego moje projekty programistyczne. Zostały dodane następujące skrypty, które od dwóch dni leżały na warsztacie:

  • Youtube Viewer - skrypt pozwala ominąć limity wieku na YT! Pozwala też odciążyć przeglądarkę minimalizując kod HTML i nie używając JavaScript. Link
  • WP Cleaner - skrypt pozwalający skasować zbędne rekordy z bazy danych WordPressa. Link

Mam nadzieję, że skrypty Wam się podobają. Zapraszam do komentowania! :)

Nowa wersja Sobak's Dev Center

Przed chwilą ukazała się nowa wersja Sobak's Dev Center. Zmiany dotyczyły zarówno samej strony jak i bazy skryptów na niej zawartej.

Zmiany na stronie

  • zmiana sposobu wyświetlania podstron na wydajniejszy i wygodniejszy
  • aktualizacja danych o skryptach
  • poszerzenie boxu z kodem
  • kliknięcie w logo przenosi na stronę główną

Zmiany w bazie skryptów

  • nowa funkcja: share ();
  • nowy skrypt: plan lekcji

Sobak's Dev Center można znaleźć tutaj. Edit: obecnie wszystkie projekty dostępne są przez zakładkę na górze strony.