Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Michal Wachowski, dodany: 18.05.2011 18:36, tagi: php

Dalszy ciąg prac nad frameworkiem. Kolejny etap - routing, czyli przyjemne interpretowanie i tworzenie przyjaznych linków na potrzeby frameworka.

Autor wpisu: Tomasz Kowalczyk, dodany: 17.05.2011 23:24, tagi: symfony, javascript, php

Framework symfony to bezsprzecznie jeden z najlepszych frameworków, jakie miałem okazję testować. Zarówno poziom zaawansowania kodu, jak też łatwość tworzenia nowych funkcjonalności w stronach internetowych czynią go naprawdę genialnym narzędziem w rękach programisty. W dzisiejszym wpisie chciałbym pokazać, jak w prosty sposób zintegrować edytor WYSIWYG - CKEditor z polami <textarea> w poszczególnych modułach panelu administracyjnego [...]

Autor wpisu: batman, dodany: 17.05.2011 08:00, tagi: css

Internet Explorer 6 odchodzi na emeryturę. Czy zasłużoną, zbada jakaś komisja, która zrobi z tego medialny cyrk. Nieco w cieniu swojego starszego brata, nadal straszy IE7 i nie ma najmniejszego zamiaru przestać. Skoro wszyscy uwzięli się na “szóstkę”, “siódemka” ma jeszcze sporo luzu i daje popalić bogu ducha winnym frontendowcom. Jednym z ukrytych talentów IE7 jest nierespektowanie z-index dla pozycjonowanych elementów.

Na czym polega problem? Na pewno nie raz się z nim spotkaliście – menu z uporem maniaka nie chce zasłonić listy rozwijanej (popularnego selecta) lub chowa się pod inne elementy strony i za żadne skarby nie daje się przekonać do poprawnego wyświetlenia. Winowajcą jest tutaj bug w IE7 powodujący, że z-index jest resetowany dla pozycjonowanych elementów nie znajdujących się w tym samym pojemniku.

Okazuje się, że rozwiązanie tego problemu jest o wiele bardziej banalne niż mogłoby się wydawać. Zapomnijcie o iframe’ach, skryptach JavaScript ukrywających elementy strony, magicznych zaklęciach i wymyślonych w gniewie przekleństwach. Wystarczy ustawić wartość relative dla właściwości position kontenerów zawierających niepoprawnie wyświetlające się elementy. Dokładny opis tego “ultimate solution” znajdziecie pod adresem http://jonathanstegall.com/2009/01/15/ie-z-index-bug-with-css-dropdown-menu/.

Enjoy.

Autor wpisu: sokzzuka, dodany: 16.05.2011 16:33, tagi: php

Już niedługo – 31 maja (wtorek) w Klubie Lizard King w Krakowie (ulica Św. Tomasza 11a) odbędzie się piąty KrakSpot Tech. Jest to spotkanie ludzi z branży technologicznej utrzymane w luźnej atmosferze tzw. Bar Camp. Oznacza to mniej więcej tyle, że można, a nawet zalecane jest spożywanie w jego czasie złocistego napoju (bez przesady oczywiście). Dodatkowym atutem tego spotkania jest DARMOWA PIZZA dla wszystkich uczestników. Spotkanie nie wymaga rejestracji.

Dlaczego wspominam o tym evencie na swoim blogu ? Szczęśliwie się składa, że wygłoszę na nim swoją prezentację na poruszany już tutaj temat bazy danych MongoDb. Oczywiście oprócz mojej prezentacji będzie jeszcze kilka ciekawych rzeczy, oto program:

1. Prezentacje:

Jacek Czarnecki z  Empathy „Dlaczego HTML 5, a nie Flash?” Wojtek Soczyński  z SoInteractive „Alternatywne podejście do bazy danych – MongoDb” Grzegorz Szczepańczyk z Hidden Data „Akcja wirtualizacja: efektywne wykorzystywanie zasobów” Łukasz Cepowski z iLoop Mobile „Praktyczna realizacja rozproszonego klastra do budowania i testowania projektu informatycznego

