Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: sokzzuka, dodany: 07.12.2010 08:42, tagi: php

W jednym z ostatnich wpisów na internalsach, Loon var Reinier zgłosił propozycje RFC pt. ‘__autodefine’. Postuluje ona generalizację mechanizmu autoloadera i rozszerzenie go również m.in o funkcje, stałe i przestrzenie nazw.  Polegałby on na zdefiniowaniu funkcji __autodefine o parametrach ($nazwa, $typ), gdzie $nazwa to nazwa brakującego elementu, natomiast $typ to jedna ze stałych w rodzaju T_FUNCTION, T_CONST etc. Jako uzupełnienie funkcji __autodefine proponowane jest dodanie również funkcji spl_autodefine_register o działaniu analogicznym do spl_autoload_register.

Osobiście uważam, że pomysł jest dobry i przydatny. Jestem tylko zdania, że zarówno mechanizm autoload jak i autodefine powinien być używany tylko per przestrzeń nazw, aby uniknąć konfliktów.

A wy co o tym sądzicie :> ?

Autor wpisu: Athlan, dodany: 06.12.2010 16:17, tagi: xhtml, internet

Ostatnimi czasy tworząc projekty coraz częściej zwracam uwagę na usability, poprawiając przy tym grafików. Dziś krótko, bo o tym, jak dostosować nagłówki <meta>, aby jak najlepiej były przeklejane do okienka udostępniania linków na Facebook’u.

Czasem cennymi danymi są te, które widzi Google oraz użytkownik (meta description i bezpośrednio w pasku przeglądarki title), czasem zależy nam na dostosowaniu prezentacji danych agregatorów, w naszym przypadku Facebook’a, aby użytkownik wklejając linka nie musiał się dodatkowo w nic angażować.

  1. Wykryj, czy odwiedza Cię Facebook
    if(preg_match('/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT']))
  2. Dostosuj swój meta description. Pamiętaj, że Facebook ucina spore części tekstów, dlatego sprecyzuj najbardziej chwytliwe fragmenty contentu, które mogą przyciągnąć użytkownika. Dodatkowo możesz zmodyfikować title dodając do niego dziwne znaczki (encje), które na pewno przyciągną wzrok.
  3. Przygotuj odpowiedni obraz o odpowiedniej rozdzielczości, a następnie zaserwuj go w tagu: <link rel="image_src" href=" ... " /> Gdy tego nie zrobisz, użytkownik, który przekleja linka będzie sam musiał zdecydować o obrazie, który zostanie mu zaproponowany z puli dostępnych na stronie. Ta praktyka na szczęście jest często wykorzystywana przez programistów, wydaje się być trywialna.
  4. Jeżeli chcesz wyeksponować ramkę Facebook’a na swoją stronę www, ustaw transparentność na iframe. Wbuduj ją w diva i nie zapominaj o możliwościach CSS takich jak position: absolute; position: relative; top: -1px; left: -1px; overflow: hidden; aby ukryć czasem kłopotliwe obramowanie iframe’a.

Efekt? Sprawdź sam na Nowiny365.pl.

Autor wpisu: Śpiechu, dodany: 05.12.2010 21:32, tagi: zend_framework, php

Dzisiaj będzie coś dla wielbicieli Zend Frameworka. A dokładniej coś, z czym mamy do czynienia przetwarzając jakikolwiek formularz, czyli walidatory. Walidacja, a więc sprawdzanie czy wprowadzone przez użytkownika dane odpowiadają pewnemu schematowi jest obok filtracji, czyli wyrzucaniu zbędnych/niebezpiecznych rzeczy z danych chyba najważniejszą sprawą przy tworzeniu witryn WWW.

Zend Framework dysponuje zestawem kilkudziesięciu walidatorów, które można łączyć w łańcuchy przy walidowaniu poszczególnych pól formularza, np. pytając o wiek użytkownika pole musi zawierać wyłącznie liczby, czyli aż prosi się o Zend_Validate_Digits, a następnie należy sprawdzić czy podana liczba znajduje się w jakimś ludzkim przedziale, tzn. powiedzmy pomiędzy 1 a 100, co załatwi za nas Zend_Validate_Between.

Co w przypadku jeżeli musimy dopasowywać coś, czego nie przewidzieli twórcy ZF? Możemy napisać własny walidator.

Każdy walidator musi implementować interfejs Zend_Validate_Interface, czyli dwie publiczne metody:

  • isValid($value) — zwracająca buliona prawda/fałsz
  • getMessages() — zwracająca tablicę komunikatów co jest nie tak z wartością testowaną w isValid(). Komunikaty zwracane są w postaci kod_błędu => komunikat_w_ludzkiej_formie

W celu uniknięcia babrania się obsługą błędów i komunikatów twórcy ZF stworzyli abstrakcyjną klasę Zend_Validate_Abstract, która zrobi za nas większość brudnej roboty. Pozostanie nam tylko napisanie właściwej logiki co ma być sprawdzane i ewentualnie jaki błąd zgłaszany.

