Moja pierwsza strona w Kohana

Skoro udało mi się już ściągnąć, zainstalować i skonfigurować framework Kohana pora zabrać się za tworzenie aplikacji. Na początek coś łatwego.

Struktura strony

Wygląd srony
Wygląd srony
Zbuduję statyczną stronę zawierająca kilka kategorii w menu głównym. Każda kategoria będzie zawierała co najmniej jedną podstronę. Linki do podstron będą znajdowały się w dynamicznie generowanym submenu. Na każdej podstronie znajdzie się co najmniej jedna sekcja z treścią. Z grubsza będzie to wyglądało tak jak na obrazku obok. Oczywiście zaprzęganie frameworka Kohana do generowania statycznej strony jest niczym strzelanie z armaty do muchy, ale od czegoś trzeba zacząć. Mając taką ramową aplikacje łatwo będzie zmienić model tak, aby korzystał chociażby z bazy danych.

Struktura katalogów

Taka prosta strona może być zrealizowana za pomocą jednego widoku, jednego modelu i jednego kontrolera. Do struktury, oczywiście w katalogu application dodajemy odpowiednie pliki, tak jak to widać na ilustracji obok. Dodatkowo w katalogu na który wskazuje domena umieszczamy katalog media z podkatalogami css i img w których będziemy przechowywać pliki odpowiedzialne za wygląd strony.

Model

Zacznę od omówienia modelu zdefiniowanego w pliku /models/content.php. Utworzyłam w nim, zgodnie ze standardem nazewnictwa (nazwa modelu musi się pokrywać z nazwą pliku , dodatkowo kończy się sufiksem _Model) klasę Content_Model dziedziczącą po Model a w konstruktorze dodałam wywołanie konstruktora rodzica. Do kompletu dołożyłam publiczną zmienną $a_Content, która będzie tablicą przechowującą kompletną zawartość wywołanej podstrony (o strukturze tej tablicy za chwilę).

defined('SYSPATH') OR die('No direct access allowed.');
	class Content_Model extends Model{
		public $a_Content=array();

		public function __construct(){
			parent::__construct();
		}
	}

Zgodnie z założeniami chcemy, aby strona składała się z tytułu, menu głównego, submenu i treści zawierającej sekcje. Dlatego tablica $a_Content będzie zawierała takie pola jak: title, main_menu, submenu, sections. Oczywiście każde z tych pól będzie miało swoją strukturę.

Dla przejrzystości definiuję szereg funkcji prywatnych, odpowiedzialnych za wypełnianie poszczególnych pól tablicy $a_Content, oraz jedną funkcję publiczną, która będzie z tych funkcji korzystała i którą będziemy wywoływać w kontrolerze aplikacji:

	private function get_title($i_Active){
	}
	private function get_main_menu($i_Active){
	}
	private function get_submenu($i_Active,$i_Subactive){
	}
	private function get_sections($i_Active,$i_Subactive){
	}
	public function get_content($i_Active,$i_Subactive){
		$this->a_Content['title'] = $this->get_title($i_Active);
		$this->a_Content['main_menu'] = $this->get_main_menu($i_Active);
		$this->a_Content['submenu'] = $this->get_submenu($i_Active,$i_Subactive);
		$this->a_Content['sections'] = $this->get_sections($i_Active,$i_Subactive); 
	}

Funkcje te pobierają jeden lub dwa parametry $i_Active to numer wyświetlanej kategorii, $i_Subactive – numer podstrony w wybranej kategorii.
Teraz pora omówić funkcje generujące poszczególne elementy tablicy $a_Content. Na użytek każdej z tych funkcji będę tworzyć prywatne zmienne zawierające statyczną treść strony.

Zacznijmy od funkcji get_title(). Na jej potrzeby stworzyłam tablicę $a_Title zawierającą tytuły poszczególnych kategorii. Oczywiście liczba jej elementów musi odpowiadać liczbie kategorii. Funkcja get_title() zwraca po prostu odpowiednia pozycję z tej tablicy:

	private $a_Title = array('Home', 'Partners', 'Profiles', 'Career', 'Contact');
	private function get_title($i_Active){
		return $this->a_Title[$i_Active];
	}

