Vframe 2.3.1 relased

Jun 13

Dziś wydana została nowa wersja Vframe oznaczona numerkiem 2.3.1. Większe zmiany:

  • Możliwość tworzenia grup routingów za pomocą wyrażeń regularnych (grupowanie regułek, aby przyspieszyć działanie).
  • Automatyczne wczytywanie konfiguracji Vframe_Router_Advenced::PatternsBuild().
  • Wydzielenie głębi konfiguracyjnej dla kontrolerów (kontroler News_Admin_Vcontroller ma plik: /Configuration/Controllers/Admin/News.php).
  • Zaimplementowanie Cache_Engine (wzorzec fabryki) oraz silników: File, Memcache, APC.
  • Zaimplementowanie Image_Engine (wzorzec fabryki), silnik GD.
  • Zaimplementowanie Db_Layer (wzorzec fabryki), silniki MySQL, SQLite.
  • Zniesiona została stała V_APP oraz V_APP_REAL.
  • Dodanie nowego komponentu Vframe_Mail_Inbox (pobieranie poczty) oraz silnika Vframe_Mail_Inbox_Engine_Imap.
  • Zabezpieczenie unikalnego klucza sesji frameworka, dodanie V_APP_SESSION_HASH.
  • Zmiana struktury Exceptions oraz Interfaces – teraz klasy znajdują się w głównym pliku komponentu, nie posiadają wydzielonych plików.
  • Dodanie pluginu Vframe_Controller_Front_Plugin_Gzip.

Konieczne zmiany w aplikacji:

  • Pliki konfiguracyjne modelu Db_MySQL na Db_Layer_MySQL, analogicznie dla innych baz.

Zalecane zmiany:

  • Wszelkie define() zamienić na Vframe::_() (argumenty analogiczne) oraz załadować główny plik konfiguracyjny po frameworku (aby uzyskać funkcję statyczną _() ).
  • Usunąć V_APP_REAL.
  • Aby użyć pluginu Gzip: $oFrontController->Plugin(new Vframe_Controller_Front_Plugin_Gzip(6)); gdzie 6 to stopień kompresji, jeżeli null, wówczas domyślnie 6.

Linki:

Read More

Style życia na life-styles.pl

May 20

Od niedawna w sieci istnieje nasza strona na konkurs Diversity organizowany przez Motorolę o którym pisałem.

Witryna w dostępna pod adresem life-styles.pl prezentuje style życia z podziałem na kategorie:

  • muzyka,
  • sport,
  • religie,
  • moda,
  • jedzenie.

Wykorzystuje komponent Vframe_Language i nie wymaga bazy danych. Jest to pierwsza (prosta) aplikacja oparta na Vframe 2.x z otwartym kodem źródłowym.

Read More

Vframe 2.2

May 11

Dziś zakończyłem prace nad Vframe 2.2.0. Aktualna wersja nie jest kompatybilna wstecz do wersji 2.1.1.

Przebudowana została struktura stałych frameworka. Dotychczas używał on zwykłych, wbudowanych stałych PHP w celu ustalania kluczowych zmiennych konfiguracyjnych (np. ścieżka kontrolerów). Pojawił sie problem przy tworzeniu aplikacji, gdy ta musiała pobrać pliki konfiguracyjne oraz użyć modeli z kilku innych. Framework powinien działać płynnie, używając wbudowanych rozwiązań, nie martwiąc się o ścieżki. Jak wiemy, nie można nadpisać stałej przypisując jej inną wartość. Taki przypadek został uznany jako jeden z 7 grzechów głównych programisty PHP.

Możliwie były 2 rozwiązania:

  • Implementacja definicji “stałych” używając wbudowanego od wersji 2.0 wzorca Registry.
  • Wdrożenie nowego rozwiązania, poprzez odwołanie się do Vframe::_(); ( public static function _( string $sParam, mixed $mValue ) )

Wybrałem drugie, ze względu na to, że nazwy Registry oraz stałych mogą się przez przypadek pokryć.

Vframe 2.2.0 jeszcze nie jest dostępny do pobrania w repozytorium.