Na potrzeby swojej aplikacji napisałem własny w miarę uniwersalny walidator, który sprawdzi czy klucz podstawowy danej tablicy istnieje. Może mieć zastosowanie jeżeli ktoś sprawdza czy np. identyfikator wybranej przez użytkownika kategorii istnieje w bazie.

Poniżej przedstawiem kod z objaśnieniami po co coś jest. Po przeczytaniu stwierdzicie, że pisanie walidatorów to fajna zabawa :-)

<?php
// rozszerzamy klasę abstrakcyjną dla walidatorów
class Spiechu_Validators_IsIdExists extends Zend_Validate_Abstract {     
 
  // definiujemy kody błędów i jakieś wartości dla nich
  const IDNOTEXISTS = 'idnotexists';
  const EMPTYSTRING = 'emptystring';
  const NULLVALUE = 'nullvalue';
 
  // definiujemy tablicę komunikatów błędów dla poszczególnych kodów
  // zwracam uwagę na '%value', które może być w locie zamienione na sprawdzaną wartość
  protected $_messageTemplates = array(
    self::IDNOTEXISTS   => "id '%value%' not exists",
    self::EMPTYSTRING  => 'given value is empty',
    self::NULLVALUE     => 'given value is null'
  );
 
  // zmienna typu Zend_Db_Table_Abstract, której klucz będziemy testować
  protected $_table;
 
  public function __construct(Zend_Db_Table_Abstract $table) {
    $this->_table = $table;
  }
 
  public function isValid($value) {
 
    // sprawdzamy czy zmienna nie jest nulem, a jeżeli tak to ustawiamy błąd
    if ($value === null) {
      $this->_error(self::NULLVALUE);
      return false;
    }
 
    // to samo dla pustego stringa
    if ($value === '') {
      $this->_error(self::EMPTYSTRING);
      return false;
    }
 
    $value = (int) $value;
 
    // ustawiamy wartość dla ewentualnego komunikatu %value%
    $this->_setValue($value);
 
    // metoda find szuka po kluczu podstawowym i zwraca rowset wyników
    $foundRows = $this->_table->find($value);
 
    // jeżeli nic nie znaleziono tzn. że sprawdzany klucz nie istenieje w tabeli bazy
    if (count($foundRows) == 0) {
      $this->_error(self::IDNOTEXISTS);
      return false;
    }
    else {
      return true;
    }
  }
}

Wszystko działa na tyle automagicznie, że tworząc jakiś element formularza wystarczy dodać stworzony walidator np. tak:

$formElement = new Zend_Form_Element_Select('pole_formularza');
$formElement->setRequired(true)
  ->setLabel('Jakaś etykieta')
  ->setMultiOptions($dane_do_wyboru)
  ->addValidator(new Spiechu_Validators_IsIdExists(new Sprawdzana_Tabela()));

Autor wpisu: batman, dodany: 03.12.2010 08:26, tagi: jquery, javascript

Pluginów jQuery, których zadaniem jest wyświetlanie kolejnych zdjęć w postaci karuzeli (slidera) jest mnóstwo. Sam nawet popełniłem jedną karuzelę na własne potrzeby. Ostatnio wpadł mi w ręce kolejny plugin oferujący wspomnianą funkcjonalność i po pierwszych testach muszę przyznać, iż spełnia wszystkie moje potrzeby. Wprawdzie nie miałem jeszcze okazji skorzystać z niego w środowisku produkcyjnym, jednak nieśmiało można założyć, iż nie powinno być z nim większych problemów.

Slides, bo o nim mowa, został dokładnie przemyślany i oferuje szereg niezbędnych funkcjonalności. Do najpotrzebniejszych/najciekawszych można zaliczyć:

  • możliwość ustawienia loadera dla elementów w karuzeli
  • możliwość określania elementu, od którego rozpoczynać się będzie karuzela
  • możliwość określenia efektu przejścia (na razie jest to tylko slide lub fade)
  • możliwość losowego wyświetlania elementów

Nie są to jedyne możliwości oferowane przez Slides. Pełną ich listę, jak również przykłady i pliki do pobrania znajdziecie na stronie projektu - http://slidesjs.com/.

Autor wpisu: Zyx, dodany: 02.12.2010 13:15, tagi: php

Doctrine to obecnie chyba najpopularniejsza biblioteka ORM dla PHP 5.2.x, chętnie wybierana zarówno przez zwykłych programistów, jak i twórców frameworków. Od jakiegoś czasu trwają prace nad zupełnie nową wersją 2.0, która została zaprojektowania od nowa i przyniosła znaczące uporządkowanie architektury. Od kilku miesięcy biorę aktywny udział w jej testowaniu i debugowaniu, dlatego przez ten czas udało mi się wyrobić już pewien sensowny osąd na jej temat, który chciałbym zaprezentować, by już teraz pomóc w odpowiedzi na pytanie "czy warto się przesiadać".

