11 lutego 2008
Chciałbym wszystkim polecić pewien plugin do wordpress dzięki któremu na naszym blogu pojawią się ładnie pokolorowane kawałki kodu z przeróżnych języków programowania. Przykład działania można zobaczyć w niejednym wpisie na tym blogu. Plugin nazywa się iG:Syntax Hiliter. Niestety ostatnia wzmianka o nim na stronie autora pochodzi ze stycznia 2006.
Problem pojawił się u mnie wczoraj gdy pisałem o smarty i coś się knociło z kolorowaniem składni przy komendzie {assign}.
Rozwiązanie jest proste, trzeba zaktualizować GeSHi (Generic Syntax Highlighter). Jest to bardzo zacny skrypt w php, który pozwala kolorować składnię ponad siedemdziesięciu języków programowania
I ciągle dochodzą nowe.
Aktualizacja jest banalna, trzeba przekopiować i nadpisać plik geshi.php oraz katalog geshi ze skryptu GeSHi do naszego pluginu.
Jednak z ciekawości poszukałem innych tego typu rozwiązań. Większość korzysta właśnie z GeSHi (np. WP-Syntax lub CodeHighlighter) ale znalazłem też dwa inne, ciekawe projekty.
Pierwszy to coś dla wymagających bo obsługuje ponad 200 języków programowania. Niestety ma poważną wadę ponieważ wymaga zainstalowanego na serwerze edytora tekstowego VIM oraz musimy mieć dostęp do perla. Nazywa się to vimcolor.
Drugi to bardzo ciekawy projekt o nazwie SyntaxHighlighter. Sam plugin to nic nadzwyczajnego ale korzysta on z czegoś co nazywa się identycznie jak plugin i działa w czystym Java Script! Prawda, że bardzo wygodne?
Stronę projektu skryptu w JS znajdziemy tutaj. Wygląda to i działa bardzo fajnie. Jedyną wadą jest mała ilość obsługiwanych języków ale dla większości osób możliwości są wystarczające.
Ja już nie będę eksperymentował, zostanę przy moim pluginie ale jeżeli ktoś dopiero zamierza dodać kolorowanie składni do swojego bloga to zachęcam do sprawdzenia kilku skryptów.
11 lutego 2008
Przyczepie się jeszcze raz do smarty
Byłem i nadal jestem pod dużym wrażeniem możliwości tego systemu szablonów ale niestety okazuje się, że i tutaj są pewne niedoróbki. Poprzedni problem (Smarty: {include} i widoczność zmiennych) można opisać jako świadomy wybór twórców smarty. Szkoda tylko, że nie dali żadnego wyboru programistom. Natomiast to o czym chcę dzisiaj napisać to już wyraźna luka w tak przecież bogatych możliwościach tego systemu.
A chodzi o {assign}. Ta prosta komenda pozwala stworzyć zmienną bezpośrednio z poziomu szablonu. Działa to tak:
SMARTY:
-
{assign var=
'zmienna' value=
'test'}
-
Właśnie stworzyliśmy zmienną $zmienna o wartości {$zmienna}
Wyświetli nam się to:
CODE:
-
Właśnie stworzyliśmy zmienną $zmienna o wartości test
Jak widać, zastosowanie jest banalnie proste. Ale jakie było moje zaskoczenie gdy okazało się, że nie mogę w ten sposób stworzyć tablicy! To naprawdę zadziwiające biorąc pod uwagę, że smarty ma doskonale zaimplementowany mechanizm tablic. Próbowałem różnych sposobów, wymienię chociażby dwa najbardziej sensowne:
SMARTY:
-
{assign var=
'zmienna' value=array
(0=>
'test')}
-
{assign var=
'zmienna[0]' value=
'test'}
Czytaj dalej »
11 lutego 2008
Do projektu nad którym teraz siedzę specjalnie wybrałem system szablonów Smarty bo wiedziałem, że będę miał przeróżne dziwaczne potrzeby a Smarty jest bardzo rozbudowane i nie powinno być problemów ze spełnieniem moich zachcianek. Dlatego bardzo byłem zaskoczony gdy się okazało, że wszystko wywala się na banalnym problemie...
Smarty pozwala w jednym szablonie dołączyć inny szablon. Służy do tego komenda {include}. Działa to tak samo jak include w php. A tak przynajmniej do dzisiaj sądziłem...
Prosty przykład użycia {include}:
Plik index.tpl
SMARTY:
-
Jakiś tekst, html etc.
-
-
reszta dokumentu
W ten prosty sposób w miejscu użycia {include} pojawia się zawartość szablonu test.tpl.
Pójdźmy dalej. Załóżmy, że chcemy przekazać do test.tpl jakąś zmienną. Można to osiągnąć przy pomocy samej komendy {include} (zapraszam do dokumentacji) ale skoro to ma działać tak samo jak w php to powinno zadziałać coś takiego:
Plik index.tpl
SMARTY:
-
{assign var=
'zmienna' value=
'wartość zmiennej'}
-
Plik test.tpl
Krótkie objaśnienie. W pliku index.tpl inicjujemy zmienną $zmienna o zadanej wartości, następnie dołączamy szablon test.tpl i wyświetlamy w nim tą zmienną. Działa? Działa 
A więc już wiemy, że w includowanych szablonach są widoczne zmienne wcześniej zainicjowane.
A teraz odwrotny przykład:
Plik index.tpl
Plik test.tpl
SMARTY:
-
{assign var=
'zmienna' value=
'wartość zmiennej'}
W pliku index.tpl dołączamy szablon test.tpl a w nim inicjujemy zmienną $zmienna. Następnie, już po zaincludowaniu szablonu, chcemy wyświetlić zmienną $zmienna, która przecież przed chwilą została zainicjowana. I tu niestety pojawia się problem... Zmienna z pliku test.tpl NIE została przekazana do pliku index.tpl. Nic nam się nie wyświetli.
Czytaj dalej »
03 lutego 2008

Przykładowa sytuacja. Masz klienta pocztowego i kiedyś go skonfigurowałeś aby odbierał Twoją pocztę. Robisz tak już od roku albo i dłużej, przez ten czas zapomniałeś hasła do e-maila a nadchodzi czas reinstalacji systemu. Na nowym systemie trzeba będzie ponownie skonfigurować pocztę ale jak to zrobić skoro nie pamiętasz hasła?
Widzisz te tajemnicze gwiazdki ***** za którymi kryje się Twoje hasło, czujesz, że wystarczy po nie sięgnąć ręką, czujesz jak jest blisko i... dupa
Za nic w świecie nie możesz go sobie przypomnieć a program pocztowy nie ma żadnej wbudowanej opcji dzięki której można podejrzeć zapisane hasło.
Czytaj dalej »
02 lutego 2008
Właśnie coś sobie tworzę i zaszła potrzeba pobierania i obrabiania treści z pewnej strony www (nie chodzi o fotka.pl
). Problem w tym, że serwer na którym ta strona stoi jest bardzo kapryśny :/ Często bez powodu wywala błędy 4xx a jeszcze częściej 5xx. Niby obsługuje kompresję gzip ale zdarza się, że zwróci stronę nieskompresowaną :/
Potrzebowałem funkcji, która poradzi sobie z tym wszystkim. Oto ona:
Czytaj dalej »