Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Zyx, dodany: 28.01.2011 12:09, tagi: php

Od kilku dni zajmuję się stopniową reaktywacją grupy Invenzzia. Jedną z rzeczy, która wymagała pilnego skodyfikowania, były zasady projektowania API oraz wykorzystywania poszczególnych elementów języka PHP w projektach. Celem jest podniesienie jakości kodu i poprawienie możliwości jego łączenia z innymi aplikacjami oraz bibliotekami. Programiści są różni, każdy ma jakieś swoje własne przyzwyczajenia, dlatego konieczne stało się spisanie zasad, co kiedy (nie) używać i dlaczego. Dzisiaj pragnę zaprezentować pierwszą wersję dokumentu do publicznej oceny.

Autor wpisu: Michal Wachowski, dodany: 27.01.2011 13:23, tagi: framework, mvc, php

Święta, święta i po świętach. Nim człowiek się nacieszył trzeba było wracać do roboty. Jako, że początek nowego roku to czas porządków - klienci, i ci starsi i ci obecni pragną by im coś zmodyfikować czy dobudować.W efekcie, większość czasu spędza

Autor wpisu: JoShiMa, dodany: 26.01.2011 19:25, tagi: skrypty

Skoro już zdefiniowaliśmy wszystkie pliki niezbędne bu nasz WordPress zaczął wyświetlać wpisy, pora na kolejny element, czyli panel boczny (ang. sidebar). Na początek kilka faktów. Po pierwsze zawartość zdefiniowana jest na ogół w pliku sidebar.php (odstępstwa od tej reguły pojawiają się wtedy gdy chcemy mieć więcej niż jeden panel boczny). Po drugie zawartość panelu bocznego [...]

Autor wpisu: batman, dodany: 26.01.2011 08:00, tagi: javascript, jquery

Bezkresny ocean Internetu skrywa wiele skarbów. Od czasu do czasu wyrzuca część z nich na brzeg, pozwalając nacieszyć się ich pięknem. Podobna historia spotkała jQuery Frontier Calendar, opisany jako Full month calendar jQuery plugin that looks like Google Calendar. Zapomniany na wiele miesięcy czekał na odnalezienie.

FrontierCalendar10

Przytoczony we wstępie w języku angielskim opis kalendarza doskonale oddaje jego wygląd. Po kilku drobnych poprawkach nie dałoby się odróżnić go od kalendarza Google’a. W kwestii funkcjonalności niestety różnice są już zauważalne.

Do poprawnego działania jQuery Frontier Calendar wymaga biblioteki jQuery (a dokładniej jej nieco zmodyfikowanej na potrzeby IE wersji), jQuery UI oraz pluginu jshashtable. W zamian otrzymujemy:

  • drad and drop zdarzeń dodanych do kalendarza
  • wsparcie dla formatu iCal
  • możliwość tworzenia zdarzeń rozciągających się na wiele dni
  • możliwość tworzenia handlerów

Do wad kalendarza należy zaliczyć problemy z wydajnością, dosyć kiepską dokumentację, która znajduje się jedynie w archiwum z aktualną wersją pluginu oraz brak dema online.

Jeśli chcielibyście sprawdzić możliwości jQuery Frontier Calendar, znajdziecie go pod adresem http://code.google.com/p/jquery-frontier-calendar/.

Autor wpisu: Śpiechu, dodany: 24.01.2011 20:10, tagi: mysql, php, zend_framework

Ostatnio w ramach sportów wyczynowych majstruję trochę z zapytaniami do bazy danych w Zendzie. Sprawdzam co można wycisnąć z obiektów Zend_Db_Select. Ten wpis zdecydowałem się podzielić na dwie części. W pierwszej pokażę jak wygenerować dosyć złożone zapytanie do bazy danych za pomocą kilku obiektów Zend_Db_Select, a w drugiej zajmiemy się stworzeniem formularza i odebraniem danych.

Naszym celem będzie utworzenie alfabetycznej listy polityków, których wszyscy lubimy wraz z ich powszechnie znanymi pseudonimami, np.

<select>
<option value="1">Donald Tusk</option>
<option value="2">Jareczek (Jarosław Kaczyński)</option>
<option value="3">Jarosław Kaczyński</option>
<option value="4">Słońce Peru (Donald Tusk)</option>
</select>

Najpierw musimy mieć skąd brać naszych wybrańców narodu. Stworzymy sobie bazę danych mniej więcej taką: Obrazek bazy danych polityków zrobiłem fajnym narzędziem online WWW SQL Designer. Schemat jest oczywiście maksymalnie uproszczony. Nie czepiać się, że imiona i nazwiska trzymam w jednym polu. Chodzi nam o relację jeden polityk ma wiele pseudonimów. Macie poniżej trochę kodu SQL wyeksportowanego przez phpMyAdmin plus kilka przykładowych wartości.

CREATE TABLE IF NOT EXISTS `politycy` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imie_nazwisko` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='tabela zawierajaca imiona i nazwiska politykow' AUTO_INCREMENT=3 ;
 
INSERT INTO `politycy` (`id`, `imie_nazwisko`) VALUES
(1, 'Donald Tusk'),
(2, 'Jarosław Kaczyński');
 
CREATE TABLE IF NOT EXISTS `politycy_ksywki` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ksywka` varchar(20) NOT NULL,
  `polityk_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `polityk_id` (`polityk_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='zawiera popularne pseudonimy politykow' AUTO_INCREMENT=3 ;
 