2. Panel dyskusyjny:

iOS vs. Android” prowadzony przez Krzysztofa Helaka

Uważam, że program jest ciekawy dla każdego kto w jakikolwiek sposób związany jest z branża internetową od strony technologicznej. Warto się wybrać i serdecznie zapraszam wszystkich.

Jeżeli ktoś by chciał wziąć udział w panelu dyskusyjnym to polecam zapisać się pod adresem marketing@empathy.pl .

Więcej informacji na stronie spotkania (rejestracja nie jest obowiązkowa)

http://www.empathy.pl/pl/aktualnosci/rok2011.html

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

Autor wpisu: Tomasz Kowalczyk, dodany: 15.05.2011 21:40, tagi: css, jquery

Wizualny aspekt stron internetowych to dosyć skomplikowany temat - po pierwsze ze względu na różne gusta klientów / użytkowników, po drugie ze względu na dużą trudność w uzyskaniu jednakowego wyglądu na wielu wersjach przeglądarek. Dlatego ważne jest, żebyśmy cały czas podnosili swój poziom wiedzy i doświadczenia poprzez poznawanie nowych sposobów i mechanizmów tworzenia dobrych rozwiązań. [...]

Autor wpisu: batman, dodany: 15.05.2011 20:45, tagi: php

W jednym z ostatnich komentarzy pod wpisem Agile Toolkit – interesujący framework PHP napisałem, że framework ten nie do końca spełnia pokładane w nim przeze mnie nadzieje. Postanowiłem dać mu jeszcze jedną szansę i spędziłem z nim nieco więcej czasu niż poprzednio. Tym razem przygotowałem od zera najprostszą z możliwych aplikacji, które nie robi nic innego ponad wypisanie w przeglądarce tekstu “Hello World”. Od razu zaznaczę, iż podtrzymuję opinię, że jest to framework w wersji beta.

Instalacja

Instalacja frameworka wbrew pozorom nie jest taka banalna jakby się mogło na początku wydawać. Wszystko zaczyna się od pobrania najnowszej wersji frameworka i rozpakowania go do katalogu znajdującego się na serwerze. W tym samym miejscu musimy utworzyć plik index.php oraz katalogi lib, page oraz templates.

Konfigurowanie projektu

Na serwerze znajdują się już wszystkie niezbędne pliki i katalogi, pora przejść do konfiguracji naszej aplikacji. Najpierw musimy utworzyć główną klasę, powołującą naszą aplikację do życia. Nie będę tutaj oryginalny i posłużę się nazwą z dokumentacji. Klasa wygląda w sposób następujący, a jej położenie to stworzony wcześniej katalog lib.

class Frontend extends ApiFrontend
{
    public function init()
    {
        parent::init();
        $this->initLayout();
    }
}

W zależności od zapotrzebowania, klasa może dziedziczyć po jednej z kilku przygotowanych na różne okoliczności klas. Mamy do dyspozycji ApiWeb, ApiCli, ApiAdmin oraz ApiFrontend. Sami również możemy przygotować odpowiednią klasę.

Główną klasę wywołujemy w pliku index.php

include 'atk4/loader.php';
$app = new Frontend('my_project', 'my_theme');
$app->main();

Najbardziej interesującym elementem na powyższym listingu jest drugi parametr przekazany do konstruktora. Określa on nazwę skórki/tematu (theme) z jakiego będziemy korzystać w aplikacji. Jak za chwilę się dowiecie, tematy są całkowicie odseparowane od reszty kodu, dzięki czemu łatwo je podmieniać.

Ostatnim etapem konfigurowania projektu jest utworzenie katalogu o nazwie tematu (tutaj jest to my_theme) w katalogu templates.

Pierwsza strona

Framework zainstalowany, projekt skonfigurowany, można przystąpić do pracy. Zaczniemy od przygotowania pierwszej (i jedynej) strony. W katalogu page utwórzmy plik index.php, a do środka wprowadź następującą treść

class page_index extends Page
{
    public function init()
    {
        parent::init();
        $this->add('HtmlElement');
    }

    public function defaultTemplate()
    {
        return array('page/index');
    }
}

Zgodnie z konwencją przyjętą w Agite Toolkit, index jest domyślą stroną i jest wymagany do poprawnego działania aplikacji.

Treść do strony dodawana jest w metodzie init, przy czym musimy pamiętać, aby wywołać metodę init rodzica. W sumie Agile Toolkit na każdym kroku wymaga aby wywołać metodę rodzica. Po pewnym czasie staje się to dosyć irytujące. Druga metoda jest wymagana tylko jeśli chcemy oprócz treści wygenerowanej przez stronę dodać dodatkowe informacje do szablonu.

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

Autor wpisu: singles, dodany: 14.05.2011 23:52, tagi: javascript

O języku JavaScript można mówić dobrze jak i źle, ale na pewno nie można odmówić mu rozkwitu w ostatnich latach. I nie mam na myśli tego, że webmasterzy ponownie zaczęli implementować zegarki latające za kursorem (ah te początki 2000 roku ;) JavaScript na serwerze staje się coraz bardziej naturalny za sprawą narzędzi typu node.js, silniki JS są coraz szybsze, powstaje coraz więcej aplikacji pisanych tylko i wyłącznie w tym języku.

Jednak im więcej kodu piszemy, tym częściej zauważamy, że niektóre konstrukcje językowe powtarzają się coraz częściej. Wydaje mi się, że głównie chęć zaoszczędzenia czasu jest motorem do powstania takich narzędzi jak CoffeeScript, które to chciałbym w tym wpisie krótko przedstawić.

„Ale o so chodzi?”

Jak piszą autorzy, CoffeeScript jest małym językiem, który kompiluje się do JavaScript’u. Przykładowy kod wygląda tak (zaczerpnięty z głównej strony projektu):

# Assignment:
number   = 42
opposite = true
 
# Conditions:
number = -42 if opposite
 
# Functions:
square = (x) -> x * x
 
# Objects:
math =
  root:   Math.sqrt
  square: square
  cube:   (x) -> x * square x
 
# Splats:
race = (winner, runners...) ->
  print winner, runners
 
# Existence:
alert "I knew it!" if elvis?

Najpierw piszemy kod za pomocą składni CoffeeScript, a następnie kompilujemy do najzwyklejszego JavaScriptu, który to automatycznie przechodzi testy JavaScript Lint. Możliwości narzędzia najlepiej będzie przedstawić na kilku przykładach:

Instrukcje warunkowe

Programistom Ruby poniższa składania powinna wydawać się jak najbardziej naturalna. Mianowicie kod:

number = 42
opposite = true
number = -42 if opposite

da nam wynikowo:

var number, opposite;
number = 42;
opposite = true;
if (opposite) {
  number = -42;
}

Szybka definicja funkcji

square = (x) -> x * x
cube   = (x) -> square(x) * x

zamienia się w:

var cube, square;
square = function(x) {
  return x * x;
};
cube = function(x) {
  return square(x) * x;
};

Funkcje z nieokreśloną liczbą parametrów

Czasami zdarza się tak, że funkcja przyjmuje jeden parametr, a następne mogą być dowolne. Tutaj CoffeeScript wprowadza coś, co nazwane jest splats i prezentuje się tak:

gold = silver = rest = "unknown"
awardMedals = (first, second, others...) ->
	gold   = first
	silver = second
	rest   = others

Wynikowo dostaniemy jednak:

var awardMedals, contenders, gold, rest, silver;
var __slice = Array.prototype.slice;
gold = silver = rest = "unknown";
awardMedals = function() {
	var first, others, second;
	first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
	gold = first;
	silver = second;
	return rest = others;
};

Zauważcie takie rzeczy jak automatyczne pobranie metody slice z prototypu Array czy też zainicjowanie zmiennej others pustą tablicą, kiedy nie zdefiniowano parametrów dodatkowych.

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.