Currently Browsing: Projects

Zintegrowane logowanie cms z forum

Projektowałem wiele serwisów, które miały zintegrowane z forum komponenty takie jak:

  • rejestracja,
  • przypomnienie hasła,
  • zmiana hasła, nicku lub adresu email,
  • usunięcie konta.

Wówczas nie było żadnego problemu – wystarczyło wszystkie te akcje z forum przekierować na URL’e obsługiwane przez CMS, który zajmował się zmianami  tabelach forum. Dlaczego przekierować? Jeżeli ktoś rejestruje się w serwisie, jest zarejestrowany na forum, natomiast, gdy rejestruje się na forum, nie jest rejestrowany w serwisie. To CMS integrujemy z forum, a nie forum z CMS’em (chyba, że zamierzamy inaczej, wtedy na odwrót).

Ostatnio klient zażyczył sobie, żeby zintegrowane było również logowanie. Nie najlepiej widzi mi się implementacja systemu autoryzacji z forum w CMS’ie, więc poszedłem “na łatwiznę”, bowiem miałem do czynienia z phpBB. Do osiągnięcia celu postanowiłem wykonać dwa kroki:

  1. wysłać żądanie POST do forum na adres logowania z wypełnionymi polami POST z formularza logowania w CMS’ie,
  2. przechwycić wysłane przez forum ciasteczka i przekazać je użytkownikowi.

Do połączenia się z forum via http użyłem HttpRequest. Wyszło z tego parę linijek kodu.

Upload filmów z Zend_Gdata_YouTube

Pisząc nowy projekt natknąłem na problem z procesem uploadu filmiku do serwisu YouTube. Sam upload jest bardzo łatwy do napisania z Zend_Gdata_YouTubeprzykład można znaleźć w manualu. Myślę, że zainteresowani przeczytają manual i wszystko będzie jasne. Więc jeżeli to takie proste, to w czym problem?

Zakładamy, że userzy uloadują filmiki bezpośrednio na nasz serwis. Nasz serwer ma za zadanie:

  1. Skompresować video i zapisać go w formacie flv.
  2. Nałożyć watermark.
  3. Wysłać obrobiony film do serwisu Youtube logując się na zdefiniowane przez użytkownika konto lub założone przez administratora strony.

Pierwsze 2 kroki wykonają się błyskawicznie w porównaniu do trzeciego. Kompresja i nałożenie watermarku na 30 megowy plik z wykorzystaniem FFMPEG to nic nadzwyczajnego. Natomiast wysyłka pliku na serwery Youtube’a może zawiesić apache’a, gdy jest ich kilka.

Rozwiązanie? Wpadłem na pomysł, aby upload filmików ustawiony był w pewnego rodzaju kolejce, która uruchamiana by była co minutę (cron), a czas jednego wysłania elemntu nie mógłby przekroczyć 50 sekund. Oczywiście takie działanie uruchamiałoby swój osobny proces apache’a. Ten sposób jest ograniczony dwoma limitami: wielkością pliku oraz czasem jego uploadu na serwer (jednocześniem interwałem uruchamiania kolejki).

Google Analytics for WordPress

Od niedawna na moim blogu można dostrzec nową zakładkę: GoogleAnalytics plugin.

Wtyczkę stworzyłem dla siebie, ma ona na celu dodanie kodu Javascript generowanego przez Google Analytics do kodu HTML, bezpośrednio przed tagiem </body>. Po aktywacji pluginu w dziale ustawień pojawi się nowa podstrona umożliwiająca wpisanie ID statystyk. I wszystko sprowadza się do prostoty.

Szczerze powiedziawszy wtyczkę napisałem z lenistwa (paradoks) – nie chciało mi się szukać gotowego rozwiązania (których istnieje zapewne milion), a przy zmianie szablonu umknął mi fakt, że kod JS został wklejony “na sztywno” do pliku szablonu footer.php. Gdy chciałem sprawdzić statystyki, wyświetlił mi się pusty wykres.

Napisanie jej zajęło mi 10 minut (sic! z zegarkiem w ręku) i dużą satysfakcję z wykorzystania API wordpressa. GoogleAnalytics plugin został dodany do oficjalnego katalogu pluginów oraz otrzymał repozytorium SVN (które jest puste – wtyczka nie będzie dalej rozwiaja, bo ma być taka prosta, jak jest teraz).

dev.php.pl

Dziś opublikowałem specyfikację usługi dev.php.pl. Zainteresowanych zapraszam na forum.

Warto podkreślić, że Zarząd PHP.pl nie będzie budował usługi sam, tylko z uzytkownikami dostosowywujac się do ich potrzeb.

Po co to wszystko? Forum przegląda masę talentów, które niestety nie mogą się wykazać. Poprzez dołączenie domeny dev otworzymy furtkę tym, którzy nie mieli okazji przedstawić swoich możliwości, a patrząc na niektóre projekty można dostrzec tylko namiastkę umiejętności programowania i co najważniejsze – pomysłowości – naszego community. Dodatkowo wortal php.pl będzie starał się promować najlepsze projekty poprzez wymienienie ich tytułów i innych materiałów na stronie głównej nowopowstałego serwisu.

WordPress sitemap plugin

