Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

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ą [...]

Autor wpisu: JoShiMa, dodany: 23.01.2011 22:55, tagi: skrypty

Po przeanalizowaniu kodu standardowego nagłówka i standardowego headera skórki o nazwie “Classic” pora zająć się strukturą głównego pliku czyli index.php. Jak widać na schemacie pokazanym w artykule o strukturze szablonu WordPress jest to w zasadzie najważniejszy (w połączeniu z nagłówkiem i stopką) plik tej struktury. Zawarty w nim skrypt jest wywoływany zawsze, gdy nie [...]

Autor wpisu: widmogrod, dodany: 23.01.2011 20:06, tagi: php, mysql

Nie opiszę całości instalacji gdyż już w wielu źródłach jest opisana szczegółowo. Przedstawię tylko szybkie rozwiązanie problemu, który mnie nawiedził już po procesie instalacji.

Po zainstalowaniu MySQL, utworzeniu bazy danych, przypisaniu uprawnień i skonfigurowaniu pierwszego połączenia w PHP – może Cię spotkać ot taki komunikat:

Warning: PDO::__construct() [pdo.--construct]: 
[2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in

Rozwiązaniem jest uzupełnienie odpowiedniej sekcji w php.ini. MacPort’s zapisują php.ini w katalogu: /opt/local/etc/php5/php.ini Otwieramy go dowolnym edytorem i odszukujemy sekcję pdo_mysql.default_socket

W moim przypadku ta sekcja była pusta. Teraz wystarczy wskazać socket zainstalowanej lokalnie BD. W moim przypadku:

pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock

Można sprawdzić jaka jest lokalizacja soketu, wykonując polecenie w termianlu:

mysql5 -u root -p test

… i odszukaniu fragmentu zaczynającego się od UNIX socket.

Teraz tylko – zapisz plik, zrestartuj serwer i gotowe ;)

Jeden błąd mniej! można iść dalej :)

Autor wpisu: Zyx, dodany: 23.01.2011 19:05, tagi: php

Większość programistów PHP albo nie miała do czynienia z innymi językami programowania, albo nie poznała ich na tyle dobrze, by spotkać się z pojęciem systemów budowania. Są to specjalne narzędzia, które wiedzą, w jaki sposób złożyć z kodu źródłowego gotową do uruchomienia aplikację i zainstalować ją w systemie. Oczywiście ze względu na swą naturę, aplikacje PHP nie potrzebują ich aż tak bardzo, ale jeśli chcemy ułatwić sobie życie, warto je poznać, tym bardziej że istnieje projekt dedykowanego systemu budowania dla tego języka, zwący się Phing. W tym wpisie zamierzam go bliżej omówić.
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.