[2009-12-23] wlc.pl, torronto.pl i lepsze strony miast
Lepsza strona miasta – od tej chwili taką oficjalną nazwę będzie nosił projekt/startup, w którym dotychczas zafunkcjonowały portale wlc.pl i torronto.pl. Projekt rozpoczyna się oficjalnie 1 stycznia 2010 roku.
W związku z tym został przygotowany re-design wlc.pl i torronto.pl. Portale otrzymają również nowy silnik w postaci Kiro CMS opartego na KohanaPHP 3. Portale będą miały [...]
http://riu.wlc.pl/2009/12/wlc-pl-torronto-pl-i-lepsze-strony-miast/
[2009-12-23] wlc.pl, torronto.pl i lepsze strony miast
Lepsza strona miasta – od tej chwili taką oficjalną nazwę będzie nosił projekt/startup, w którym dotychczas zafunkcjonowały portale wlc.pl i torronto.pl. Projekt rozpoczyna się oficjalnie 1 stycznia 2010 roku.
W związku z tym został przygotowany re-design wlc.pl i torronto.pl. Portale otrzymają również nowy silnik w postaci Kiro CMS opartego na KohanaPHP 3. Portale będą miały [...]
http://riu.wlc.pl/2009/12/wlc-pl-torronto-pl-i-lepsze-strony-miast/
[2009-12-04] Kohana 3 Cheat Sheet
Specjalnie dla czytelników bloga przygotowałem CheatSheet z najczęściej używanymi funkcjami w Kohana 3. Są na nim wyróżnione metody statyczne i prywatne oraz przejrzysty podział na właściwości i metody klas. Bonusem jest interaktywna wersja HTML. Klikając na odpowiednią metodę czy właściwość ujrzymy jej (domyślne) argumenty oraz opis zawarty w dokumentacji Kohana. Do pobrania są trzy wersje: HTML: http://kohana.sher.pl/cs PNG: [...] Powiązane wpisy:
http://kohana.sher.pl/2009/12/kohana-3-cheat-sheet/
[2009-12-01] Jak stworzyć i używać kontroler. Kohana 3.
Kontroler to podstawowa klasa, ważna w wykonywaniu zapytania na Kohanie. Najprostsza aplikacja w składa się właśnie z systemu i jednego kontrolera. Jego zadaniem jest wymiana informacji między bazą danych (z użyciem modeli) a użytkownikiem (z użyciem formularzy z widoków). To on wykonuje najważniejsze obliczenia i decyduje co pokazać oglądającym stronę.
Konwencje
Zasady nazywania i dziedziczenia kontrolerów zostały [...]
http://kohana.sher.pl/2009/12/jak-stworzyc-i-uzywac-kontroler-kohana-3/
[2009-11-30] Funkcja Kohana::init oraz jej możliwe argumenty
Tytułowa funkcja jest bardzo ważna. Inicjalizuje ona wszystkie opcje, oczyszcza zmienne globalne jak $_GET i $_POST i konfiguruje całe środowisko. Jest ona umieszczona w pliku bootstrap.php. Jedynym jej argumentem jest tablica kluczy i wartości wypisanych poniżej: base_url – katalog w którym umieszczona jest aplikacja – domyślnie NULL index_file – plik indeksu lub FALSE dla krótkich adresów – [...] Powiązane wpisy:
http://kohana.sher.pl/2009/11/funkcja-kohanainit-oraz-jej-mozliwe-argumenty/
[2009-11-29] Usuwanie index.php w Kohanie 3
Celem jest stworzenie możliwości używania krótkich adresów URL w Kohanie. Przykładowo aby dostać się do kontolera home ma domyślnie musimy pisać http://sher.pl/index.php/home. Po wykonaniu poniższych dwóch kroków będzie to krótkie http://sher.pl/home
Zmodyfikowanie pliku bootstrap.php, wyszukajmy linię z Kohana::init i dodanie opcji base_url i index_file. Pierwsza oznacza katalog w którym jest aplikacja (ze slashami po bokach). Druga to plik indeksu [...]
http://kohana.sher.pl/2009/11/usuwanie-index-php-w-kohanie-3/
[2009-10-19] Hello world w Kohanie 3.0
Poniżej przedstawiony jest sposób stworzenia najprostszego projektu w Kohanie. Stwórzmy najpierw kontroler, który będzie wyświetlał napis “Hello world”. Później dostosujemy go do zasad modelu MVC. W folderze application/classes/controller stwórzmy plik hello.php i wypełnijmy go następującym tekstem: Class Controller_Hello extends Controller { function action_index() { echo 'hello, world! '; } function before() { echo 'Uruchamiam kontroler. ' } function after() { echo 'Wyłączam kontroler. ' } } Żeby sprawdzić czy powstały kontroler działa wejdźmy [...] Powiązane wpisy:
http://kohana.sher.pl/2009/10/hello-world-w-kohanie-3-0/
[2009-10-12] Konfiguracja bazy danych w Kohanie 3
Pierwszym krokiem do ustalenia połączenia z bazą danych jest odpowiednia konfiguracja. W tym celu tworzymy plik database.php w katalogu konfiguracji application/config. Jego zawartość powinna mieć następującą formę: <?php defined('SYSPATH') OR die('No direct access allowed.'); return array ( 'default' => array ( 'type' => 'mysql', 'connection' => array( [...] Powiązane wpisy:
http://kohana.sher.pl/2009/10/konfiguracja-bazy-danych-w-kohanie-3/
[2009-10-10] KohanaPHP - jak rozwiazywac problemy
na polskim forum kohanaphp co jakis czas pojawiaja sie tematy z kategorii 'nie dziala', po czym nastepuje wklejenie fragmentu kodu. rozumiem jesli ma to zwiazek z fameworkiem, moze pytajacy nie wie jakie sa argumenty danej metody itp itd. gorzej jesli jest to problem nie frameworka, ale samego algorytmu.
zazwyczaj bowiem wystarczy popatrzec na kod, dokonac kilku prostych testow, aby samemu rozwiazac problem. droga bez debuggera powinna mniej wiecej wygladac tak:
- wlaczamy profiler
- w kilku miejscach kodu dodajemy var_dump/echo interesujacych nas zmiennych
- w kluczowym miejscu (np. zapis do bazy) dodajemy zarowno przed jak i po var_dump/echo
- odpalamy strone i widzimy jak kolejno zmieniaja sie wartosci, co daje nam pojecie w ktorym miejsciu nastepuje nieporzadane dzialanie. profiler wyswietli nam wszystkie pozostale informacje (post, get, sesja, cookies czy tez zapytania do bazy)
- widzac w ktorym miejscu zaczyna sie zle dziac wywalamy pozostale echo/var_dump, a tam dodajemy kilka dodatkowych aby wiedziec dokladnie co sie dziele, w ktore petle skrypt wchodzi, w ktore nie i dlaczego (else plus var_dump warunkow) itd
- majac to wszystko samemu mozna naprawic problem, po drodze czegos sie nauczyc
ja wiem, ze to sa podstawy podstaw, ale chyba nie wszyscy maja pojecie jak sie do tego zabrac. rozumiem, kazdy kiedys zaczynal. teraz jednak czasy sa troche inne, sa frameworki, ktore daja zludne pojecie o tym, ze umie sie programowac (co czesto sprowadza sie do umiejetnosci czytania tutoriali i korzystania z generatorow) i majac przed oczami kod, ktory wlasnie sie napisalo, jest grono osob, ktore nie maja tak na prawde pojecia jak on dziala, tym bardziej jak on powinien dzialac (jak powinien byc rozwiazany dany problem od strony algorytmow) i wreszcie jak zlokalizowac w nim usterki. takie tam pilotowanie samolotu na autopilocie, a chcialo by sie gdzies skrecic czy dowiedziec dlaczego ta czerwona dioda sie swieci 'bo ja jej nie wlaczalem'... ;)
http://thejw23.blogspot.com/2009/10/kohanaphp-jak-rozwiazywac-problemy.html
[2009-10-01] Wielojęzyczność w KohanaPHP 3.0
Wielojęzyczność w KohanaPHP w wersji 3.0 jest dla mnie nieco irytującym problemem. Niby jest wszystko ok, jak już się dojdzie co i jak trzeba ustawić, ale irytujące jest to, że wydaję mi się to mocno niedopracowane rozwiązanie. Zresztą już wiadomo, że zostanie ono zmienione i w wersji 3.1 będzie inaczej niż jest teraz.
A więc [...]
http://riu.wlc.pl/2009/10/wielojezycznosc-w-kohanaphp-3-0/
[2009-09-30] Re: Który framework wybrać?
przeczytalem ostatnio wypowiedz MajareQ na temat frameworkow i juz sam wstep zrobil na mnie piorunujace wrazenie:
"Jeśli się pytasz: “Który framework powinienem wybrać?” to popełniasz błąd logiczny. Zakładasz, że w ogóle potrzebujesz jakikolwiek framework."
moim zdaniem nie. bledem logicznym jest zakladanie, ze piszac w php nie potrzebuje frameworka :)
1) start
na dzien dzisiejszy osoba szukajaca frameworka, ktora nie zadala sobie juz wczesniej pytan zadanych przez MajareQ, to na 99% jest osoba, ktora nigdy nie pisala na prawde duzej strony i na 99% w najblizszym czasie jej bedzie robila. wiec nie szuka frameworka do pisania klonu Twittera, czyli bardzo, bardzo wysoka wydajnosc nie jest dla mniej priorytetem. i tu dochodzimy do punktu drugiego
2) pomijanie calkowicie roli w ktorej frameworki sprawdzaja sie najlepiej
rola polegajaca na szybszym, latwiejszym i przyjemniejszym pisaniu kolejnych aplikacji. frameworki pozwalaja zaoszczedzic duzo czasu, odwalaja za nas brudna robote zwiazana z autoryzacja, formularzami, walidacji itd. jesli 99% (ok, niech bedzie 90%) wykorzystania frameworkow to nie sa strony potrzebujace porad z High Scalability, to dlaczego mam nie uzywac frameworka, aby lepiej mi sie pracowalo? dlaczego mam pisac wlasne rozwiazania od podstaw i samemu dokonywac zmian na miare wlasnej wiedzy, skoro moge siegnac po cos co jest rozwijane przez osoby co najmniej, a zazwyczaj lepiej, orientujace sie w php? dlaczego nie mam skorzystac z faktu, iz bledy same sie poprawia, nowe funkcje same sie dodadza - wszystko niemal 'magicznie', calkowicie bez mojej ingerencji, po prostu 'pop' i mam kolejna wersje frameworka do sciagniecia. i tak dochodzimy do punktu trzeciego
3) praca i zabawa
czym innym jest praca, zarabianie z pisania w php, a czym innym bawienie sie w php, pisanie glownie dla przyjemnosci, bez terminow (ew. z odleglymi), rodziny itd. takie pisanie, kiedy po kilku godzinach siedzenia czlowiek ma duza satysfakcje, ze cos zrobil minimalnie lepiej niz bylo wczesniej, czesto po prostu cieszac sie faktem, ze cos sie zrobilo, dziala i jest tak samo funkcjonalne jak inne gotowe rozwiazania dostepne na sieci - ale to jest moje, moje i tylko ja to zrobilem, hoooray :) niestety, czesto pozniej zaczyna sie praca plus rodzina i albo skorzystam z gotowego, sprawdzonego, stabilnego, dzialajacego poprawnie rozwiazania i bede mial gotowa rzecz w 30 minut, albo poswiece najblizsze 4-5h na to aby zrobic to samemu, majac w perspektywie fakt, iz strona nad, ktora pracuje na 90% nie trafi na liste 'optimized by High Scalability'. w 90% przypadkow nie potrzebuje napisac czegos co bedzie musialo miec wydajnosc Twittera, wiec nie bedzie dla mnie roznicy w jakim frameworku to napisze (a roznice w wydajnosci moga byc miedzy nimi duze). i tu dochodzimy do punktu czwartego
4) framework jaki jest kazdy widzi
na pewno przed wybraniem frameworka trzeba wiedziec czego potrzebujemy, to nie ulega watpliwosci. problem w tym, ze dla 90% wykorzystania frameworkow, wszystkie liczace sie spelniaja te wymagania. maja wsparcie, sa rozwijane, maja obsluge wielu baz, maja mechanizmy wspierajace rozne silniki do cache`owania itd. dlatego wlasciwym kryterium jest to, w ktorym frameworku najlepiej mi sie pracuje. ktory dla mnie i tylko dla mnie jest najfajniejszy. dodatkowo jest jeszcze kolejne kryterium o ktorym warto pomyslec zanim zdecydujemy sie na jakies bardzo niszowe rozwiazanie. i tu dochodzimy do punktu piatego.
5) w kupie razniej
wlasne rozwiazania sa fajnie, ale jak jestem klientem i mam swoj sklep online napisany na czyims wlasnym silniku, to mam przesrane. tak po prostu. jak mi webmaster odejdzie, to zanim nowy sie polapie, to troche czasu minie - chyba kazdy kiedys robil cos w cudzym kodzie i wie jaka to jest 'przyjemnosc'. a jak wyglada sytuacja jesli mam framework? z nowym webmasterem nie ma problemu, po prostu szukam kogos kto zna dany framewok i sporo problemow z glowy. podobnie jesli mam firme z 20 ITmenami na wlasnym rozwiazaniu. przyjdzie nowa osoba, ile czasu bedzie musiala sie uczyc ? ile czasu bedzie sie uczyl nowy pracownik, ktory zna dany framework? a czas to pieniadz. analogicznie jesli szukam pracy, to znajde ja szybciej znajac gotowe rozwiazania czesto stosowane w firmach.
6) uwagi koncowe
przewaga frameworkow nad domowymi rozwiazaniami jest zazwyczaj bezpieczenstwo, optymalizacja, 'magiczne' naprawianie bledow i dodawanie nowych funkcjonalnosci, trzymanie sie ogolnie przyjetych standardow, mniejsze lub wieksze wymuszanie pisania zgodnie z MVC. jak dla mnie to wystarczajaca lista, aby zarzucic wlasne rozwiazanie i zajac sie czyms gotowym, czyms co w miare szybko dostosuje do wlasnych potrzeb i bede czul sie 'jak u siebie'. mozna samemu napisac framework, tyko nadal pozostaje jeden minus - samemu trzeba wprowadzac wszelkie poprawki, a majac gotowe rozwiazanie czas na to przeznaczony moge poswiecic na poza komputerowe hobby. nie sama praca czlowiek zyje.
konkluzja.
w 95% przypadkow korzystania z frameworkow z niczego nie trzeba rezygnowac czy chodzic na kompromisy. frameworki sprawiaja, ze praca jest szybsza i bardziej efektywna. sprawiaja, ze mniej czasu tracimy na wdrazanie sie w juz istniejace projekty, o ile sa oparte o znany nam framework. funkcjonalnosc frameworkow jest podobna, ale bardzo sie roznia miedzy soba jesli chodzi o detale - dlatego tak wazny jest wybor takiego, ktory nam bedzie odpowiadal i w nim bedziemy najbardziej wydajni. kazdy framework ma swoje plusy i minusy, dobrze jest tez znac podstawy kilku, aby miec realne pojecie o tym czego tak na prawde potrzebujemy. nawet jesli framework X jest ok, to nie znaczy, ze jak poznamy framework Y, nie zorientujemy sie nagle, ze filozofia mu przyswiecajaca jest dla nas bardziej naturalna i mamy dokladnie te same mozliwosci, ale znacznie lepiej dostosowane do naszych potrzeb. dlatego programujac w php nalezy znac jakis framework, a w zwiazku z tym jak najbardziej nalezy pytac o to jaki framework wybrac i wybierac go z glowa.
oczywiscie nie nalezy zakladac, ze z marszu napisze w symfony klon Twittera, bo to juz jest problem wydajnosci, a ona znacznie wykracza poza frameworki i jest tematem na osobna dyskusje.
na koniec odsylam do moich wczesniejszych wpisow w tym temacie:
- jaki framework wybrac - zanim zapytasz...
- dlaczego KohanaPHP
http://thejw23.blogspot.com/2009/09/re-ktory-framework-wybrac.html
[2009-09-28] KohanaPHP - formularz, walidacja, logowanie
dla poczatkujacych. przewijalo sie to na forum, ale tutaj zebralem w jedno miejsce. krotki tutorial (a raczej po prostu przyklad) jak mozna zrealizowac logowanie czyli prosty formularz i jego walidacja.
1) application/controllers/admin.php
class Admin_Controller extends Site {
public $template = 'templates/admin';
public function index()
{
//jesli uzytkownik nie jest zalogowany, przekieruj na forme logowania
if ( ! is_object($this->user))
url::redirect('admin/login');
//wczytaj glowny widok
$this->load_view('admin/user');
}
//zaloguj usera
public function login()
{
//wczytaj glowny widok
$this->load_view('admin/login');
//inicjalizacja walidacji
$this->form_post = Validation::factory($this->input->post())->pre_filter('trim');
//ustaw pola formularzy oraz bledow formularzy, przypisz reguly walidacji
$this->make_field('username',array('required','email'));
$this->make_field('password',array('required'));
$this->make_field('remember');
$submit = $this->input->post('submit');
//sprawdz czy formularz wyslany i ew. przeprowaz walidacje
if ($submit AND $this->validate() AND $post_data = $this->form_post->as_array())
{
if (Simple_Auth::instance()->login($post_data['username'], $post_data['password'], isset($post_data['remember']) ))
{
//zalogowany, idziemy do admina
url::redirect('admin');
}
//nie udalo sie zalogowac, rzuc bledem
else
{
$this->form_post->add_error('password', 'incorrect');
}
}
//ustaw wartosci pol formularza, przypisz ewentualne bledy
$this->form_populate($submit);
}
//wyloguj usera
public function logout()
{
Simple_Auth::instance()->logout();
url::redirect('admin/login');
}
}
2) application/libraries/site.php
class Site extends Template_Controller {
protected $user;
public function __construct()
{
parent::__construct();
if (Simple_Auth::instance()->logged_in())
{
$this->user = Simple_Auth::instance()->get_user();
}
}
public function load_view($view = 'main')
{
$this->template->center = new View($view);
(isset($this->user)) ? $this->template->set_global('user',$this->user) : NULL;
}
}
3) application/libraries/MY_controller.php
class Controller extends Controller_Core {
public $form_scenarios = array();
public $form_rules = array();
public $form_fields = array();
public $form_errors = array();
public $form_post = array();
public function make_field($field, $rules = array(), $default = '', $scenario = array('*'))
{
$this->form_fields[$field] = $default;
$this->form_rules[$field] = $rules;
$this->form_errors[$field] = '';
$this->form_scenarios[$field] = $scenario;
}
public function set_fields($submit)
{
if (!empty($submit))
{
$this->form_fields = arr::overwrite($this->form_fields, $this->form_post->as_array());
$this->form_errors = arr::overwrite($this->form_errors, $this->form_post->errors());
}
}
public function form_populate($submit)
{
$this->set_fields($submit);
$this->template->center->form = $this->form_fields;
$this->template->center->errors = $this->form_errors;
}
public function validate($scenario = '')
{
foreach ($this->form_rules as $field => $rules)
{
if ( (in_array('*',$this->form_scenarios[$field])) OR (in_array($scenario,$this->form_scenarios[$field])) )
{
foreach ($rules as $rule)
{
$this->form_post->add_rules($field, $rule);
}
}
}
return $this->form_post->validate();
}
}
4) application/views/admin/login.php
5) application/views/admin/user.php
'post')); ?>
'submit','type'=>'submit','value'=>'ZALOGUJ')); ?>
Witaj username; ?> :)
6) application/helpers/MY_form.php
class form extends form_Core {
public static function my_errors($error = '')
{
return (!empty($error)) ? $error : null;
}
}
7) modules/simple_auth
tutaj modul simple_auth, oczywiscie musi byc aktywny (application/config/config.php i $config['modules']). do dzialania potrzebny jest jakis user w bazie - odsylam do przykladow uzycia simple auth.
o co w tym chodzi. calosc bazuje na moim podejsciu do walidacji. w my_controller zanjduja sie wspolne dla wszystkich kontrolerow zmienne przechowujace tablice z polami do walidacji, bledami walidacji oraz regulami walidacji. dzieku make_field w jednej linijce moge ustalic wszystko co zazwyczaj jest mi potrzebne do obslugi pola formularza: nazwe pola do walidacji, regule, poczatkowa wartosc, komunikat bledu, a po walidacji przy przypisac wartosc przeslana w formularzu, zamiast tej z bazy.
walidacja obsluguje tez scenariusze, czyli moge przesylajac parametr zwalidowac tylko czesc pol, reszte pozostawic nietknieta. czasami sie to przydaje np. jesli walidacja jest zalezna do np. jakiegos checkboxa itp.
bardzo dobrze sie to sprawdza z simple_modeler, mozna bez problemow walidowac formularz i np. zapisac przeslane dane do kilku modeli, nie martwiac sie o ich wybieranie, dzielenie na dwie zmienne i przekazywanie kazdej do odpowiedniego modelu itd. dzieki $skip i $aliases mozna przekazac caly formularz (jego dane) do kazdego z modeli, a one same wybiora to co jest im potrzebne i zapisa do bazy.
duzo rzeczy dzieje sie z 'w tle', nie trzeba recznie przypisywac komunikatow o bledach itd. populate_form zrobi to za nas, a my_errors jesli tylko dane pole ma blad, to wyswietli powiadomienie.
kodu jest sporo, podejrzewam, ze blogspot sie na nim moze wywalic, wiec zapewne niedlugo wyedytuje posta, na razie zostawiam tak jak jest.
http://thejw23.blogspot.com/2009/09/kohanaphp-formularz-walidacja-logowanie.html
[2009-09-21] Simple_Auth Roles
jakis czas temu majac chwile wolnego zaczalem modyfikowac Simple Auth tak, aby role obslugiwalo tak samo jak KohanaPHP Auth. teraz ponownie do tego usiadlem, dokonczylem i tak oto powstalo Simple_Auth... _Roles? ;)
modul mozna pobrac tutaj. w paczce jest plik sql ze struktura nowych tabel. tabele user_details mozna (a wrecz nalezy) zmodyfikowac do wlasnych potrzeb.
zmiany:
- osobna table z rolami (admin, user, guest...)
- osobna tabela z powiazaniami user->role
- osobna tabela z detalami usera np. potrzebnymi przy rejestracji (co projekt to nieco inne, ale zawsze powiazane z userem), po to aby auth_users nie wymagalo zadnych modyfikacji
tabela z rolami posiada dwa pola:
- role, ktore jest uzywane wewnetrzenie do sprawdzania rol
- name, ktore moze byc uzyte do wyswietlania i (chyba) nie jest do niczego potrzebne od strony dzialania aplikacji
model user posiada nowa metode: load_roles(), ktora wczytuje z bazy role usera. klasa simple_user posiada nowa zmienna $roles i metode set_roles(), ktora przypisuje $roles przekazane jako parametr role.
tabela z detalami nie jest niezbedna do dzialania modulu.
przyklady:
//tworzenie uzytkownika i nadanie rol:
$user_id = Simple_Auth::instance()->create_user($user_data); //czyli bez zmian, przekazujemy tablice
Simple_Auth::instance()->set_roles(array(1,2,3),$user_id); //nadanie rol o id 1,2,3 userowi o id = $user_id
//info: metoda create_user() zwraca ID wlasnie zapisanego do bazy usera
//inne nadanie rol
Simple_Auth::instance()->set_roles(array('user','admin'),$user_id); //nadanie rol user oraz admin userowi o id = $user_id
//info: jezeli pominiemy w set_roles() id usera, zostana one nadane zalogowanemu userowi (sesja)
//pobranie z bazy usera z id=3
$user = Simple_Auth::instance()->get_user(3); //bez podania id wczytuje usera z sesji
//sprawdzenie czy user ma role z id = 1
$user->check_role(1);
//sprawdzenie czy user ma role 'admin'
$user->check_role('admin');
//wyswietlenie rol usera
print_r($user->roles);
//sprawdzenie czy zalogowany user ma role moderator
Simple_Auth::instance()->logged_in('moderator');
//pobranie detali usera, mozna podac jako parametr ID usera, domyslnie wczytuje usera z sesji
$detail = Simple_Auth::instance()->get_user_details();
echo $details->lastname;
//pobranie listy rol z bazy (id-rola)
Auth_Modeler::Instance('auth_user_roles')->select_list('id','role');
//zamiast role mozna uzyc name aby otrzymac opisy rol user friendly
calosc napisana z ciekawosci, raczej przetestowana, ale nie daje gwarancji :) SA idzie coraz dalej, w planach opcjonalna integracja z Simple_Acl, tj, pobieranie rol i zasobow z bazy. opcjonalna, bo nie kazdy takiego kombajny potrzebuje. ale to jak bede mial wiecej czasu...
w razie znalezienia bledow prosze o info, na pewno poprawie.
acha, tablice w pliku sql sa puste, trzeba samemu dodac np. role admin i user. na razie z palca, w nastepnej wersji dodam prosta metode add_role(). w tej o tym zapomnialem :)
http://thejw23.blogspot.com/2009/09/simpleauth-roles.html
[2009-09-19] Simple_Auth i role uzytkownika
wiele osob zwraca mi uwage na to jak SA obsluguje role - inaczej niz KohanaPHP Auth. w SA rolami sa 'zwykle' pola na tabeli z uzytkownikami, natomiast w Auth jest osobna tabela z rolami oraz kolejna z powiazaniami user-rola co daje mozliwosc dynamicznego dodawania nowych rol z poziomu administracji strona.
w zasadzie rozbija sie to o jedno: Simple Auth nie jest kompletnym systemem ACL. koniec i kropka. dynamiczne role potrzebne sa nie tyle do samej autoryzacji co wlasnie do ACL, dynamicznego zarzadzania uprawnieniamiu userow, gdzie nie tylko dodajemy nowe role, ale tez okreslamy do jakich zasobow strony dana rola/user/grupa ma dostep.
zazwyczaj na etapie projektowania aplikacji, jesli nie potrzebujemy ACL to mozemy bardzo dokladnie okreslic jakie role beda potrzebne userom, a Simple Auth nie jest ograniczone tylko do domyslnych rol (admin, moderator). dodanie kolejnych to raptem trzy kroki:
- dodac pola np. reporter, developer na tabeli auth_users
- dodac dwie linijki do $data w modelu auth_users.
- dodac dwie nowe wartosci w konfiguracji $config['roles']
to wszystko, od tej pory mozemy odwolywac sie do $user->developer aby okreslic czy user jest developerem. nie ma problemu aby user mial wszystkie role, nie ma ograniczen, iz jeden user = jedna rola. takie dzialanie SA jest celowe i wystarczajace w wiekszosci projektow.
http://thejw23.blogspot.com/2009/09/simpleauth-i-role-uzytkownika.html
[2009-09-17] Kohana 3 wydana – co nowego?
Koło dwanaście godzin temu uploadowano najnowszą wersję Kohany: 3.0. Każdemu kto znał poprzednią Kohanę 2 nie trzeba mówić, że jest to jeden z najlepiej zaplanowanych i nowoczesnych frameworków PHP jakie dotąd powstały. Kohana w wersji 3.0 podwyższa jeszcze bardziej tę poprzeczkę. Na początek kilka linków:
Kohana 3.0 do pobrania: [link]
Ciągle rozwijana dokumentacja: [link]
Opis API Kohany: [link]
Wątek na oficjalnym forum: [link]
Krótkie podsumowanie zmian:
Katalogi
Tak jak w poprzedniej wersji używając plików projektu nie musimy troszczyć się o ich [...]
http://kohana.sher.pl/2009/09/kohana-3-wydana-co-nowego/
[2009-09-11] Simple BETA - Auth 1.4 oraz Modeler 1.6
z repozytoriow mozna pobrac wersje beta Simple_Auth oraz Simple_Modeler dla KohanaPHP 2.3.x - najprawdopodobniej beda to ostatnie wersje dla 2.3.x i kolejne stabilne obejma juz 2.4 oraz 3.0
co nowego?
Simple Auth:
- w sesji jest przechowywany obiekt Simple_User zamiast Auth_User_Model, co zmniejszylo uzycie pamieci np. w testach na jednej z aplikacji bylo to 0.7MB przy braku innych zapytan na stronie
- Simple Modeler zostal zastapiony Auth_Modeler po to aby uniezaleznic od siebie rozwijanie obu projektow oraz nie obciazac modulu autoryzacji funkcjami, ktore nie sa potrzebne (czyli Simple Modeler Lite)
Simple Modeler:
- $original zmienione na $data_original
- dodane $primary_key w celu latwej zmiany z ID (domyslne) na jakikolwiek inny
- DRY: check_alias(), check_timestamp(), check_skip()
- save() oraz delete() kasuja cache (o ile jest ustawiony)
- usuniete ArrayAccess, ktokolwiek tej funkcjonalnosci uzywal?
- check_id() zmienione na $loaded co jest bardziej intuicyjne (vide ORM)
- dodane cache_id oraz cache() do ustawiania cache
- usuniete fetch_x_cache, load_cache oraz query_cache, teraz nalezy uzywac cache_id w polaczeniu z fetch_all, fetch_where, fetch_row oraz query
- select() teraz umozliwia podanie kolumn po przecinku, a nie tylko jako tablice
- dodane fetch_row() w celu szybkiego zaladowania rekordu z bazy - jest load(), ale czytaj dalej
- dodane $result_object oraz set_result() do manipulacji zwracanym typem obiektu
- drobna reorganizacja kodu w niektorych miejscach
poniewaz teraz load() bedzie uzywane (powinno byc uzywane) tylko do formularzy i edycji wiec nie korzysta ono wiecej z cache.
na dniach Simple Auth zostanie zaktualizowane - Auth Modeler 'zaliczy' kilka zmian z najnowszej wersji Simple Modeler. w obu projektach jeszcze raz spojrze na kod i w niedlugim czasie powinny wyjsc wersje stabilne, ostatnie dla 2.3.x
razem lub dzien po wydaniu nowych wersji dokonam aktualizacji dokumentacji - sporo sie pozmienialo i stare przyklady beda tylko wprowadzaly w blad.
http://thejw23.blogspot.com/2009/09/simple-beta-auth-14-oraz-modeler-16.html
[2009-09-10] Nazywanie klas i plików w Kohanie
Kohana, jako framework MVC używa między innymi takich klas takich jak Kontrolery (Controllers), Modele (Models), Widoki (Views), Biblioteki (Libraries) czy Helpery.
Każda z nich powinna być umieszczona w osobnym pliku o odpowiedniej nazwie, umieszczonym w specjalnym katalogu. Sama nazwa klasy też podlega pewnym konwencjom. Pomagają one utrzymaniu projektu w porządku i ułatwieniu innym programistom zrozumieć naszą aplikację.
Każdy [...]
http://kohana.sher.pl/2009/09/nazywanie-klas-i-plikow-w-kohanie/
[2009-09-09] KohanaPHP i Codebench
czasami zachodzi potrzeba przetestowania, ktore rozwiazanie jest szybsze, mniej pamieciozerne. coby nie wymyslac na nowo kola, mozna skorzystac z modulu codebench - dla KohanaPHP 2.x jest on dostepny tutaj, a dla 3.x tutaj. ja testowalem wersje dla 2.x
o co tu chodzi. standardowo kopiujemy wszystkie katalogi i pliki do modules/codebench. nastepnie trzeba przygotowac swoja klase do testowania. tak jak przyklad w libraries/Valid_Color.php musi ona rozszerzac klase Codebench i zawierac metody zaczynajace sie od bench_. dodatkowe ustawienia to $description zawierajace opis jaki pojawi sie z wynikami oraz $loops czyli ilosc powtorzen. zawarte w przykladzie $$subjects nie jest do niczego potrzebne, to tylko tablica z danymi do tego konkretnego testu. czyli przykladowo zrobmy klase:
/**
* @author thejw23
*/
class Simple extends Codebench {
public $description = 'Testujemy roznice miedzy load a fetch_where.';
public $loops = 100;
public function bench_load()
{
$user = Simple_Modeler::factory('categories',1);
return true;
}
public function bench_fetch()
{
$user = Simple_Modeler::factory('categories')->fetch_where(array('id' => '1'));
return true;
}
}
celowo w obu przypadkach dalem factory, a nie instance. nastepnie uruchamiamy w przegladarce kontroler bench np. localhost/myapp/bench, podajemy nazwe naszej klasy (w przykladzie simple), klikamy Run i cieszymy sie wynikami:

http://thejw23.blogspot.com/2009/09/kohanaphp-i-codebench.html
[2009-09-06] Struktura katalogów w Kohanie
Jedną z ciekawszych funkcji w Kohanie jest kaskadowanie zasobów. W chwili gdy system będzie potrzebował danego pliku w pierwszej kolejności będzie on szukany w katalogu aplikacji. Jeśli nie zostanie znaleziony przeszukiwane są wszystkie moduły a na samym końcu folder systemu. Dopiero wtedy zgłaszany jest fakt nieistnienia takiego pliku.
W ten sposób Kohana może być łatwo rozszerzana [...]
http://kohana.sher.pl/2009/09/struktura-katalogow-w-kohanie/
[2009-08-20] KohanaPHP Syntax
na forum KohanaPHP oraz na podstronie z projektami mozna spotkac dwa rodzaje formatowania tekstu: Wiki oraz Markdown. do wiekszosci postow nie jest to niezbedne, ale czasami lepiej odpowiednio sformatowac tekst, aby byl czytelniejszy.
natopiast pod adresem KohanaPHP Coding Style znajduja sie zalecenia jaki styl kodowania jest wymagany w oficjalnych modulach, a takze jak pisac aby nasz kod byl tak samo sformatowany jak owe oficjalny moduly - oczywiscie to tylko zalecenia, w koncu KohanaPHP jest dla ludzi, nie dla robotow ;)
http://thejw23.blogspot.com/2009/08/kohanaphp-syntax.html
[2009-08-18] Simple Auth i Modeler - zmiany
wraz z wyjsciem wersji 2.4 oraz 3.0 KohanaPHP bedzie miala male zawirowanie:
- stara, sprawdzona 2.3.x z dobrze znana struktura itd
- nowa, 2.4 z odchudzonym core, nowa biblioteka DB oraz i18n
- najnowsza 3.0, przepisana na nowo, z HMVC
zarowno Simple Auth jak i Simple Modeler (od kilku dni jest oddzielnym projektem) w zwiazku z tym przejda pewne zmiany. do projektu dolaczyl Maciek, ktory zajmie sie wersjami dla 3.x, a ja skupie sie na 2.x - to sa wstepne plany, do czasu ukazania sie stabilnych wersji frameworka. co bedzie dalej, to 'sie zobaczy': jesli faktycznie miedzy 2.4 a 3.0 nie bedzie roznic, to zapewne pomyslimy o ujednoliceniu naszych bibliotek. jesli beda, to nastepne jest pytanie: z ktorej wersji frameworka bede dalej korzystal. na razie tego nie wiem, wiec nie wyrokuje. do czasu ukazania sie nowych wersji KohanaPHP i ustalenia co dalej, nie ma co sie spodziewac nowej finalnej wersji ktoregos z modulow.
w tzw. miedzyczasie zaszly pewne zmiany w repozytoriach obu projektow (struktura katalogow), plus sa tam podgrane nowe wersje beta - jak to beta, moga byc niestabilne, z bledami i slabo przetestowane ;)
zmianie tez ulegla numeracja - aby nie bylo watpliwosci dla ktorej wersji jest modul, zarowno obecny Simple Auth jak i Simple Modeler zostaly przenumerowane na wersje 2.x.x: pierwszy numerek oznacza wersje frameworka dla ktorej jest przeznaczony modul, a nastepne faktyczna wersje modulu.
http://thejw23.blogspot.com/2009/08/simple-auth-i-modeler-zmiany.html
[2009-08-13] [PHP] Przesiadka na Kohanę 3.0
Jeżeli ktoś śledzi na bieżąco zmiany we framework’u Kohana przez ostatnie pół roku, zdążył zapewne zauważyć, że projekt ciągle się rozwija. Ciągle wydawane są nowe wersję, najnowsza jest już na horyzoncie. Jednak dużym skokiem jest ciągle rozwijana wersja 3 framework’a. Architektura w tej wersji została zmieniona, co skutkuje faktem, że przeniesienie aplikacji z wersji 2.x [...]
http://feedproxy.google.com/~r/cmike/~3/JeeuKRnnNyo/
[2009-08-07] za’Kohany Kiro CMS
W dniu wczorajszym to jest 6 sierpnia 2009 podjąłem decyzję o wstrzymaniu wszelkich prac nad moim flagowym systemem Kiro CMS z silnikiem opartym o framework Kohana 2.x.x. Jednocześnie 1 października planuje wydanie wersji Kiro CMS opartego na architekturze HMVC, czyli KO3.
Przyznam się, że dość długo jak na mnie bo aż miesiąc zastanawiałem w jakim kierunku [...]
http://riu.wlc.pl/2009/08/zakohany-kiro-cms/
[2009-07-30] Simple Auth - porady
1) Simple Auth domyslnie loguje uzytkownika po emailu.
aby to zmienic edytuj modules/simple_auth/config i zmien:
$config['unique'] = 'email';
//na
$config['unique'] = 'username';
2) Simple Auth nie chce mnie zalogowac, co robic?
wlaczyc profiler i sprawdzic zapytanie jakie idzie do bazy. z niego od razu mozna wywnioskowac co jest nie tak, czy dane sa przekazywane poprawnie, czy jest zwracany jakikolwiek rekord, czy dane do logowania sie zgadzaja itd.
3) Simple Auth loguje ale co jakis czas jest gubiona sesja
edytuj /application/config/session.php (jesli go tam nie ma to skopiuj go z system/config/) i zmien adekwatne wpisy na:
$config['driver'] = 'native';
$config['gc_probability'] = 0;
$config['regenerate'] = 0;
4) Simple_Auth dziala, ale nie chce zapamietywac uzytkownika miedzy sesjami przeladarki
edytuj /application/config/cookie.php (jesli go tam nie ma to skopiuj go z system/config/) i zmien adekwatne wpisy na:
$config['domain'] = 'nazwa_twojej_domeny.pl';
http://thejw23.blogspot.com/2009/07/simple-auth-porady.html
[2009-07-25] O mojej Kohance
Od lutego br. korzystam z dobrodziejstw jakie daje praca na frameworku KohanaPHP. Od samego początku jej użytkowania wiedziałem, że jest to system, który skutecznie będzie wspierał mnie w mojej pracy. Kod to jednak nie wszystko – ważna rzecz to wsparcie, a wsparcie to przecież społeczność, a z tym już tak fajnie nie jest, bo większość [...]
http://riu.wlc.pl/2009/07/o-mojej-kohance/
[2009-05-29] Simple_Modeler 1.5
nowa wersja dostepna jest na SVN, zmiany, glownie zwiazane z cache:
- update() oraz insert() dzialaja na $timestamp i $skip tak samo jak save()
- dodane $where oraz where(), dla latwiejszego laczenia metod
- fetch_where() oraz count_where() stracily parametr $type, nalezy uzywac $where/where() zamiast niego
- dodane fetch_all_cache(), fetch_where_cache(), query_cache() w celu automatycznego cache`owania pobieranych danych
uzycie:
$users=Simple_Modeler::factory('ksiazki')->select('tytul','autor')->fetch_all_cache('ksiazki_info');
spowoduje pobranie danych i zapisanie ich w cache. kazde nastepne wywolanie tego zapytania odczyta (np. na innej podstronie) je nie z bazy, ale z cache.
http://thejw23.blogspot.com/2009/05/simplemodeler-15.html
[2009-05-29] Simple_Modeler 1.5
nowa wersja dostepna jest na SVN, zmiany, glownie zwiazane z cache:
- update() oraz insert() dzialaja na $timestamp i $skip tak samo jak save()
- dodane $where oraz where(), dla latwiejszego laczenia metod
- fetch_where() oraz count_where() stracily parametr $type, nalezy uzywac $where/where() zamiast niego
- dodane fetch_all_cache(), fetch_where_cache(), query_cache() w celu automatycznego cache`owania pobieranych danych
uzycie:
$users=Simple_Modeler::factory('ksiazki')->select('tytul','autor')->fetch_all_cache('ksiazki_info');
spowoduje pobranie danych i zapisanie ich w cache. kazde nastepne wywolanie tego zapytania odczyta (np. na innej podstronie) je nie z bazy, ale z cache.
http://thejw23.blogspot.com/2009/05/simplemodeler-15.html
[2009-04-20] Simple_Modeler 1.4.2
nowa wersja dostepna na SVN, zmiany, glownie zwiazane z laczeniem metod:
- dodane update(), tak dla porzadku skoro jest insert()
- dodane select() aby ograniczyc liczbe zwracanych pol (wczesniej zawsze *)
- dodane limit(), aby fetch_x mialo mniej parametrow
- uwaga: w zwiazku z powyzszym fetch zgubilo parametr $limit
- load() zwraca $this
dzieki temu mozna teraz w jednej linijce np. tak:
//pobranie 2 pol z limitem 3 rekordow
Simple_Modeler::factory('auth_users')->select('username','email')->limit(3)->fetch_all();
//zaladowanie pojedynczego rekordu z bazy, username=janek
$user=Simple_Modeler::factory('auth_users')->load('janek','username');
http://thejw23.blogspot.com/2009/04/simplemodeler-142.html
[2009-04-19] Simple_Auth - wprowadzenie
aktualne dla wersji: 1.3
Simple_Auth (dalej SA) jest biblioteka frameworka KohanaPHP umozliwiajaca uwierzytelnianie uzytkownikow.
w odroznieniu od domyslnego Auth dolaczonego do frameworka, SA:
- nie korzysta z ORM
- jest bardziej konfigurowalny, elastyczny i prostszy do modyfikacji / dostosowania do juz istniejacych systemow z inna niz domyslna struktura tabel
- sama biblioteka autoryzacji sklada sie z tylko jednego pliku
- zapisywanie ostatnio uzytego przy logowaniu IP oraz daty logowania
- mozliwosc ustawienia daty po ktorej uplywie user nie bedzie mogl sie zalogowac
ponadto SA umozliwia:
- dodawanie/kasowanie uzytkownikow
- pobieranie informacji o uzytkownikach
- nadawanie uprawnien uzytkownikom (logowanie/zarzadzanie/pelna administracja)
- 'remember me', automatyczne logowanie na podstawie cookies
- automatycznie zliczanie logowan
1. zmienne
protected $session;
dostep do sesji php
protected $config;
konfiguracja wczytana z pliku
2. metody
public function hash($str)
koduje podany string za pomoca algorytmu ustaloengo w konfiguracji
public function reload_user()
przeladowuje zalogowanego usera: pobiera dane z bazy i zapisuje je w sesji.
public function set_role($role, $user=0)
pozwala ustawic admin/active/moderator dla wybranego uzytkownika, domyslnie aktualnie zalogowanego.
jako parametr $role nalezy przekazac tablice w postaci array('admin'=>true,'active'=>0), wszelkie inne klucze niz role ustawione w konfiguracji sa pomijane.
jako $user mozna przekazac obiekt lub ID uzytkownika, ktoremu chcemy zmienic role.
public function logout($destroy=FALSE)
wylogowuje usera, jesli $destroy=true, niszczy cala sesje, w innym wypadku tylko klucz z uzytkownikiem.
kasowane jest tez cookies oraz token przypisany dla danej przegladarki.
public function logged_in()
zwraca true jesli user jest zalogowany, false jesli nie. sprawdzanie odbywa sie na podstawie danych zapisanych w sesji
public function get_user($user=0)
pobiera informacje o uzytkowniku, domyslnie o obecnie zalogowanym. jako $user mozna przekazac obiekt lub ID uzytkownika, wtedy pobierane sa dane tego usera z bazy.
public function create_user($user_data, $second=FALSE)
tworzy uzytkownika na podstawie przeslanych danych.
public function delete_user($user)
kasuje uzytkownika. domyslnie aktualnie zalogowanego. jako $user mozna przekazac obiekt, lub ID uzytkownika, wtedy on zostanie skasowany.
public function login($user, $password, $remember = FALSE)
loguje uzytkownika. jesli pomyslnie, zwraca true. zarowno $user jak i $password musza byc typu string
3. Ustawienia konfiguracji
przed pierwszym uzyciem modulu na danej stronie najlepiej zmienic wartosci kluczy salt_prefix i salt_suffix na inne niz domyslne, unikalne, nie powrarzajace sie na innych stronach. podobnie mozna postapic z session_key, cookie_key.
$config['hash_method'] = 'md5';
rodzaj algorytmu kodujacego haslo
$config['salt_prefix'] = 'simple_auth_secret';
string dodawany do hasla (na jego poczatku) przed kodowaniem
$config['salt_suffix'] = '_secret';
string dodawany do hasla (na jego koncu) przed kodowaniem
$config['lifetime'] = 1209600;
waznosc cookie przechowujacego dane do automatycznego logowania
$config['session_key'] = 'auth_user';
nazwa klucza sesji gdzie zapisywane beda dane uzytkownika
$config['cookie_key'] = 'auth_auto_login';
nazwa ciasteczka gdzie zapisywane beda dane do automatycznego logowania
$config['roles'] = array('admin'=>'','active'=>'','moderator'=>'')
nazwy pol na tabeli user przechowujacych role. wartosci musza pozostac puste, poniewaz jest to uzywane w set_roles jako filtr - wszelkie inne klucze przekazane w set_roles sa odrzucane.
$config['password'] = 'password';
nazwa pola do ktorego jest zapisywane haslo uzytkownika
$config['unique'] = 'email';
nazwa pola jakie bedzie uzywane przy logowaniu jako login
$config['unique_second'] = 'username';
nazwa pola jakie opcjonalnie bedzie uzyte w parze z $config['unique'] do sprawdzenia czy dana nazwa uzytkownika jest wolna
4. model user
user_exists($name, $second='')
metoda, sprawdza czy podany login usera jest wolny. opcjonalnie mozna podac pole jakie bedzie sprawdzone w parze, np. login+email czy sa unikalne.
5. model token
$now;
zmienna, przechowuje aktualny timestamp
delete_expired()
metoda, kasuje wszystkie stare tokeny z tabeli, porownujac date wygasniecia z $now
delete_user_tokens($id,$all=FALSE)
metoda, kasuje wszystkie tokeny uzytkownika o podanym ID, domyslnie tylko dla aktualnej przegladarki. ustawienie $all na true kasuje wszystkie tokeny.
create_token()
metoda, tworzy unikalny token
w kolejnej czesci zajme sie luznymi przykladami, a w nastepnej niewielkim tutorialem.
http://thejw23.blogspot.com/2009/04/simpleauth-wprowadzenie.html
[2009-04-16] Simple_Modeler - wprowadzenie
aktualne dla wersji: 1.4.3
razem z Simple_Auth dolaczony jest Simple_Modeler (dalej nazwany SM), ktory jednak jest osobnym, niezaleznym modulem i z powodzeniem moze byc stosowany bez systemu autoryzacji - wystarczy skopiowac plik Simple_Modeler.php do katalogu application/libraries oraz stworzyc modele dla poszczegolnych tabel.
jedna uwaga: Simple_Modeler jest nakladka (imho bardzo wygodna) na systemowy query builder, w razie watpliwosci nie zaszkodzi poczytac o nim w dokumentacji.
przykladowy model (application/models) dla tabeli 'sample' wyglada tak:
class Sample_Model extends Simple_Modeler
{
// Database table name
protected $table_name = 'sample';
}
to wszystko. na jego podstawie SM zna nazwe tabeli i sam pobierze z niej nazwy kolumn (o ile beda mu one do czegos potrzebne). jesli recznie ustawimy dla danego modelu $auto_fields = FALSE; wtedy trzeba samemu podac nazwy kolumn i model bedzie wygladal tak:
class Sample_Model extends Simple_Modeler
{
// Database table name
protected $table_name = 'sample';
protected $auto_fields = FALSE;
protected $data = array('id' => '',
'pole1' => '',
'pole2' => '',
'pole3' => '');
}
dodatkowa konfiguracja to:
1. zmienne:
$auto_fields
true oznacza, ze SM sam ma pobierac nazwy kolumn.
false oznacza, ze musza byc one podane w tablicy $data
$data
tablica $data zawiera nazwy kolumn w tabeli. do $data trafiaja tez wartosci z tabeli jesli je pobieramy za pomoca load(). set_fields() przypisuje do $data przekazywane wartosci (np. z formularza).
$original
tablica $original zawiera oryginalne dane z tabeli (domyslnie puste, czyli same nazwy kolumn). przy zapisie sa one porownywane z $data i do tabeli zapisywana jest tylko roznica (zmienione rekordy).
$aliases
tablica zawiera aliasy dla set_fields(). dzieki temu mozna np. w formularzu nazwac input 'imie' i zapisac je automatycznie do kolumny 'client_name'. np. $aliases=array('imie'=>'client_name');
$skip
tablica z polami jakie maja byc pominiete przy save(). np. $skip=array('pole1','pole2');
$use_cache
jesli true, nazwy kolumn sa cache`owane, czyli tylko raz sa pobierane tabeli, nastepnie juz z cache. uzywane tylko jesli $auto_fields jest true.
$timestamp
tablica zawierajaca nazwy pol, ktore przy save() maja miec automatycznie przypisana aktualna date i czas wykonania zapisu. np. $timestamp=array('pole1','pole2');
$timestamp_created
tablica zawierajaca zawiera nazwy pol ktore przy save() maja miec automatycznie przypisana aktualna date i czas wykonania zapisu, ale tylko przy wykonywaniu insert, dla update pozostaja one bez zmian. np. $timestamp=array('pole1','pole2');
$select
tablica zawierajaca nazwy pol ktore zastana pobrane z bazy (domyslnie wszystkie)
$limit
limit wierszy do pobrania z bazy
$offset
numer wiersza od ktorego zaczac pobieranie z bazy
2. metody:
load($value, $key='id', $type='where')
parametry: wartosc szukana,kolumna szukanej wartosci,rodzaj zlaczenia.
laduje rekord (tylko jesli jest on unikalny) dane do $data. mozliwe sa nastepujace wywolania:
load('1') - laduje rekord o id=1
load('john','name') - laduje rekord o name=john
load(array('imie'=>'jan','nazwisko'=>'kowalski')) - laduje rekord z imie=jan i nazwisko=kowalski
mozna dodatkowo przekazac typ zlaczenia czyli np.:
load(array('imie'=>'jan','nazwisko'=>'kowalski'),null,'orwhere') - laduje rekord z imie=jan LUB nazwisko=kowalski
aby bylo to jasne: rekord jest ladowany (dane przypisywane do $data) tylko jesli w tabeli jest JEDEN taki wpis. jesli dla ostatniego przykladu bedzie wiecej niz jeden jan kowalski, to $data zostanie puste, dane sie nie zaladuja - jesli chcemy pobrac wiecej niz dokladnie jeden rekord, trzeba stosowac fetch_where
set_fields($data)
parametry: tablica. musi miec ona postac array('pole'=>'wartosc',...), a jej wartosci zostaja przypisane do odpowiednich kluczy $data. tutaj wykorzystywane sa $aliases, aby przekazane dane wstawic do odpowiedniego pola, oraz skip, aby pominac pewne pola.
save()
zapisuje aktualna zawartosc $data do bazy. wczesniej sa porownanie wartosci z oryginalymi danymi z tabeli ($original) i zapisywane sa tylko roznice. tutaj tez pola zdefiniowane jako timestamp sa automatycznie wypelniana data i tutaj pomijane sa pola wymienione w $skip.
delete($what)
parametr: tablica
kasuje aktualnie zaladowany rekord (na podstawie id) lub, jesli przekazany jest parametr, kasuje wszystkie rekordy na podstawie okreslonych warunkow. np. delete(array('imie'=>'jan')) kasuje wszystkich z imieniem jan.
fetch_all($order_by = 'id', $direction = 'ASC')
parametry: order by, sortowanie. dane sa zwracane jako return metody, nie sa one zapisywane w $data.
public function fetch_where($where = array(), $order_by = 'id', $direction = 'ASC', $type = 'where')
parametry: warunki, order by, sortowanie, typ zlaczenia.
pobiera wybrane dane z tabeli. warunki musza byc przekazane w tablicy np. array('imie'=>'jan'), zwroci wszyskie rekordy z imie=jan. typ zlaczenia domyslnie to 'where', mozna je zmienic na 'like' itd.
dane sa zwracane jako return metody, nie sa one zapisywane w $data.
count_all()
zlicza wszystkie rekordy w tabeli
count_where($where=array(),$type='where')
zlicza wszystkie rekordy w tabeli na podstawie podanych warunkow
select_list($key, $display, $order_by = 'id', $where = array(), $direction = 'ASC')
parametry: klucz (option value), wyswietlana nazwa, order by, warunki, sortowanie
zwraca tablice, ktora mozna przekazac do html::dropdown aby wygenerowac element select. tablica ma postac $key=>$display
check_id()
sprawdza czy dane zostaly zaladowane, domyslnie na podstawie pola 'id'. ma to zastosowanie tylko w polaczeniu z load() - przy uzywaniu fetch dane nie sa ladowane do $data.
as_array()
zwraca aktualnie przechowywane dane jako tablice (zmienna $data)
insert($data_to_save = array())
dodaje do aktualnej tabeli nowy wiersz zwracajac jego ID
update($data_to_update = array(), $where = array())
wykonuje update na tabeli zgodnie z przekazana tablica klucz=>wartosc oraz warunkami okreslajacymi ktore rekordy zmienic
select($what=array())
ustawia $select
limit($limit,$offset = 0)
ustawia $limit i $offset
koniec czesci pierwszej. w kolejnej czesci podam przyklady uzycia poszczegolnych metod, a w nastepnej przyklad walidacji.
http://thejw23.blogspot.com/2009/04/simplemodeler-wprowadzenie.html
[2009-04-14] Simple_Auth 1.2
nowa wersja Simple_Auth, do pobrania na razie tylko z SVN. zmiany:
Simple_Auth
- zmiany w strukturze tabel
- dodane kolumny przechowujace date oraz ip ostatniego logowania
- time_stamp na tabeli z uzytkownikami jest aktualizowany tylko przy logowaniu
- dodana kolumna przechowujaca date utwozenia uzytkownika
- dodane w konfigu unique_second, ktore razem z unique moze (jest to opcjonalne) byc uzyte przy dodawaniu uzytkownikow do sprawdzenia czy taki user juz nie jestnieje
- dodane enable_user()
Simple_Modeler
- poprawione sleep/wakeup dla MySQLi
- nazwy kolumn w tabeli sa teraz ladowane tylko jesli faktycznie sa potrzebne
- nazwy kolumn sa domyslnie 'keszowane', mozna to wylaczyc
- dodane timestamp_create, pole datetime aktualizowane tylko przy insert
- skip jest sprawdzane jako ostatnie, moze wylaczyc timestamp
w niedlugim czasie (next week) pojawi sie kompletny tutorial do poruszania sie po simple_auth wraz z simple_modeler oraz przykladem walidacji. stay tune :)
http://thejw23.blogspot.com/2009/04/simpleauth-12.html
[2009-03-12] Simple_Auth 1.1
Simple_Modeler (bedacy czescia Simple_Auth, ale stanowiacy tak na prawde osobny modul) doczekal sie wersji 1.3, a wraz z nia:
- nazwy kolumn w tabeli sa automatycznie pobierane z bazy (nie trzeba ich recznie definiowac w modelu)
- update zapisuje tylko faktycznie zmodyfikowane pola, pomijajac reszte
- load() umozliwia zaladowanie pojedynczego wiersza na podstawie dowolnego unikalnego pola (nie musi to byc ID) badz tablicy pol
- $timestamp zawiera pola, ktore automatycznie przy insert/update beda mialy przypisany aktualny timestamp
plik do pobrania tutaj badz jako czesc Simple_Auth 1.1.
samo Simple_Auth jako takie nie posiada innych zmian niz tez zwiazane z Simple_Modeler.
pobierz
http://thejw23.blogspot.com/2009/03/simpleauth-11.html
[2009-03-02] Simple Auth 1.0
nowa wersja, tym razem oznaczona 1.0. powody do takiego skoku (z 0.3) sa dwa:
- modul posiada teraz cala planowana funkcjonalnosc
- modul wydaje sie dzialac jak najbardziej poprawnie
stad tez skok do numerka, ktory bardziej odpowiada w pelni funkcjonalnemu projektowi.
jesli chodzi o zmiany to tzw. 'code cleanup' oraz dodanie nowej funkcjonalnosci: pole uzywane do logowania jako username jest teraz ustawiane w konfiguracji modulu. dzieki temu mozna logowac sie na email, login, username, lastname czy jakiekolwiek inne pole jakie mamy na tabeli.
nowa wersje mozna pobrac ze strony download projektu, jak rowniez z repozytorium SVN.
http://thejw23.blogspot.com/2009/03/simple-auth-10.html
[2009-02-26] Simple_Auth SVN
pod adresem http://source.projects.kohanaphp.com/svn/simple-auth znajduje sie repozytorium SVN dla projektu Simple_Auth oraz Simple_Modeler.
http://thejw23.blogspot.com/2009/02/simpleauth-svn.html
[2009-02-24] Simple Auth 0.3
ukazala sie wersja 0.3 modulu autoryzacji uzytkownikow dla frameworka KohanaPHP, Simple_Auth:
glownie zmiany wewnetrzne plus jedna nowa rzecz - mozna kasowac/wylaczac uzytkownikow przekazujac zarowno ID jak i caly obiekt uzytkownika.
troche zmian przeszedl rowniez Auto_Modeler, wiec aby nie bylo problemow przy jednoczesnym uzywaniu zmodyfikowanej i oryginalnej wersji dostal nowa nazwe: Simple_Modeler.
zmiany sa dosyc istotne, wiec sugeruje wszystkim upgrade.
http://thejw23.blogspot.com/2009/02/simple-auth-03.html
[2009-02-20] Kohana Debug Toolbar, Kohana Projects i Nasza Kohana
Dzisiaj będzie szybko, krótko, treściwie, niczym po żołniersku Jestem zakręcony z powodu kończenia kolejnego projektu dla klienta oraz poniedziałkowego wylotu do ciepłych krajów; szok, że udało mi się coś nowego napisać (ale o prokrastynacji i GTD będzie innym razem, obiecuję).
Kohana Projects to długo oczekiwany serwis (oparty na popularnym ostatnio (tfu) Railsowym Redmine) mający [...]
http://feedproxy.google.com/~r/normanos/~3/3d4gK7lEy0w/
[2009-02-16] let`s go!
pomyslow jest sporo, zobaczymy co z tego wyjdzie.
w planach jest pisanie o tym co na co dzien robie, czyli webmasterka (kohanaphp, jquery i tematy pokrewne). a co jeszcze sie pojawi, tego nie wie nikt...
http://thejw23.blogspot.com/2009/02/lets-go.html
[2009-01-18] Integracja Open Power Template 2.0 z KohanaPHP 2.2 / 2.3
Open Power Template w wersji 2.0 ma się coraz lepiej. Niedawno wyszła jego pierwsza wersja beta. Wraz z wersją dev8 zdecydowałem się wykorzystać OPTv2 w produkcji, ponieważ składnia została już zamrożona - jeśli wierzyć zapewnienion Zyx’a ;-).
Odpowiedni moduł do integracji napisałem już wcześniej, jednak dopiero dzisiaj go publikuję. Tak samo, jak w przypadku modułu dla [...]
http://feeds.feedburner.com/~r/nowaker/~3/515794199/integracja-open-power-template-20-z-kohanaphp-22-23
[2009-01-10] KohanaPHP - uwaga na .htaccess!
Dzisiaj taka mało przyjemna sprawa :/ Jakiś czas temu pewna osoba dostała maila, którego można by streścić słowami: “wasza aplikacja jest dziurawa, mam hasła do bazy, proponuje 150zł i wykonam odpowiednie poprawki bezpieczeństwa”. Śliska sprawa tym bardziej, że napisała to osoba udzielająca się na polskim forum Kohany, notabene także czytelnik tego bloga Nie chce [...]
http://feeds.feedburner.com/~r/normanos/~3/508150055/
[2009-01-04] Dokumentacja off-line KohanaPHP
Jako że developerzy frameworka KohanaPHP nie udostępniają nigdzie paczki z dokumentacją off-line, postanowiłem sam wykonać zrzut dokumentacji. Tłumaczą to faktem, że dokumentacja jeszcze nie jest ukończona… Patrząc na tempo, w jakim uzupełniają dokumentację raczej nigdy nie będzie :)
kohanaphp-offline-documentation-2009-jan.7z
kohanaphp-offline-documentation-2009-jan.tar.bz2
kohanaphp-offline-documentation-2009-jan.tar.gz
kohanaphp-offline-documentation-2009-jan.zip
Umieszczam też [...]
http://feeds.feedburner.com/~r/nowaker/~3/502789473/dokumentacja-off-line-kohanaphp
[2008-11-06] Integracja Open Power Template 1.x z KohanaPHP 2.2
Integracja Open Power Template 1.x z KohanaPHP 2.2
Pół roku temu zamieściłem sposób na integrację systemu szablonów Open Power Template z frameworkiem KohanaPHP. Po pewnym czasie doszedłem jednak do wniosku, iż moje rozwiązanie jest lamerskie ;) Oto zamieszczam moduł integrujący Kohanę z OPT w taki sposób, że z szablonów korzystamy zupełnie tak samo, jak z View.
$view [...]
http://feeds.feedburner.com/~r/nowaker/~3/444521127/integracja-open-power-template-1x-z-kohanaphp-22
[2008-08-07] Kohana 2.2 nadchodzi
Jutro, tj. 8.08.08 zostanie wydana wersja 2.2 frameworka Kohana. Prace nad wersją 2.2 trwały około pół roku. Trudno powiedzieć, by był to czas stracony. Świadczy o tym dużo commitów na SVN i nowa funkcjonalność.
Jedną z nowych rzeczy jest napisany całkowicie od nowa ORM (object-relational mapper). Poprzednia wersja miała „nienaprawialny” błąd, który powodował, że nie można [...]
http://feeds.feedburner.com/~r/nowaker/~3/358793128/kohana-22-nadchodzi
[2008-06-12] [Kohana] KohanaPHP 2.1.2 Milestone - zmiany, zmiany, zmiany…
Wczoraj została wydana kolejna milowa wersja frameworka KohanaPHP, który to framework jest jednym z lepszych i w chwili obecnej najbardziej dynamicznie rozwijającym się frameworkiem opartym na PHP5. Wydanie tej wersji przyniosło też trochę zmian w polskim supporcie tego frameworka.
Wg ustaleń teamu developerskiego lokalne strony supportów mają zostać przekierowane na główną stronę http://www.kohanaphp.com, która zostanie "zinternacjonalizowana". [...]
http://feeds.feedburner.com/~r/cmike/~3/310314968/
[2008-05-27] LightTPD, mod_rewrite i Kohana PHP - ukrywanie index.php/
Dzisiejszy wpis poświęcony jest integracji frameworka KohanaPHP z serwerem LightTPD w taki sposób, aby ukryć adres index.php. Tzw. ładne linki, czy nice urls są bardzo ważne pod względem optymalizacji strony internetowej pod wyszukiwarki.
Plik lighttpd.conf:
$HTTP["host"] =~ "^(www\.|)nowaker\.net$" {
simple-vhost.server-root = "/home/www/nowaker.net/html"
accesslog.filename = "/home/www/nowaker.net/logs/access.log"
url.rewrite-once = ("^/(.*)$" => "index.php/$1")
}
Plik application/config/config.php:
[...]$config['index_page'] = '';
[...]
Prawda, [...]
http://feeds.feedburner.com/~r/nowaker/~3/303330006/lighttpd-mod_rewrite-i-kohana-php-ukrywanie-indexphp
[2008-05-13] Integracja Open Power Template z KohanaPHP framework
Są dwa sposoby, aby zintegrować system szablonów OPT z frameworkiem Kohana. Pierwszy, łatwiejszy i zarazem bardziej elegancki, nie wymaga żadnych modyfikacji w OPT - należy ściągnąć OPT i umieścić go w katalogu system/vendor/opt. Tworzymy również katalog application/templates, a w nim katalogi _compile oraz _cache.
Poniżej prezentuję zaś kod, który zmusi nasz OPT do działania:
define ('OPT_DIR', SYSPATH [...]
http://feeds.feedburner.com/~r/nowaker/~3/303330009/integracja-open-power-template-z-kohanaphp-framework
[2008-04-20] KohanaPHP - e-webcities jako przykład wykorzystania
Kilka dni temu pojawił się nowy skrypt, który powinien was zainteresować. Pisząc “was” mam na myśli tą część, która wielokrotnie wyrażała chęć obejrzenia czyjegoś projektu napisanego w Kohanie na forum.php.pl czy też na forum.kohanaphp.pl.
Otóż system wymiany linków e-weblink.pl udostępnił skrypt e-webcities służący do kolokwialnie mówiąc nabicia sobie punktów w systemie (czytaj: powiększenia zaplecza, zindeksowania, [...]
http://feeds.feedburner.com/~r/normanos/~3/274071387/
[2008-03-29] Kohana po polsku

Kohana polską stronę ma i to wcale nie byle jaką. Na dodatek jest to jedna z pierwszych, o ile nawet nie pierwsza (niech mnie ktoś poprawi, jeśli się mylę), na tle innych języków. Nie posiada natomiast własnej wersji językowej w przeciwieństwie do innych krajów, takich jak Holandia, Francja, Niemcy, Macedonia czy Hiszpania.
Pomyślałem sobie więc, że skoro ostatnio piszę trochę w tym frameworku, i to projekty przeznaczone dla osób mówiących w języku polskim, to przetłumaczę też pare tych plików. Nie jest to w końcu zajęcie zajmujące aż tak dużo czasu, a efekt przydałby się w końcu nie tylko mnie, ale też wielu innym osobom, które zdecydowały się na pracę z Kohana.
Podczas tłumaczenia pojawiły się oczywiście wątpliwości co do niektórych słów. Jakoś z nich wybrnąłem, choć wciąż wydaje mi się, że moja praca powinna zostać sprawdzona przez kogoś, kto zna się na tym lepiej ode mnie (mam na myśli głównie terminologię). Język angielski jest chyba lepiej przystosowany do projektów informatycznych, lepiej rozumie się niektóre kwestie i łatwiej je zapisać. Chociaż może ja tylko mam takie wrażenie przez to, że niektóre słowa/frazy nie są wprost do przetłumaczenia, co często prowadzi do sytuacji, w których trzeba przepisać coś w dłuższej formie, która musi dostatecznie wytłumaczyć, o co chodzi w danym zagadnieniu.
Prezentuję więc swoje amatorskie, domorosłe tłumaczenie. Byłbym wielce rad, gdyby ktoś znający się na rzeczy i siedzący w tych sprawach rzucił na to swoim fachowym okiem, wskazał błędy, zasugerował zmiany, etc. Chciałbym to później posłać do administratorów zarówno polskiej, jak i angielskiej (tudzież oryginalnej) strony Kohana.
Pobierz: spolszczenie Kohana
P.S. Tylko pliki odpowiadające za płatności Trident i Trustcommerce nie zostały spolszczone. Polacy i tak z tego nie korzystają :).
EDIT (@23:43): No i po zgłoszeniu na IRC Kohana dowiedziałem się, że od 3 miesięcy takie tłumaczenie już istnieje, tyle że w repozytorium zapowiadanej wersji. Szlag trafił moją pracę. Jedna jest tylko nauczka - zawsze najpierw sprawdzać repozytorium :).
http://feeds.feedburner.com/~r/Walker/~3/260270917/
[2008-03-26] TBS in Kohana 2.2+
Due to changes in 2.2 (upgrade notes) some changes in TinyButStrong template integration files are needed.
http://coffee3.org/2008/03/26/tbs-in-kohana-22/
[2008-02-07] [Kohana] Kohana 2.1 już jest!
Ukazała się długo oczekiwana stabilna wersja frameworka PHP5 - KohanaPHP. 5 lutego w późnych godzinach nocnych wersja z SVN została oznaczona numerkiem 2.1 i nazwą kodową Schneefeier. Wszystkie zgłoszone błędy zostały usunięte, choć deweloperzy zapowiadają kolejną wersje w przeciągu paru tygodni.
Nowości w tej wersji frameworka to brak podziału na wersje, oraz przede wszystkim nowe moduły [...]
http://feeds.feedburner.com/~r/cmike/~3/290902590/
[2008-02-06] Kohana PHP 2.1 wydana
Wydanie frameworka Kohana PHP w wersji 2.1 stało się faktem! Oto lista najważniejszych funkcji, podana w roadmapie dla wersji 2.1:
Image library
Cache library
ORM library
Kodoc library
Auth module
Forge module
Template_Controller, for simple auto-rendering templates
PostgreSQL driver for Database
MySQLi driver for Database
Nie jestem być może zbyt oryginalny, kopiując na żywca krótką listę funkcji prosto z oficjalnej strony Kohany; czuję się jednak [...]
http://feeds.feedburner.com/~r/nowaker/~3/303330012/kohana-php-21-wydana
[2008-01-22] Zend_Cache jako biblioteka Kohana
Framework Kohana (wg mnie) jest świetnym następcą Code Igniter-a (więcej o Kohanie możecie znaleźć w poście Normanosa lub na stronie jej polskiego supportu). Brakuje mi w niej jednak wielu bibliotek, które znajdują się w frameworku Zend-a. Fakt, że można je ładować poprzez $this->load->library() lecz nie na wszystkie to działa i wydaje się być dosyć niezgrabne. [...]
http://blog.suda.pl/2008/01/22/zend_cache-jako-biblioteka-kohana.html
[2008-01-19] KohanaPHP - biblioteki Validation i FORge
Dzisiaj parę słów o bibliotece Validation i nowym komponencie FORge (Form Generation - na razie w SVN, będzie wraz z 2.1). Może na początek coś na temat “zwykłej” walidacji danych. Jakiś czas temu na jednym z blogów przeczytałem o Kohanie: “głupie zwalidowanie formularza wg oficjalnej strony wymaga jakiejś niesamowitej ilości kodu”. W pierwszej [...]
http://normanos.com/dev/php/kohanaphp-biblioteki-validation-i-forge/
[2008-01-16] KohanaPHP - ruszył polski support
Parę dni temu ruszył polski support dla KohanaPHP framework. W obecnej chwili zostało uruchomione forum oraz strona na której są przetłumaczone teksty i poradniki z oficjalnej strony frameworka. Dodatkowo są zaczątki planety czyli agregatora wpisów z blogów na temat tego softu. Jak to z początkami for bywa - jest pusto, ale jestem przekonany, że razem [...]
http://normanos.com/dev/php/kohanaphp-ruszyl-polski-support/
[2008-01-13] Kohana PHP framework - kiedy wersja 2.1?
Minęły dwa miesiące od daty wydania frameworka Kohana w wersji 2.0, a już z niecierpliwością wyczekuję wersji 2.1. Magiczna liczby 100% na roadmapie Kohany 2.1 jest coraz bliżej i stawiałbym, że 2.1 wyjdzie około 5-10 lutego. Czyżby developerzy Kohany chcieli nam osłodzić niezdaną sesję? ;)
http://feeds.feedburner.com/~r/nowaker/~3/303330016/kohana-php-framework-kiedy-wersja-21
[2008-01-09] TinyButStrong template engine in Kohana PHP framework
It took me a while to set up a TinuButStrong template engine into Kohana. I hope, this post will help You do it faster. You will need at least revision 1690 of Kohana (it didn’t worked for me with stable release). You can download it manually from their SVN/Trac or build rpm package from kohana.spec [...]
http://coffee3.org/2008/01/09/tinybutstrong-template-engine-in-kohana-php-framework/
[2007-12-11] Kohana PHP framework
Kohana to mały framework MVC, wspomagający tworzenie stron internetowych. Wersja 1.0 była forkiem słynącego z prostoty i szybkości (ale i rzadkimi aktualizacjami) CodeIgnitera. Wersja 2.0, wydana około miesiąca temu stanowi już całkowicie osobny projekt. Na aktualizacje nie ma co narzekać - społeczność Kohany na bieżąco zajmuje się poprawianiem błędów i implementacją nowych funkcji.
Kohana PHP [...]
http://feeds.feedburner.com/~r/nowaker/~3/303330021/kohana-php-framework
[2007-11-08] Kohana 2.0 - the swift php5 framework
No i wykrakałem wczorajszym wpisem Jest oficjalna wersja 2.0, jest i nowa strona www. Ciekawie został rozwiązany dział download. Można pobrać dwie wersje:
Tiny Flower (Minimal) ? zawiera biblioteki: Session, Validation, oraz helpery: array, cookie, form, html, security, url, validation.
Naked Babe (Standard) ? dodatkowe biblioteki: Archive, Database, Encryption, Pagination, Profiler. Dodatkowe helpery: date, download, [...]
http://normanos.com/dev/php/kohana-20-the-swift-php5-framework/
[2007-11-07] Kohana czyli Code Igniter w ręce ludu
Ważne: ta notka przeleżała w brudnopisie prawie miesiąc, czekając aż zostanie skończona. Niestety jestem w trakcie pracy nad bardzo dużymi nowymi projektami i nie miałem czasu jej skończyć. Z uwagi na to, że lada dzień zapowiadane jest “zamrożenie” stanu z SVN i wydanie wersji stabilnej, postanowiłem opublikować to co mam
Sposób [...]
http://normanos.com/dev/php/kohana-czyli-code-igniter-w-rece-ludu/