Co w wersji 2.3?

PHP w wersji 5.3 idzie w bardzo dobrym kierunku. Zapowiada się implementacja magicznej metody __callStatic() analogicznej do __call(). Problem będzie w instalacji najnowszej wersji na polskich serwerach. W wersji 5.3 odkryto błąd, który tracił na wydajności (łączenie stringów poprzez znak kropki zużywał dużo więcej pamięci niż poprzez użycie .=). Może to przekona polskie firmy hostingowe do update’u paczki PHP. Póki co, __callStatic() można sobie zadeklarować ręcznie, a do działania wykorzystać eval().

Co za tym idzie klasa Vframe_Loader zostanie przebudowana używając __callStatic();

Read More

Ligipolskie.pl

May 09

Niedawno ukończyłem projekt Ligipolskie.pl (oraz sieć lig: europejska, hiszpańska, niemiecka, włoska, angielska) – każda w innej domenie. Jest to pierwsza oficjalna aplikacja wydana na frameworku Vframe 2 w pierwszej wersji stable (2.1.1).

W chwili obecnej trwają prace nad serwisem Pilka24.com, który ma na celu zebranie wszystkich materiałów ligowych (newsów, felietonów, tabel, itd.) w jedną całość.

Read More

Unikanie zdublowanych tytułów SEO friendly

Mar 01

Często budujemy linki SEO friendly umieszczając tytuły newsów, kategorii, produktów etc. Problemem może być powtarzanie się tytułu (dajmy na to nazwy produktu) zawartego w URL:

http://example.com/nazwa-produktu.html

Oczywiście można to objeść podając ID produktu i kategorii w adresie:

http://example.com/6521,nazwa-produktu.html

Chcemy tego uniknąć. Jak zatem rozwiązać problem zdublowania? Przed rozpoczęciem działań stwórzmy sobie mały plan działania:

  • Zamiana tytułu newsa ze zwykłego na SEO friendly.
  • Pobranie tytułów newsów pasujących do wzorca: LIKE ‘nasz-tytul%’.
  • Dodanie sufiksu do tytułu -2 (jeżeli istnieje -2 wówczas -3), tak aby powstał nasz-tytul-2, nasz-tytul-3 w przypadku powtórzeń.

Krok 1. Stworzenie tytułu SEO friendly (listing).

Krok 2. Pobranie podobnych tytułów z bazy danych (listing).

Krok 3. Dodanie sufiksów do tytułów, jeżeli istnieją podobne, które uniemożliwiają dodanie rekordu (listing).

Teraz zmienna $sRewrite zawiera tytuł SEO, który możemy śmiało wpisać do bazy danych – na pewno sie nie powtórzy :)

Note: Przykłady zostały opisane na bazie mojego frameworka Vframe używając klasy Vframe_Util_Rewrite z której można skorzystać.

Read More

Vframe 2.0, Rewrited Strings

Dec 09

Frameworki najlepiej buduje się podczas wykonywania projektów. W odróżnieniu od Vframe 1.x, druga wersja ma lepiej rozwiązaną kwestię przygotowania ciągu znaków pod adres url (mod_rewrite).

Pierwszym zasadniczym irytującym błędem były podwójne myślniki wynikające z zamiany spacji na myślnik. A co jak będzie ciąg ” – “. Trzy myślniki z rzędu? Nieładnie to wygląda. Do Vframe 2 został dodany util niwelujący ten błąd.

Drugim problemem pisania aplikacji w Vframe 1.x było powtarzanie się takich samych rewrite w bazie. Klasa Vframe_Util_Rewrite obsługuje analizę stringów oraz przygotowuje nowy w ten sposób, aby żaden się nie powtórzył. Z bazy danych należy tylko wyciągnąć stringi LIKE ‘naszstring%’ i podać je klasie w formie tablicy asocjacyjnej. Do nowego stringu zostanie dodany numerek, bądź (uwaga) własny prefix.

Przykłady zastosowań:

http://cpaste.com/4079

Klasa:

http://cpaste.com/4078

Read More