Aby wygenerować menu główne stworzyłam tablicę $a_MainMenu. Znów liczba elementów musi być taka sama jak liczba kategorii, a każdy element posiada pole name (ta informacja wyświetli się w menu głównym) i link (ta informacja pozwoli nam skonstruować link wewnętrzny). Funkcja get_main_menu() kopiuje tablicę do zmiennej lokalnej, ustawia dla odpowiedniej pozycji dodatkowe pole active (przyda się do wyróżnienia wybranej kategorii w menu) i zwraca tak przetworzoną tablicę:

	private $a_MainMenu = array(
		0 => array('name' => 'Home', 'link' => 'index'),
		1 => array('name' => 'Colaboration', 'link' => 'colaboration'),
		2 => array('name' => 'Profile', 'link' => 'profile'),
		3 => array('name' => 'Career', 'link' => 'career'),
		4 => array('name' => 'Contact', 'link' => 'contact'));
	private function get_main_menu($i_Active){
		$menu = $this->a_MainMenu;
		$menu[$i_Active]['active'] = 1;
		return $menu;
	}

Dla każdej kategorii będziemy generować submenu. Do tego celu przyda się prywatna tablica $a_SubMenu , która zawiera informację ile podstron jest w każdej kategorii. get_submenu() sprawdza ile pozycji submenu jest w aktywnej kategorii, pobiera nazwę i link aktywnej kategorii a następnie w pętli tworzy lokalną tablicę $a_SubMenu. Każda pozycja tej tablicy zawiera pola name (nazwa podstrony widoczna w submenu) i link (dane potrzebne do stworzenia linku wewnętrznego). Ponadto w pętli sprawdzana jest wartość zmiennej $i_Subactive, przekazanej jako parametr do funkcji i w zależności od wartości tej zmiennej ustawiane jest dodatkowe pole dodatkowe pole active:

	private $a_SubMenu = array(3,6,4,1,2);
	private function get_submenu($i_Active,$i_Subactive){
		$i_LiczbaPozycji = $this->a_SubMenu[$i_Active];
		$s_Name = $this->a_MainMenu[$i_Active]['name'];
		$s_Link = $this->a_MainMenu[$i_Active]['link'];
		for($i=0;$i<$i_LiczbaPozycji;$i++){
			$a_SubMenu[$i] = array(
				'name' => $s_Name.' SubMenu '.($i+1), 
				'link' => $s_Link."/$i/"
			);
			if($i == $i_Subactive) $a_SubMenu[$i]['active'] = 1;
		}
		return $a_SubMenu;
	}

Na koniec wystarczy dla każdej podstrony (czyli pozycji submenu) wygenerować treść w postaci tablicy sekcji. Do tego posłużą mi dwie prywatne zmienne $a_LiczbaSekcji (zawiera informację o tym ile sekcji znajduje się w poszczególnych podstronach) i $a_SectionText (zawiera string, który się wyświetli jako treść sekcji). Funkcja get_sections() pobiera informację o liczbie sekcji na wybranej podstronie i generuje tytuł podstrony w oparciu o tytuł kategorii i numer podstrony. Następnie w pętli generuje kolejne pozycje lokalnej tablicy $a_Sekcje, które zawierają pola title (tytuł sekcji) i content (treść sekcji). Na koniec funkcja zwraca wygenerowaną tablicę.

	private $a_LiczbaSekcji = array(
			0 => array(2,1,6),
			1 => array(3,5,1,6,2,4),
			2 => array(1,5,2,3),
			3 => array(4),
			4 => array(2,1)
		);
	private $s_SectionText = 'Jakaś przykładowa treść';
	private function get_sections($i_Active,$i_Subactive){
		$i_LiczbaSekcji = $this->a_LiczbaSekcji[$i_Active][$i_Subactive];
		$s_SectionTitle = $this->a_MainMenu[$i_Active]['name'].' SubMenu '.($i_Subactive+1);
		for($i=0;$i<$i_LiczbaSekcji;$i++){
			$a_Sekcje[] = array(
				'title'=>$s_SectionTitle.' Section '.($i+1),
				'content'=>$this->s_SectionText);
		}
		return $a_Sekcje;
	}

I to już właściwie wszystko jeśli chodzi o model.

Widok

