Projektowałem wiele serwisów, które miały zintegrowane z forum komponenty takie jak:
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:
Do połączenia się z forum via http użyłem HttpRequest. Wyszło z tego parę linijek kodu.
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_YouTube – przykł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:
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).
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).
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.
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:
Instalacja pluginu:
Dodanie mapy witryny do google:
Dodatkowa konfiguracja:
W celu szczegółowej konfiguracji pluginu, możesz:
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]