Na potrzeby pewnego projektu o pewnej nazwie, o której niebawem się przekonacie, powstał nowy plugin. Generuje on sitemapa przyjaznego dla Google. Po co to wszystko… Rejestrując się w google mamy możliwość skorzystać z wielu narzędzi webmastera. Jednym z nich jest “pomaganie” robotowi w indeksowaniu naszej strony, poprzez podanie mu sitemapu po którym powinien się poruszać. Po zweryfikowaniu naszej strony w systemie google, proszeni jesteśmy o podanie sitemapu (więcej o weryfikacji).

W tym miejscu z pomocą przychodzi nam WordPress ContexlinkSitemap Plugin. Plugin przede wszystkim:

  • tworzy mapę witryny uwzględniając wszystkie notki i podstrony na blogu oznaczone jako “published”,
  • uwzględnia strukturę permalinków, URL’i przyjaznych dla wyszukiwarek sprecyzowanych w konfiguracji bloga
  • datę ostatnich zmian na stronie głównej oraz w każdym linku z osobna
  • dostosowany do mapy google:
    https://www.google.com/webmasters/tools/docs/pl/protocol.html
  • jest bezpłatny : -)

Instalacja pluginu:

  1. Pobierz paczkę pluginu stąd (format ZIP)
  2. Folder ContextlinkSitemap skopiuj do folderu wp-content/plugins/
  3. Plik sitemap.xml skopiuj do folderu głównego bloga i nadaj mu chmod 777
  4. Aktywuj plugin w zakładce Plugins wpanelu administracyjnym bloga

Dodanie mapy witryny do google:

  1. Zaloguj się na google.com na swoje Google Account lub Gmail Account.
  2. W nagłówku strony głównej google.com przejdź w sekcję “Moje konto”
  3. Z listy “Moje usługi” wybierz pozycję “Narzędzia dla webmasterów”
  4. Dodaj swoją stronę.
  5. Wybierz formę weryfikacji strony i postępuj ze wskazówkami google
  6. Gdy strona pojawi się w tabeli oraz jej status zostanie oznaczony jako “zweryfikowana”, kliknij w opcję “Dodaj mapę” i podaj adres URL mapy strony (defaultowo http://twojblog.pl/sitemap.xml, czyli tam, gdzie wrzuciłeś plik).

Dodatkowa konfiguracja:

W celu szczegółowej konfiguracji pluginu, możesz:

  • zmienić ścieżkę mapy w stałej CONTEXLINK_MAP_FILE
  • zmienić częstotliwość automatycznej aktualizacji mapy w stałej CONTEXLINK_MAP_UPDATE, wartość podawana w sekundach, defaultowo co 2 dni: 3600 * 24 * 2.
  • zmienić miejsce wykonywania aktualizacji, zwykle jest to przy ładowaniu sekcji head na blogu. Aby dokonać zmian, należy zmienić miejsce akcji: add_action(‘wp_head’, ‘ContexlinkSitemapAutogenerate’); Pełną listę miejsc, w których można wykonać operację możesz znaleźć tutaj: http://codex.wordpress.org/Plugin_API/Action_Reference

ModRewriteString

Kiedyś napisałem klasę ModRewriteString, którą opublikowałem na łamach forum.php.pl, która ma sprowadzić polskie, niemieckie i czeskie znaki do zwykłych liter, na przykład ą do a, ż i ź do z, itd. Na potrzeby jednego z moich projektów (portalu) została ona użyta na kodowaniu UTF-8. Okazało się, że klasa akceptuje tylko kodowania WINDOWS-1250 i ISO 8859-2. Ze znaków zakodowanych przez UTF robił się znak nieodczytywalny, potocznie zwany “krzak”. Problem został oznaczony jako bug najwyższego stopnia, klasa trafiła natychmiastowo do analizy. Z pomocą przyszła dokumentacja na temat Multibyte String Functions (rozdział LXXXV) dostępna w podstawowych rozdziałach oficjalnej dokumentacji języka PHP:
http://pl2.php.net/manual/pl/ref.mbstring.php
Ponadto cały dokument z klasą był zakodowany w formie ASCII, co jest niedorzeczne w tego typu działaniach. Plik zawierający klasę został ujęty w formie UTF-8 – uniwersalnego kodowania, które można bez problemu odkowodać.

Zmiany objęły tylko metodę Rewrite(), przyjmuje ona dodatkowy, nieobowiązkowy drugi parametr, który ustawia tryb pracy klasy na podane kodowanie. Gdy parametru nie podamy, lub otrzyma wartość null, wówczas kodowanie zostanie ustawione automatycznię poprzez analizę podanego ciągu znaków przez funkcję mb_detect_encoding(). Kodowanie jest o tyle ważnym elementem, gdyż zostaje podane wewnątrz klasy w funkcjach mb_strtolower() oraz mb_strlen(), odpowiedzialnych za poprawne wykonanie zadania metody.

Dodana została linijka odpowiedzialna za przerwania działania klasy juz na samym początku. Sprawdzane zostaje załadowane rozszerzenie “mbstring”, odpowiedzalne za Multibyte String Functions. Gdy rozszerzenie nie zostanie załadowane, konstruktor wyrzuca wyjątek pierwotnej klasy Exception:

[php]if(!extension_loaded(“mbstring”))
throw new Exception(‘MbString has not been enabled yet!’);[/php]

Wersja klasy została oficjalnie uznana za stabilną, nadany jest jej numerek 0.0.5.

Zastosowanie klasy:

[php]echo ModRewriteString::Rewrite(‘żółw, ktróy przez zboże się ślimaczy’);[/php]

Pobierz ModRewriteString 0.0.5