Po stworzeniu modelu czas zabrać się za widok zdefiniowany w pliku /views/t_home.php. Plik ten zawiera głównie kod html. Nie będę szczegółowo rozwodzić się nad całym kodem określającym ramy dokumentu. Istotnym jest, że ma się w nim znajdować pięć elementów: tytuł, tytuł podstrony, menu główne, submenu i sekcje. Aby wyświetlić tytuł wystarczy skorzystać z helpera html i zmiennej $title, której później za pomocą kontrolera przypiszemy odpowiednie dane pobrane z modelu. Fragment kodu odpowiedzialnego za wyświetlenie tytułu wygląda następująco:

 
	<h1><?php echo html::specialchars($title) ?></h1>;

W identyczny sposób wyświetlamy tytuł podstrony:

 
<h2><?php echo html::specialchars($sub_title) ?></h2>

Do wygenerowania menu głównego wykorzystamy zmienną $main_menu, która zostanie powiązana z danymi w odpowiednim formacie za pomocą kontrolera. Pamiętając jaką strukturę miały dane dotyczące menu, wyprodukowane w modelu obsłużymy je za pomocą pętli (wybrałam pętlę foreach choć mogłaby to być również zwykła pętla for). W pętli pobieramy kolejne pozycje menu głównego i w zależności od wartości pola active generujemy link (tu znów z pomocą przychodzi helper html) lub tekst otoczony otoczony tagami <li> i </li> Całość otoczona jest tagami <ul> i </ul>. Umiejętne wykorzystanie stylów (czego nie będę tu omawiać) pozwoli nam zrobić z takiej listy zgrabne menu. Konstrukcję linków i sposób ich działania opisze na końcu.

<ul>
	<?php
		foreach ($main_menu as $position){
			if(isset($position['active']) and $position['active']==1){
				echo '<li>'.$position['name'].'</li>'.PHP_EOL;
			}else{
				echo '<li>'.html::anchor('/home/'.$position['link'],$position['name']).'</li>'.PHP_EOL;
			}
		}
	?>
</ul>

W identyczny sposób tworzymy submenu:

<ul>
	<?php
		foreach ($sub_menu as $position){
			if(isset($position['active']) and $position['active']==1){
				echo '<li>'.$position['name'].'</li>'.PHP_EOL;
			}else{
				echo '<li>'.html::anchor('/home/'.$position['link'],$position['name']).'</li>'.PHP_EOL;
			}
		}
	?>
</ul>

Na koniec wyświetlamy pozostałą zawartość strony, czyli sekcje. Ponieważ w naszym modelu informacje o sekcjach były umieszczone w tabeli znów posłużymy się pętlą w której zostanie przeanalizowana zmienna $sections. Właśnie do tej zmiennej za pomocą kontrolera przypiszemy dane dotyczące sekcji, pobrane z modelu.

<div>
	<?php
		foreach($sections as $section){
			 echo '<div>
			 	<h3>'.$section['title'].'</h3>
			 	<p>'.$section['content'].'</p>
			 </div>';
		}
	?>
</div>

I to już cały widok.

Kontroler

Teraz wystarczy już tylko stworzyć kontroler, który pobierze dane z modelu i przekaże je do widoku. Zgodnie z ideą konstrukcji linków zastosowana w frameworku Kohana pierwszy człon linku (następujący po domenie) wskazuje na kontroler jaki ma zostać uruchomiony, drugi człon wskazuje na metodę tego kontrolera która ma zostać wykorzystana, a kolejne człony to parametry przekazywane do tej metody. Proste i klarowne. Co więcej staje się zrozumiałe dlaczego linki w widoku konstruowałam właśnie w taki a nie inny sposób.
Spostrzegawczy czytelnik zapewne zauważył, że zaczynały się one od ciągu ‘home/’ po którym następowały ciągi pobrane ze zmiennej $position['link']. I tak dla pierwszej pozycji menu głównego utworzony link ma postać: mojadomena.pl/home/index a dla pierwszej pozycji submenu mamy link mojadomena.pl/home/index/0. Oznacza to, że wybranie pierwszego z zacytowanych linków powinno uruchomić metodę index() kontrolera Home_Controller z domyślnymi parametrami, a kliknięcie wybranie z drugiego przykładu uruchomi tę samą metodę z jednym parametrem o wartości 1.
Oznacza to, że do ukończenia aplikacji brakuje nam już tylko kontrolera Home_Controller który umieścimy w pliku /controllers/home.php. Główny szkielet kontrolera przedstawiony jest na poniższym listingu:

<?php defined('SYSPATH') OR die('No direct access allowed.');
class Home_Controller extends Controller {
	const ALLOW_PRODUCTION = FALSE;
	public $auto_render = TRUE;
	public $template = 't_home';
	public function __construct(){
		parent::__construct();
		$this->template = new View($this->template);
		if ($this->auto_render == TRUE){
			Event::add('system.post_controller', array($this, '_render'));
		}
	}
	public function _render(){
		if ($this->auto_render == TRUE){
			$this->template->render(TRUE);
		}
	}
}
?>

Taka konstrukcja zapewnia nam automatyczne załadowanie widoku t_home i jego renderowanie.

Ponieważ z założenia strona którą tworzę ma być statyczna i zawiera dokładnie pięć, ściśle określonych kategorii (elementy głównego menu), zdecydowałam się dla każdej z nich utworzyć osobną metodę. Oczywiście można było zrobić to prościej, za pomocą jednej metody z odpowiednim parametrem. Jest to bardziej elastyczne rozwiązanie, które niewątpliwie przyjdzie mi zastosować kiedy będę robić serwis, którego układ nie będzie ściśle ustalony.

Tymczasem zdecydowałam się zaprezentować tu bardziej dydaktyczne i być może bardziej przejrzyste dla początkującego rozwiązanie. Dla każdej kategorii stworzyłam osobna metodę wywołującą jedną prywatną funkcję z odpowiednimi parametrami:

	public function index($i_Subactive=0){
		$this->_set_content(0,$i_Subactive);
	}
	public function colaboration($i_Subactive=0){
		$this->_set_content(1,$i_Subactive);
	}
	public function profile($i_Subactive=0){
		$this->_set_content(2,$i_Subactive);
	}
	public function career($i_Subactive=0){
		$this->_set_content(3,$i_Subactive);
	}
	public function contact($i_Subactive=0){
		$this->_set_content(4,$i_Subactive);
	}

Warto zauważyć, że każda z tych funkcji ma zdefiniowaną domyślna wartość parametru wejściowego na wypadek linku o konstrukcji takiej jak w pierwszym przykładzie.

Pozostaje już tylko zdefiniować prywatną metodę _set_content() (nazwy prywatnych metod kontrolerów powinny zaczynać się od pojedynczego podkreślnika). W ciele tej funkcji tworzymy model i wywołujemy jego metodę get_content(). Po tym przekazujemy do kolejnych zmiennych widoku wartości wygenerowane przez wywołany model.

private function _set_content($i_Active,$i_Subactive){
	$m_Content = new Content_Model;
	$m_Content->get_content($i_Active,$i_Subactive);
	$this->template->title = $m_Content->a_Content['title'];
	$this->template->main_menu = $m_Content->a_Content['main_menu'];
	$this->template->sub_menu = $m_Content->a_Content['submenu'];
	$this->template->sub_title = $m_Content->a_Content['submenu'][$i_Subactive]['name'];
	$this->template->sections = $m_Content->a_Content['sections'];
}

I to już właściwie wszystko. Jak ten kod działa w praktyce można sobie zobaczyć uruchamiając tę stronę.

