Cóż, Blip mi się jakoś spodobał ;-) Niestety, brakowało mi jednej funkcjonalności – jakiegoś centralnego miejsca ułatwiającego poruszanie się po tagach. Fakt, jest BlipCast, ale nie miał on chmury tagów ;-) Stąd też mając chwilę czasu w kilka godzin (choć na przestrzeni tygodnia) powstał skrypt umożliwiający przeglądanie tagów. Pokazuje on chmurki tagów, ich powiązania między sobą, otagowane zdjęcia oraz użytkowników-top-tagerów.
BlipTags
Jak na razie mój BlipBot bada wiadomości z przed kilku tygodni, dlatego też nowe statusy zostaną przejrzane później.
Ale to brzydkie!
Tak, wiem o tym doskonale. Są to niestety strzępy layoutu zrobionego kiedyś przez Geta dla ‘portaluktóryjużistniećniebędzie’ ;-) Designer ze mnie żaden, tak więc jeśli znalazłaby się jakaś dobra dusza, która poświęci swój jakże cenny czas i zaprojektuje jakiś prosty layout to będę bardzo wdzięczny :-)
Błędy? Pomysły?
Skrypt jest pełen błędów, niedoróbek i uproszczeń. Jeśli taką zauważyłeś lub coś Cię drażni albo masz jakiś inny pomysł – napisz w komentarzu, bądź na GG/Blip.
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 :-)
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