INSERT INTO `politycy_ksywki` (`id`, `ksywka`, `polityk_id`) VALUES
(1, 'Słońce Peru', 1),
(2, 'Jareczek', 2);
 
ALTER TABLE `politycy_ksywki`
  ADD CONSTRAINT `politycy_ksywki_ibfk_1` FOREIGN KEY (`polityk_id`) REFERENCES `politycy` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Następnie spróbujemy sobie wygenerować dosyć spore zapytanie SQL, które za jednym zamachem wypisze wszystkich polityków, wszystkie pseudonimy i dodatkowo w nawiasie wypisze którego polityka który pseudonim dotyczy. Wszystko oczywiście w Zend Framework.

// adapter bazy umieszczony w rejestrze
$dbAdapter = Zend_Registry::get('db');
$select1 = $dbAdapter->select()
   // podstawowa tabela z politykami
   ->from(array('p' => 'politycy'),
          // ktore pola (lacznie z aliasem)
          array('p.id','p.imie_nazwisko'));
// podzapytanie dla ksywek
$subSelect = $dbAdapter->select()  
   ->from(array('pp' => 'politycy'),
          array('pp.imie_nazwisko'))
   // warunek dla podzapytania
   ->where('pp.id = pk.polityk_id')
   // powinno przyspieszyc duze bazy
   ->limit(1);
$select2 = $dbAdapter->select()
   // tabela z ksywkami
   ->from(array('pk' => 'politycy_ksywki'),
          array('pk.polityk_id', 
                // Zend_Db_Expr konieczny przy wywolywaniu funkcji SQL
                new Zend_Db_Expr("CONCAT(pk.ksywka, ' (', ({$subSelect}) , ')')")));
$selectUnion = $dbAdaptery->select()
   // konstruujemy zapytanie typu union
   ->union(array($select1, $select2))
   // szeregujemy wyniki
   ->order('imie_nazwisko ASC');
$stmt = $select->query();
$rowset = $stmt->fetchAll();

Powyższy kod stworzył niczego sobie zapytanie:

SELECT `p`.`id`, `p`.`imie_nazwisko` FROM `politycy` AS `p` UNION SELECT `pk`.`polityk_id`, CONCAT(pk.ksywka, ' (', (SELECT `pp`.`imie_nazwisko` FROM `politycy` AS `pp` WHERE (pp.id = pk.polityk_id) LIMIT 1) , ')') FROM `politycy_ksywki` AS `pk` ORDER BY `imie_nazwisko` ASC

Zmienna $rowset zawiera wynik zapytania w postaci tablic:

array(4) {
  [0] => array(2) {
    ["id"] => string(1) "1"
    ["imie_nazwisko"] => string(11) "Donald Tusk"
  }
  [1] => array(2) {
    ["id"] => string(1) "2"
    ["imie_nazwisko"] => string(31) "Jareczek (Jarosław Kaczyński)"
  }
  [2] => array(2) {
    ["id"] => string(1) "2"
    ["imie_nazwisko"] => string(20) "Jarosław Kaczyński"
  }
  [3] => array(2) {
    ["id"] => string(1) "1"
    ["imie_nazwisko"] => string(27) "Słońce Peru (Donald Tusk)"
  }
}

Na koniec uwaga: obiekty typu Zend_Db_Select są przydatne tylko wtedy, gdy nasze zapytanie nie ma charakteru stałego, tzn. różne czynniki wpływają na jego kształt, przez co musi być tworzone w locie. Jeżeli wiemy, że zapytanie zawsze będzie takie samo to jest to zwykłe marnotrawstwo zasobów serwera, aczkolwiek ładnie wygląda i szybko się pisze.

Autor wpisu: batman, dodany: 24.01.2011 09:00, tagi: javascript, jquery

Z serii ciekawe pluginy jQuery mam dzisiaj dla was jQuery File Upload. Oprócz standardowego uploadowania plików mamy możliwość skorzystania z paska postępu, a dodane już pliki możemy bez problemu usunąć. Do listy możliwości oferowanych przez plugin można również zaliczyć:

  • obsługa drag and drop
  • możliwość przerwania uploadu pliku
  • niewymagany Flash. Wszystko oparte o HTML5 i JavaScript
  • możliwość uploadowania plików do innej domeny

Do poprawnego działania plugin wymaga jQuery w wersji 1.4 oraz jQuery UI 1.8. Teoretycznie plugin działa w każdej przeglądarce (nawet IE6), w praktyce niektóre funkcjonalności w zależności od przeglądarki są okrojone.

Demo pluginu znajdziecie na stronie http://aquantum-demo.appspot.com/file-upload, a dobrze ukrytą dokumentację pod adresem https://github.com/blueimp/jQuery-File-Upload/wiki.

Autor wpisu: Kamil, dodany: 24.01.2011 02:17, tagi: javascript

Google Maps API jest świetne – bardzo proste, wręcz intuicyjne, rozszerzalne, a w dodatku nieźle udokumentowane. Po prostu świetna robota ze strony Google. Trafiłem jednak ostatnio na nietypowy problem – tworzyłem stronkę dla firmy, której siedziba mieści się w dwóch odległych od siebie miastach. Nie chciałem tworzyć dwóch osobnych map dojazdowych – stworzyłem więc jedną [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.