Autor wpisu: matipl, dodany: 01.12.2010 08:09, tagi: php

Zend FrameworkNo proszę, mimo czarnego listopada w Polsce na sam koniec miesiąca ukazała się połatana wersja Zend Frameworka oraz WordPressa.

Wczoraj wieczorem ukazała się wersja Zend Framework 1.11.1 (changelog) zawierająca wyłącznie łaty na znalezione błędy – łącznie 80. Nowa wersja ZF rozwiązuje m.in. problem z routingiem, poprawia obsługę YAML, włącza obsługę memcached w Zend_Cache_Backend.

Tego samego polskiego wieczoru ukazała sie poprawiona wersja WordPressa z linii 3.0 – WordPress 3.0.2. Tak jak w ZF skupiono się tutaj wyłącznie na łataniu znalezionych błędów. W sumie poprawiono 10 błędów (lista zmian), w tym dość ważny – poprawienie problemu zabezpieczeń, w przypadku gdy użytkownik z poziomem Autor mógł zdobyć dostęp do serwisu. Obecnie nie ma jeszcze aktualizacji dla polskiej wersji.

Wszystkim dotychczasowym użytkownikom ZF 1.11 oraz WordPress 3.0 zalecam aktualizację.

Autor wpisu: Vokiel, dodany: 30.11.2010 22:58, tagi: javascript, css

Firebug Logo

źródło: http://getfirebug.com/wiki/index.php/File:Flaming-firebug-logo-with-text.png przez Johnjbarton

Firebug Working Group (dumnie) ogłosił wydanie Firebug 1.6.0. Dostępny jest do pobrania ze strony getfirebug.com oraz z https://addons.mozilla.org. Prace nad następnymi wersjami są już w toku. Pojawienie się takich narzędzi jak Opera Dragonfly oraz Firebug zrewolucjonizowało sposób debugowania aplikacji, stron www. Szczególne uznanie należy się właśnie dla Firebug’a, którego design, funkcjonalność, sposób działania jest rewelacyjny. Wg mnie jest to najlepszy dodatek dla webmastera, a ponadto jest to najlepszy dostępny dodatek tego typu.

Główne zmiany

CMD On Script Panel

źródło: http://www.softwareishard.com/blog/firebug/firebug-16-command-line-available-on-all-panels/

Konsola i linia poleceń

Przycisk aktywujący linię komend został wyciągnięty przed panele, dzięki czemu jest teraz dostępna z każdego panelu. Ułatwi to znacznie pracę podczas debugowania kodu JavaScript, gdy wykonywanie kodu zostanie zatrzymane przez błąd. Możliwe wtedy stanie się sprawdzenie wartości zmiennej, czy szybkie wykonanie jakiegoś kodu js bez przełączania się do innego panelu.

Dodano filtrowanie wiadomości pojawiających się w konsoli według ich rodzaju (błędy, ostrzeżenia, informacyjne)

console.table()

źródło: http://www.softwareishard.com/blog/firebug/tabular-logs-in-firebug/

Nowa komenda console.table(), która powoduje wyświetlenie w konsoli zmiennej tablicowej jako zwykłej tablicy – z kolumnami i wierszami. Definicja metody jest następująca: console.table(object[, columns]);. Kod powodujący wyświetlenie tabelki ze zrzutu ekranu:

1
2
3
4
5
var table1 = new Array(5);
for (var i=0; i<table1.length; i++){
    table1[i] = [i+1, i+2, i+3, i+4, i+5, i+6, i+7];
}
console.table(table1);

Zmian wprowadzonych do konsoli jest dużo więcej , są to m.in.:

  • Grupowanie wyników konsoli w rozwijalne bloki przy użyciu
    console.groupCollapsed("This is my table");
    console.table(table1);
    console.groupEnd();
  • Sortowanie wyników tabeli wyświetlonej w konsoli
  • Wyświetlanie zmiennych złożonych typów. Teraz Firebug lepiej radzi sobie z wyświetlaniem obiektów, elementów DOM itd
  • Wyświetlanie danych tabelo-podobnych. Firebug radzi sobie nie tylko z tablicami, ale także z listą obiektów, które reprezentują tą samą strukturę:
    function Person(firstName, lastName, age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }
     
    var family = {};
    family.mother = new Person("Susan", "Doyle", 32);
    family.father = new Person("John", "Doyle", 33);
    family.daughter = new Person("Lily", "Doyle", 5);
    family.son = new Person("Mike", "Doyle", 8);
     
    console.table(family);

    W wyniku otrzymujemy:console.table()

    źródło: http://www.softwareishard.com/blog/firebug/tabular-logs-in-firebug/

    Czytaj dalej tutaj (rozwija treść wpisu)
    Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.