46 komentarzy do wpisu „Moja pierwsza strona w Kohana”

  1. Hej, dzięki za tutoriala. Postanowiłem wrócić na jakiś czas do php, żeby napisać prostą stronę na własne potrzeby. Na co dzień czytam i zajmuję się ciężkimi frameworkami dla javy toteż i przykłady i dokumentacja jest ciężka w odbiorze. Czytając tego tutoriala z miłą chęcią zagłębiałem się w lekturę i czytało mi się go bardzo miło:) Pozdrawiam i życzę dalszej chęci do dzielenia się wiedzą z innymi!

  2. Witam,

    Długo szukałem jakiegoś prostego tutoriala i bardzo się ucieszyłem widząc jak wykładasz prosto konfiguracji jednak zawiesiłem się na tym artykule.

    Opisujesz np Model podając kod opisujesz i dalej podajesz następny kod i następny dla Modelu jednak gdzie go wkleić ni piszesz? znaczniki już zamknęłaś w pierwszym kodzie.

    Kohana to mój pierwszy framework i nadal nie wiem jak zacząć.

    Spróbuj go napisać w sposób bardziej jasny

    Pozdrawiam Grzegorz

  3. “Opisujesz np Model podając kod opisujesz i dalej podajesz następny kod i następny dla Modelu jednak gdzie go wkleić ni piszesz?”

    Przyjęłam taką konwencję, że jeśli nie napisałam tego wprost to oznacza, że wszystkie opisane funkcje sa metodami tego samego kontrolera. Na początku napisałam szkielet kontrolera a później uzupełniam go kolejnymi metodami.

  4. Witaj, przeglądam google od trzech dni i nic ciekawego z podstaw php w oparciu o framework kohana nie znalazłem. Dopiero teraz trafiłem na Twój blog i trochę mnie oświeciło, jednak do pełni szczęścia brakuje mi czytelności w tym przykładowym kodzie. Jeśli możesz np. udostępnić pliki tego całego tutoriala czyli php + img + css aby można było je pobrać i przeanalizować to będzie fajnie. Jestem mocno początkujący i pewnie innym na moim poziomie również ułatwi to sprawę. Druga sprawa to jak zacząć od tego projektu, struktura czy inaczej wygląd strony skąd mogę pobrać te pliki graficzne aby zrobić to tak jak Ty. Sorki za niski poziom wypowiedzi ale jak już wspomniałem raczkuje w tym temacie a muszę uczyć się na konkretnym przykładzie bo inaczej nic z tej nauki nie wyjdzie. Dziękuję

  5. Tutorial został pomyślany i skonstruowany w taki sposób, że czytając go po kolei i kopiując przedstawione fragmenty kodu uzyskuje się kompletny kod. Dlatego nie udostępniam (i nie przewiduję tego w przyszłości) dodatkowo całego kodu :) Zakładam minimum wysiłku ze strony kogoś kto się chce nauczyć. Taka moja belferska przewrotna natura :)

    Co do drugiej części Twojego komentarza. Ja planuję najpierw funkcjonalność aplikacji i w zależności od niej strukturę kontrolerów i modeli oraz widoków oraz układ elementów w widokach, ale tylko ogólnie. To znaczy planuję jakie elementy muszą się w widoku znaleźć. Dopiero kiedy aplikacja jest ukończona za pomocą plików CSS dopracowuje wygląd tych elementów i ich ułożenie na stronie.

    W opisanej tu przeze mnie aplikacji nie ma praktycznie żadnych plików graficznych. Jeśli chcesz zobaczyć strukturę znaczników HTML i użyte pliki CSS wystarczy, że odpalisz aplikację do której link jest na końcu tutoriala i zrobisz “save as” Będziesz wiedział jak zrealizowany jest układ strony i jej wygląd.

  6. Hej Joanno,

    zgadzam się z Tobą, nie powinnaś udostępniać kodu, minimum wysiłku, podstawowej wiedzy z zakresu budowy klas w OOP i wszystko idzie bardzo płynnie. Świetny temat. Inne z pewnością także przejrzę, dobrze i szybko się czyta, łatwo i zrozumiale napisane. Dziękuje za link do helpers które pomoże w pełni zastosować system szablonów jaki jest w Kohanie. Dobrze, że udostępniłaś tylko podstawowy kod HTML, umożliwiając własne narzucenie styli css. Tak jak mówisz, kto chce, może użyc styli z Twojej strony, analizując sobie źrodło i podmieniając zawartość t_home. Znalazłem kilka błędów, mianowicie

    “Do kompletu dołożyłam publiczną zmienną $a_Content, która będzie tablicą przechowującą kompletną zawartość wywołanej podstrony (o strukturze tej tablicy za chwilę).”

    mogłabyś dodać do listy atrybutów
    public $a_Content=array();
    aby wszystko było lepiej zrozumiałe

    private function get_title($i_Active){
    popraw na
    private function get_main_menu($i_Active){
    wpisałaś dwa razy tę samą nazwę metody :)

    Zastanawia mnie ten fragment kodu, ogolnie miło jakbyś omówiła
    Event::add(‘system.post_controller’, array($this, ‘_render’));
    tymczasem przechodzę do kolejnych tematów.

    Ze swojej strony testerom mogę zasugerować utworzenie pliku routes.php w application/config i umieszczenie

    dzieki czemu domyślnym kontrolerem będzie home a nie welcome

  7. Witam, piszę w sprawie tego bloga, czy tylko ja nie widzę kodów w opisach kohany czy to wszyscy tak macie, bo sprawdzam już z 4 kompa i z różnych przeglądarek i dalej mam tak samo wszystko widać ale kodu z tutoriali nie widać.

  8. Masz rację. Nierozważnie wczytałam sobie aktualizację wtyczki odpowiedzialnej na wyświetlanie kodu i oto efekt. Już poprawiam.

  9. Fajny tutek. Jest jeszcze jeden błąd. W widoku 3-ci listing 4-ta linijka:

    if(isset($position[‘active’]) and $position[‘active’]=1)

    brakuje jednego znaku ‘=’:

    if(isset($position[‘active’]) and $position[‘active’]==1){

  10. A ja mam taki błąd, i bardzo proszę o pomoc.

    Parse error: parse error in C:\wamp\www\kohana\application\models\content.php on line 10

    private function get_title($i_Active){
    private $a_Title = array(‘Home’, ‘Partners’, ‘Profiles’, ‘Career’, ‘Contact’);
    private function get_title($i_Active){
    return $this->a_Title[$i_Active];
    }
    }

    10 linujka to ta z tablicą.

  11. PRZEPRASZAM, całe szczęście głopota nie boli.

    DZIĘKI ZA TUTORIALE, piszę z kumplem prace dyplomową na temat kohany i napewno bardzo się przydadzą pozdrawaim.

  12. No bo dałeś deklarację zmiennej (i to jeszcze private) oraz funkcji wewnątrz funkcji :) Jesteś pewien, że tak właśnie sugerowałam? :) Takie deklaracje daje się w ciele klasy a nie w ciele funkcji.

    W którymś z wcześniejszych wpisów dawałam linki do stron z których można się conico dowiedzieć o programowaniu obiektowym w PHP5.

    Zajrzyj tam :)

  13. To raczej nie w moim stylu. Mam belferskie nawyki i oczekuję odrobiny wysiłku intelektualnego i samodzielności od ludzi do których się zwracam :)

  14. Postępowałem zgodnie z tutorialem, jednak dostaję komunikat:

    The requested page was not found. It may have moved, been deleted, or archived.

    C:/wamp/kohana/system/core/Kohana.php [841]:

    The page you requested, home, could not be found.

    i nie mogę dojść co jest tego przyczyną

    Prosty kontroler article z manuala kohany działa

  15. Witam!
    Jest to 3 tutorial dotyczący Kohany, który przerobiłem. Pierwsze 2 to: “Kohana101” oraz “Kohana: The Swift PHP Framework” (http://net.tutsplus.com/tutorials/php/kohana-the-swift-php-framework/). Podchodziłem do niego trzykrotnie, ponieważ nie mogłem (i nadal nie mogę) przetrawić nazewnictwa zmiennych w nim zawartych ($i_…, $a_…, $s_…); nie spodobało mi się również to, że kopiowanie kodu jest tak uciążliwe (kopiuje się tekst razem z numeracją); w Views wolałbym template.php zamiast t_home.php; brak css.
    Piszę to ponieważ myślę, że takie małe rzeczy mogą zniechęcić początkującego programistę Kohany (jak mnie). Oczywiście popieram koncepcję włożenia własnego wysiłku w naukę, więc postanowiłem zacisnąć zęby i przerobić tutoriala mimo wszystko. Podoba mi się to, że ten tutorial w ogóle jest, bo naprawdę jest to ciekawy framework PHP, a kursów w sieci jest tyle co kot napłakał.
    Pozdrawiam autorkę i życzę sukcesów! :)

  16. Jeśli chodzi o nazwy zmiennych, które Ci się nie podobają to trudno. Taki mam styl, tak mi wygodniej i tego nie będę zmieniać.

    Kopiowanie kodu jest uciążliwe, ale to przypadłość większości wtyczek do kolorowania kodu, które mają możliwość numerowania linii. Ja też nie do końca jestem zachwycona tą, która jest tu, ale na razie walczyć z tym nie będę.

    CSSów nie będę publikować, chyba że będę pisać artykuł o stylach.

    Z twojego ponaglającego tonu drugiego wpisu, który pozwoliłam sobie odrzucić i z tego co tu napisałeś wnioskuję, że jesteś w gorącej wodzie kąpany. To niedobrze, bo w programowaniu cierpliwość to jedna z ważniejszych cnót.

  17. Ze jest pomotane to nawet ja zdazylem zauwazyc ;) .Moge przysiadz, ze kodu nie ruszlem tylko skopiowalem jak leci – moze cos w konfiguracji? Strona jest postawiona na subdomenie i foldery sa w kohana2/

  18. Wygląda więc na to, że mota się gdzieś w metodzie html::anchor

    Może coś w plikach konfiguracyjnych?

    Z której wersji kohana korzystasz?

  19. Nie moge znalezc versji w mojej instalacja ale sadze, ze jest to wersja ostatnia – instalwoalem ja ok. 2 tygodni temu. Z welkome i examples dziala ok.

  20. Nie korzystalem – ale jak wlaczylem to i tak bylo bez zmian. Wersja kohany – wyglada na to, ze to jest 2.3.4.
    Mialas tracje wariuje anchor – moze jakis bug. Problem rozwiazalem podajac cala sciezke dostepu zamiast ‘home’.
    Dzieki za pomoc ;)

  21. Witam serdecznie.
    Postanowiłem również, skorzystać z tego tutka i na początku kiedy wszystko wbiłem krok po kroku tj zostało to tutaj pokazane, wydawało mi się, że wszystko jest jasne i nawet nie jest to takie trudne. Teraz jednak, gdy chciałem trochę rozbudować ten kod, mam pewne wątpliwości. Chciałbym więc się zapytać – poradzić – jaki byłby najlepszy sposób w tym przypadku na wprowadzenie treści zależnej od danego działu. Czyli, nie tak jest to teraz, że za każdym razem jest wczytywana zawartość zmiennej “$s_SectionText”.

    Jak najlepiej wczytywać jakąś zawartość z tekstem. Nie wiem, np z pliku XML, czy może nawet z bazy danych a najlepiej na początek ze zwykłej zmiennej. Czy również, stworzyć tablicę z zawartością uzależnioną od nazwy sekcji czy może dodać kolejny element do istniejącej już tablicy $a_MainMenu, gdzie oprócz nazwy i linka do strony była by również jej zawartość? Wiem, że możliwości może być wiele, ale jak najefektywniej wykorzystać możliwości tego frameworka przy użyciu tego przykładu?
    Pozdrawiam
    Maciej.

  22. Witam, stwierdziłem że też się wypowiem. Artykuł napisany w prosty sposób. Jednak MENU bym pominął trochę gmatwania. W każdym bądź razie napisałem swój kontroler, model, widok ze zmienną i działają wszystkie strony a jest ich sporo. Kodu PHP strasznie mało. Obsługa bazy danych wbudowana (wypowiadam się o Kohana 3) właściwie 4 linijki kodu łącznie z zapytaniem. Kohana to fajna sprawa, ale dokumentacji praktycznie nie ma, tzn. jest znikoma.
    Dziękuję, że chciało Ci się napisać kiedyś ten artykuł, bo mi pomógł.
    Pozdrawiam

  23. Do tej pory raczej byłam zaawansowaną userką wordpressa, jednak to co nieco ciężki cms (choć prosty-w zasadzie trzeba tylko templejta swojego stworzyć + jakis plugin odpowiedni dla zamawiającego i gotowe). Tu (oczywiście to zupełnie inne podejście) na pierwszy rzut oka nie mam pojęcia co począć. Dziękuję za tutoriala.

  24. Witam
    Mam problem z tą linijką:

    Wyskakuje mi: “Kohana_PHP_Exception [ Fatal Error ]: Call to undefined method html::specialchars() ”

    Jeżeli usunę html::specialchars i dam

    to wszystko działa poprawnie.
    Czym to może być spowodowane?

    Dziękuję i pozdrawiam!

  25. Może brakuje Ci biblioteki html (sprawdź w katalogu system/helpers) albo brakuje Ci tej funkcji w tym helperze.

    A w ogóle to z jakiej wersji Kohana korzystasz?

  26. Witam,
    mogłabyś napisać co trzeba zrobić aby uruchomić napisaną aplikację?
    Zrobiłem wszystko tak jak powyżej, ale niestety w dalszym ciągu wyświetla się strona z napisem hello,world!

    Czy nie trzeba czasem czegoś zmienić w pliku bootstrap.php ?

Leave a Reply

%d bloggers like this: