Wordpressowy sidebar bardzo mi się podoba – nie muszę grzebać w kodzie, by coś poprzesuwać, zmieniać. Jednak zanim napiszesz własny prosty widget, pamiętaj, jest jeden mały “myk” ;-) W dokumentacji Widget API napisano, że aby zarejestrować nowy widget należy wywołać (np. w pluginie) register_sidebar_widget(). Szkoda tylko, że ktoś nie wspomniał o tym, że w najnowszych wersjach WP (bodajże od 2.5.x) ta funkcja dołączana jest przez core Wordpressa później niż plugin w związku z tym otrzymujemy piękny komunikat:
Call to undefined function: register_sidebar_widget
“Szybkie” rozwiązanie zostało przedstawione w tym poście, chociaż wydaję mi się trochę błędne, stąd też sadzę, że ten kod jest lepszy:
function widget_becool ($args) {
echo $args['before_widget'];
echo $args['before_title'];
echo ‘Becool!’;
echo $args['after_title'];
// sth
echo $args['after_widget'];
}
function widget_init_becool() {
register_sidebar_widget( ‘Becool’, ‘widget_becool’ );
}
add_action(‘widgets_init’, ‘widget_init_becool’);
Można użyć create_function(), ale myślę, że tak jest czytelniej :-)
Przetrząsając swój dysk w poszukiwaniu zaginionych plików muzycznych, zachciało mi się programu, który to zrobiłby porządek w katalogach układając je wg nazwy artysty i albumu. Nie doszukałem się takiej funkcjonalności w Winampie, a w Googlach nawet nie szukałem. W ramach poświątecznego ruszania mózgiem postanowiłem napisać sobie coś takiego samemu. Wybór padł oczywiście na C#.
Założenie było proste: na podstawie tagów w plikach muzycznych program ma pozakładać katalogi z nazwą artysty i podkatalogi z nazwami albumów oraz przenieść tam pliki.
Na oficjalnej stronie ID3 znalazłem odpowiednie implementacje dla C#. Wybrałem TagLib# ponieważ obsługiwał nie tylko Mp3, ale również Ogg i WMA (oraz jeszcze kilka innych formatów, których nawet nie używam). I tu chciałem zamieścić krótką informację. Skompilowana dll’ka, która jest tam dostępna ma problemy z innymi formatami niż mp3 – należy pobrać najświeższy kod z ichniego svna, wtedy wszystko działa.
Pliki:
Wymagany jest .Net 3.5 (nie chciało mi się zmieniać projektu na dwójkę… ;-) )
Features:
- obsługa Mp3, Ogg i WMA
- możliwość wprowadzenia własnych wzorców nazw katalogów
- ubogi design ;-)
Known bugs:
- niestety, TagLib# ma problemy z polskimi literami w tagach ID3v1 – rozwiązaniem jest używanie tylko IDv2 lub przymknięcie oka na “krzaczki” w nazwach katalogów ;-)
Licencja: WTFPL
W C# istnieje możliwość utworzenia statycznego konstruktora, który jest uruchamiany przy pierwszym odwołaniu do danej klasy. Wygląda to mniej więcej tak:
public class Foo
{
static Foo()
{
System.Diagnostics.Trace.Write(“Klasa Foo zostala zaladowana”);
}
}
Zdarza się, że podobna funkcjonalność przydałaby się w PHP, który jednak tej konstrukcji nie obsługuje. Można to jednak w prosty sposób “zasymulować” poprzez odpowiednie zmodyfikowanie “magicznej” funkcji __autoload() oraz dodanie statycznej metody do klasy, która będzie udawać konstruktora (w moim przykładzie użyłem nazwy staticConstruct).
class Foo
{
public function __construct()
{
// ‘normalny’ konstruktor
}
public static function staticConstruct()
{
echo ‘Klasa Foo zostala zaladowana’;
}
}
function __autoload($className)
{
// obsluga zaladowania klasy
// …
// …
if(is_callable(array($className, ’staticConstruct’)))
{
call_user_func(array($className, ’staticConstruct’));
}
}
Jak widać sposób implementacji jest wręcz trywialny. Niemniej pojawia się dwie kwestii, które trzeba wyjaśnić:
- statyczny konstruktor jest publiczny przez co można wywoływać go w kodzie – można ten problem rozwiązać poprzez wprowadzenie odpowiedniego statycznego pola typu boolean, które będzie sprawdzane przez owy konstruktor – nie jest to do końca “eleganckie” rozwiązanie, niemniej innego sposobu nie dostrzegłem
- statyczny konstruktor w klasie dziedziczącej nie musi (i nie jest to nawet wskazane) wcale wywoływać konstruktora z klasy nadrzędnej, bowiem zostanie on samodzielnie wywołany przez __autoload() w czasie ładowania klasy
Firebug jest jednym z najlepszych pluginów dla Firefoksa – jeśli nie w rankingu ogólnym, to na pewno ma uznanie wśród osób tworzących witryny. Dla IE powstał trochę ubogi (jak sama przeglądarka) Developer Toolbar, jednak brakowało jakiś porządniejszych narzędzi dla Opery.

Od kilku dni sytuacja się trochę zmieniła. Po szumnych zapowiedziach w końcu mamy wersję alpha nowego dodatku dla owej przeglądarki – Dragonfly. Napisany w JavaScripcie i uruchamiany jako dodatkowe okno jest jednak trochę ‘przereklamowany’. Oczywiście zdaję sobie sprawę, że nie jest to wersja finalna i dużo się jeszcze zmieni, jednak liczyłem na ‘trochę więcej’. Czego mi brakuje?
- większej integracji z samą przeglądarką – coś w stylu opcji ‘Inspect element’ w menu kontekstowym w Firefoksie+Firebug
- edytowanie ‘na gorąco’ atrybutów elementów oraz arkuszy stylów
- podglądanie wysyłanych/odbieranych danych (nagłówki HTTP, dane typu POST, żądania AJAX)
Jeśli powyższe punkty trafią do wersji finalnej, to myślę, że Dragonfly zostanie dobrym konkurentem dla Firebuga :-)