Kohany 0.1 – blog script on Kohana 3.2

I did make a simple blog script based on Kohana.

Kohany is a simple and clever web software you can use to create your own blog. I like to say that Kohany is both open source and free at the same time.

Version 0.1 includes among others:
- login
- registration
- user role
- support for multiple languages
- add posts, categories, comments, pages
- has the admin panel, where you can moderate entries, users and change the settings
Not all finished yet, but publish a script for testing.

Kohany version 0.1 is based on Kohana 3.2 framework.

Download:
Kohany 0.1 (1407)

In Polish:
Stworzyłem prosty skrypt blogu, który bazuje na Kohanie 3.2
Co do funkcjonalności to zawiera podstawowe jak:
rejestrację, logowanie, role użytkowników, obsługę wielu języków, posiada możliwość dodawania postów, kategorii postów, komentarzy, stron, a także panel administratora, w którym możemy moderować wpisy i zmieniać ustawienia. Skrypt zawiera graficzny edytor (WYSIWYG) NicEdit, dzięki któremu możemy łatwo dodawać wpisy, czy wysyłać zdjęcia na serwer.

Skrypt może zawierać jakieś niedociągnięcia. Jeśli jednak ktoś chciałby używać go jako produkcyjnego skryptu swojego blogu, to motywowałoby mnie to do dalszej pracy nad nim i funkcjonalnościami.

Na razie instalacja ręczna:
1. Wypakowujemy.
2. Zmieniamy prawa do /application/cache, /application/logs i /media/img/upload.
3. Wykorzystujemy plik kohany.sql do stworzenia bazy.
4. Zmieniamy dane do bazy w /application/config/database.php
5. Zmieniamy base url w .htaccess i w /application/bootstrap.php na właściwy podkatalog, lub na / jeśli strona jest bezpośrednio.
6. Logujemy się jako:
user: admin
password: admin

W skrypcie wykorzystana została wiedza z Drugie starcie – zebrana wiedza [KO3.2]

Z podstawowych funkcjonalności blogu, brakuje wysyłania maili i kanału RSS, ale to może przy następnej wersji..

75 Odpowiedzi :“Kohany 0.1 – blog script on Kohana 3.2”

  1. Dominik napisał:

    gratulacje, wspaniała robota.
    Oby takich artykułów było więcej

  2. Kristof napisał:

    Wielkie brawa dla autora tego bloga!!

    Gość sie zna na rzeczy i nie szczędzi czasu żeby szczegółowo wyjaśnić, pomóc potrzebującym i początkującym w Kohana.
    Pierwszy taki blog o kohana framework w języku polskim.
    Więc bez wahania daje plusika Google

    Dzięki Panie Mariuszu

  3. Rafał napisał:

    Świetna robota i jak dla mnie artykuł w idealnym czasie, właśnie tworze swój panel administracyjny

  4. tajger napisał:

    oj.. nie wiem o co mu chodzi? mam wampa, rewrite włączony, curl też, utworzyłem baze ‚kohany’ .. tam importuje SQL ten co dołączył Pan, bootstrap nie ruszam bo jest ok
    ‚base_url’ => ‚/kohany’

    Fatal error: Call to undefined function __() in C:\wamp\www\kohany\application\classes\kohana\exception.php on line 82

    tutaj zamieszczam obrazek:
    http://imageshack.us/photo/my-images/403/bladnj.jpg/

  5. Mariusz napisał:

    Funkcja __() służy do wyświetlania różnych języków. Może wamp nie może odnaleźć deklaracji tej funkcji.
    Plik /application/classes/kohana/exception.php w którym występuje u Ciebie błąd odpowiada za ładne strony błędów. Można to wyłączyć tak, aby wyświetlane były standardowe błędy Kohany (eliminując błąd), np. zmieniając nazwę pliku na _exception.php

  6. tajger napisał:

    widocznie nie ma sensu chyba na Wampie pracować, mam najnowszą wersję i nie wiem czemu tak mi się dzieje.. także jestem na XP..
    kolejne błedy wyrzucilo jak poprawilem na _ :

    http://imageshack.us/f/13/blad2s.jpg/

    • tajger napisał:

      może zmienić serwer np. na taki jaki ty Mariusz masz? działa komuś to na XP ?

      • Mariusz napisał:

        Ja pracuję na localhost na linuxie. Możesz zainstalować linuxa :D nie koniecznie natywnie, ale np. jako wirtualny komputer na xp (przy pomocy np. VirtualBox) – uruchomi się okienko a w nim linux, polecam openSUSE. Ewentualnie spróbuj na darmowym hostingu.

    • Mariusz napisał:

      Czy w pliku /application/config/database.php odwołania do bazy zmieniałeś?

  7. tajger napisał:

    problem rozwiązany… miałem nie istniejącego usera w bazie danych a wpisywałem innego w database.php, bo byłem pewien, że istnieje.. z przyzwyczajenia zawsze robię tego samego usera a teraz go miałem, bo ostatnio sobie go usunąłem .. człowiek czego jest pewien na 100% nie jest tego pewien.. heh :)

  8. tajger napisał:

    co robią 3 pliki .js ? sprawdzają poprawności znaków czy może coś bardziej szczególnego?

    • Mariusz napisał:

      Nicedit odpowiada za graficzny edytor, jquery to taki framework js, a lightbox to plugin do tej biblioteki dzięki któremu linki-obrazki otwierają się w takiej galerii (należy dodać klasę lightbox do elementu np. div, który zawiera linki do obrazków w znaczniku a).

  9. Grego napisał:

    Cześć, z ciekawości zajrzałem do tego bloga zobaczyć jak rozwiązałeś niektóre problemy :) Mam pytanie odnośnie seo-url podstron. Gdzie jest przetwarzany route? W bootstrapie czy może jeszcze gdzieś indziej.
    Pozdrawiam.

    • Mariusz napisał:

      Do stron statycznych to w index.php, natomiast linki do wpisów na innych stronach (np. na głównej) zawierają tytuł jako drugi (opcjonalny) parametr, żeby wyeliminować pl znaki i spacje jest otoczony jest on URL::title()
      /post/details/1/przykladowy-tytul

    • Mariusz napisał:

      W przypadku, gdy w tytule znajdują się pl znaki to:

      URL::title($post->title,'-',TRUE)
      
  10. yaca89 napisał:

    Na początku powiem że świetna robota, ale nie rozumiem czemu nie masz żadnych relacji w bazie(poza tymi standardowymi z auth)

    • Mariusz napisał:

      Powiązania robiłem w modelach. Oczywiście można porobić relacje w bazie, ja jakoś rzadko kiedy korzystam z tego.

  11. tajger napisał:

    Mariusz nie działa mi rejestracja userów. Chodzi o to, że do bazy danych zostają dodani ale kod weryfikacyjny na email nie dochodzi czy potwierdzenie rejstracji aby potem na mailu aktywować założone konto. Robie to na localhoście.

    • Mariusz napisał:

      Ponieważ, w obecnej wersji nie ma wysyłania maili. Należałoby dorobić weryfikację poprzez e-mail i wysyłanie. Po zarejestrowaniu użytkownik od razu może się logować.

  12. krzycho napisał:

    Mogę prosić o wyjaśnienie tej linijki:
    $edit=isset($edit) ? $edit : FALSE;
    Pochodzi z Model_Post

    • Mariusz napisał:

      Funkcja save_data() tego modelu jest wykorzystywana do dodawania nowych i edytowania istniejących wpisów. przyjmuje ona 2 parametry: pierwszy to dane z posta, drugi informuje, że mamy do czynienia z edycją.
      Ta linijka to skrócony zapis if:

      if(isset($edit))
      $edit=$edit;
      else
      $edit=NULL;
      

      Zmienna edit jest jedynie do informacji czy dodajemy czy edytujemy.
      Później jest wykonywane sprawdzanie jaką ma wartość: czy edytujemy (aktualizujemy datę edycji i id edytującego) czy z dodawaniem (dodajemy datę dodania).

  13. Nie przeglądałem dokładnie, ale gratuluję ambitnej roboty. Trochę mi się nie podoba, że uczysz wiele osób swojego stylu pisania, który mi średnio pasuje, ale sam skupiam się raczej na rozwijaniu gotowych rozwiązań niż uczeniu nowicjuszy, więc jestem sobie winien ;)

    Taka drobna uwaga: wsparcia dla ‚wielu wersji językowych’ nie ma, jest tylko wsparcie dla wielu tłumaczeń interfejsu strony. Ani posty, ani komentarze, ani nawet podstrony nie mają jeszcze nic zaimplementowane. Czekam na wersję 0.2, żeby się poprzyczepiać, w międzyczasie polecam wrzucić projekt na githuba i dłubać na bieżąco ;)

    • Mariusz napisał:

      Cały czas odkrywam tajniki programowania i samej Kohany. Zapewne ilu programistów tyle różnych kodów. Większość rzeczy uczyłem się samemu z dokumentacji (nie zawsze wszystko było dobrze opisane). Sugestie (szczególnie negatywne) mile widziane, ponieważ pozwalają spojrzeć na problemy z innej strony, na których optymalne rozwiązanie samemu czasem ciężko trafić.
      Masz rację z tłumaczeniami. Jak znajdę trochę wolnego czasu, to wersja 0.2 (również na githubie) na pewno się pojawi. ;)

  14. Rafał napisał:

    Witam,

    W ustawieniach serwisu można edytować każdy element osobno a czy zastanawiałeś się nad możliwością edycji wszystkich elementów jednocześnie jako całości pod postacią inputów? Próbowałem zaimplementować takie rozwiązanie ale z jednej strony wydaje mi się, że musiałbym zrezygnować z ORM a z drugiej żeby móc korzystać z ORM’a musiałbym zamienić wiersze na kolumny

    Pozdrawiam,
    Rafał

    • Mariusz napisał:

      Nie myślałem nad tym, ale może pobrać ORM’em albo DB i w pętli foreach wyświetlić wszystkie w inputach (input name = name z bazy, input value = value z bazy). Po wysłaniu formularza, dać DB UPDATE dla każdej wartości z _POST (oprócz submit).

  15. Ciekawi mnie rozwiązanie kategorii w pasku bocznym, strony. Rozwiązane jest to w domyślnym kontrolerze. Wydaje mi się nie do końca to być optymalne, czy jest możlwiość, aby np. includować tam jakiś controller, który zajmie się wyświetlaniem kategorii? Albo jak rozwiązują to programiści Kohana?

  16. tak jeśli są tylko kategorię, a jeśli np. na stronie głównej mam w tym miejscu ostatnie komentarze, a już na stronie z wpisem w tym samym miejscu zamiast Last COmments mam komentarze do tego wpisu, to już zaczyna to być nie opytmalne.

    Pomysł miałem taki aby w controllers, utworzyć folder widgets, w nim defalutowy, który nie ładował by głównego szablonu a jednocześnie ustalał dla jakiego Controllera Głównównego, jakie controllery widzetów ma ładować i w jakiej kolejności.

    W głównym kontrolerze chciałbym

    $this->templates->col_left
    $this->templates->user1
    

    aby po wstawieniu w szablon

    echo $col_left;
    

    wyświetlało wszystkie controllery z folderu widgets.

    Czy mógłbyś podzielić się jakaś lekturą jak coś tego typu osiągnąć?

    • Mariusz napisał:

      Ja bym to zrobił tak, że w widoku dał:

      if(isset($left_comments)) echo $left_comments
      

      A w kontrolerach w zależności od akcji (zależy czy w ogóle mają być wyświetlane, czy wyświetlane ze wszystkich, czy tylko z danego wpisu) wczytywał widok dla komentarzy, a do niego przesyłał zmienną z komentarzami i wyświetlał w pętli.

      Nie spotkałem się z taką lekturą, ale jeśli czegoś nie mam to próbuję szukać w google np. kohana 3.2 menu, często są już gotowe rozwiązania.

  17. Próbowałem w głównym kontrolerze, coś takiego, ponieważ chce, żeby te menu obsługiwał controller i do tego było normalnie widok, chce jak najbardziej wykorzystać MVC,

    $this->template->col_left = new Controller_Widget_Comment();
    

    Jednak nie zadziałało jak myślałem, oczywiście automatycznie dołączyła Kohana co trzeba, jednak wywoływanie przyniosło już błędy zrobiłem również akcje w Comment statyczną i wywołałem ją:

    $this->template->col_left = Controller_Widget_Comment::action_index();
    

    Tym razem również pełno błędów, Klasa Controller_Wdget_Comment dziedziczyła z Controller.

    Czy idąc tym tropem do czegoś dojdę? Chce prostu jakby programowam strukturalnie, zrobić include jakiegoś pliku, który np odpowiada, za wyświetlanie lewej kolumny.

    • Mariusz napisał:

      Sypie błędami ponieważ próbujesz do widoku (szablonu) wysłać kontroler. Możesz wysłać np. podwidok:

      $this->template->col_left =View::factory('menu');
      

      A do tego menu zmienne:

      $this->template->col_left->categories=$categories;
      $this->template->col_left->coments=$coments;
      

      Możesz też stworzyć osobną klasę w /application/classes/ np. menu.php

      <?php defined('SYSPATH') or die('No direct access allowed.');
      class Menu {
          public static function show($array){
              //return
          }
      }
      

      i potem w kontrolerze albo w widoku odwoływać się jak do helperów (wywołać metodę tej klasy):

      echo Menu::show($categories);
      
  18. Prawie osiągnąłem to co chciałem :)
    Dzięki twoim wskazówkom. Jednak pojawił się problem. Wrzucę może swoją klasę.

    <?php defined('SYSPATH') or die('No direct access allowed.');
    class Widget {
    	
    	private static $fields;
    	
    	public static function factory($array){
    		self::$fields = array(
    			'tags'=> self::tags(),
    			'comments' => self::comments($array['comments']),
    		);
    		$count = count($array);
    		$col = array();
    		foreach($array as $arrays=>$wartosc){
    			array_push($col, self::$fields[$array[$arrays][0]]);
    			
    		}		
    		return $col;
    	}
    	
        public function __get($field)
        {
      		self::$fields[$field];
    	}
    	
    
        public static function comments($array){
        	$count=ORM::factory('blog')
    			->limit($array[0])
    			->where('public', '=', 1);
            $a = View::factory('home')
    					->bind('c', $count);
    		return $a;	
        }
    	
    	public static function tags(){
    		return  View::factory('home');
    	}
    }
    

    Problem jest taki, że widok się ładuje jednak, gdy próbuje przesłać zmienną bindem pojawia się błąd, ponieważ w widoku, gdy wpiszę

     <?php echo $c; ?>
    

    Wywala błąd

     Undefined variable: c 

    Dorzucam screencasta obrazującego problem http://youtu.be/iGcpyKka8SA

    • Mariusz napisał:

      Jakoś nie mogę się odnaleźć w Twoim kodzie. Wydaje mi się że to strasznie komplikujesz. Napisz dokładnie jaki chcesz osiągnąć efekt i jak to ma działać. Co chcesz osiągnąć wrzucając to do kontrolera?

      Ja przy debugowaniu zmiennych często korzystam z

      echo Debug::vars($var);
      

      Można sprawdzać co siedzi pod zmienną (np. $var, _post, $obiekt).

  19. Tak więc, byłem jakiś czas temu zauroczony Joomla tam jest tak, że dla każdej podstrony z panelu admina mogę sobie ustawić jakie joomlowe modułu są wyświetlana na poszególnych zakładkach.

    Tak chciałem mieć również kontrolę nad tym w mojej aplikacji w KOHANA.

    Tak więc np. definiuję sobie w głównym controlerze kilka zmiennych przesłanych do templatki np.

    $this->template->col_right = Widget::factory(array(
    						'comments' => array('comments', 10), //Załączy Panel Komentarzy i dodatkowy paramter 10, który oznacza ilość wyciągniętych rekordów
    						'tags' => array('tags', 10),
    					));
    $this->template->field_bottom = Widget::footer(); 
    

    Tak napisana klasa jak ją napisałem, pozwalała mi na wyświetlanie kilku metod, odpowiadających np. za wyśwetlanie komentarzy i tagów za pomoca metody factory do argumentów daje tablice wielowmiarową, gdzie pierwszy „wymiar” jest asocjacyjny abym mógł przekazać np. dodtkowy argument potem do metody.

    Niżej wywołanie Widget::footer() wywołuje tylko jedną metodę której zadaniem jest wyśwetlanie stopki.

    Całe zamieszanie z tablicami w metodzie factory jest związane właśnie z przekazywaniem tego argumentu.

    w defalutowym widoku po wpisaniu do diva który jest np. kolumną prawą

    <?php foreach($col_right as $right){ echo $right; } ?>
    

    wyświetla mi zdefiniowane w głównym kontrolerze commentarze i tagi

    Jednak, gdy uruchomiona będzie akcja „show” w controllerze „blog”.Akcja ta odpowiedzialna za wyświetlanie całego wpisu.
    Chce aby w kolumnie lewej znajdował się widget wyśweitlajcy kilka komentarzy tylko i wyłącznie wpisu i formularz do pisania tych formularzy a poniżej panel z informacją na temat autora wpisu miedzy innymi powiązanie z jego innymi wpisami, statystykami ile już napisał itd. dlatego teraz stworzyłbym nową metodę obsługującą ten widget, dopisał do tablicy w metodzie factory. A metoda comments zrobiona by była tak, że jeśli ma dodatkowy argument to argument ten jest id wpisu, a jeśli nie to pokazuje ostanich kilka komentarzy wszystkich wpisów. Teraz mam nad tym władze ponieważ aby zmienić te panele w akcji „action_show()” wpisuje

    $this->template->col_right = Widget::factory(array(
    						'comments' => array('comments', 10), //Załączy Panel Komentarzy i dodatkowy paramter 10, który oznacza id wpisu
    						'tags' => array('user_panel_info', 99),// 99 oznacza identyfikator użytkownika który jest autorem
    					));
    

    Mam nadzieje, że w miarę jasno napisałem zważywszy na godzinę :)

    • Mariusz napisał:
      $count=ORM::factory('blog')
          ->limit($array[0])
          ->where('public', '=', 1);
      

      Ta zmienna count co ma przechowywać? Obiekt czy zlicza ile jest wyników. No i na końcu find_all()chyba powinno być.

  20. Tak tak mam poprawione już. Poprostu skopiowałem gotwe zapytanie z controller Blog dla testów. Jest tam oczywiście ->find_all(). :)

    Już znalazłem błąd, przecież w metodzie tags wpisałem ten sam widok a nie przekazałem w niej zmiennej $c. Tyle zamieszania o tu o czystą głupotę błąd.

  21. Może pytanie trochę z innej beczki, jak uważasz jeśli chcę w bazie przechowywać miedzy innymi dodatkowo imię i nazwisko user’a oraz jego avatar, to lepiej zrobić, dodatkową tabele i powiązanie pod ID, czy dodać do istniejącej tabeli users, zaznaczam,że używam auth ?

    Drugie pytanie, żeby co jest bardziej optymalne i szybsze?

    $result = DB::query(1, 'SELECT comments.id, comments.date, text, username, title FROM comments INNER JOIN users ON comments.user_id = users.id INNER JOIN blogs ON blogs.id = comments.blog_id ORDER BY date DESC')->as_object()->execute();
    

    czy z ORM

    $results = ORM::factory('comment')
        			 ->join('users', 'INNER')
         			 ->join('blogs', 'INNER')
    				 ->find_all();
    

    jednak nie potrafię użyć do końca ORM aby wszystko grało, w sumie bawię się Kohna na serio dopiero 4 dzień :)

    • Mariusz napisał:

      Myślę, że to w jednej tabeli można, bo każdemu odpowiadałby i tak jeden rekord. Chyba że chciałbyś to wrzucić jako pola dodatkowe (id|user_id|field_id|value), a w innej jeszcze tab. przechowywać dostępne pola jakie użytkownik może wybrać.

      Db jest szybsze od ORM. Złączania też są wolne. Ja często korzystam z podzapytań do selectów gdzie muszę pobrać coś z innej tablei:

      $result=DB::query(1, 'SELECT *, (SELECT `username` FROM `users` WHERE `users`.`id`=`comments`.`user_id`) as `username` FROM `comments` WHERE `status`=1')->as_object()->execute();
      

      Tylko podzapytanie może zwrócić jedną kolumnę i nie może mieć wiele wierszy, więc trzeba do avatara drugie podzapytanie, ale moim zdaniem i tak jest to optymalniejsze niż złączenia.

  22. faster napisał:

    W jaki szybki i przyjazny (dla kohany) sposob wykonać aktywacje userów przez e-mail ?

    • Mariusz napisał:

      Przykład
      1. Przy rejestracji zapisujemy dodatkowo hash:

      $user = ORM::factory('user');
      $user->email = $_POST['email'];
      $user->username = $_POST['username'];
      $user->password = $_POST['password'];
      $id = $user->save();
      $hash = $user->hash = md5($_POST['username'].$id.'tajny_ciag');
      $user->save();
      

      2. Wysyłamy maila userwowi z linkiem example.com/register/confirm/$username/$hash
      3. Jeśli user kliknie wykona się akcja confirm kontrolera register, a w niej sprawdzenie czy user nie ma już roli login, sprawdzenie hasha i dodanie roli login.

      public function action_register()
      {
        $username = $this->request->param('id');
        $hash = $this->request->param('id2');
        $user = ORM::factory('user')->where('username', '=', $username)->find();
        if (count($user))
        {
          if ($hash == md5($username.$user->id.'tajny_ciag'))
          {
            $checkrole = DB::query(1, 'SELECT count(*) as `already_exists` FROM `roles_users` WHERE `role_id`=1 AND `user_id`="'.$user->id.'"')->execute()->current();
            if ($checkrole['already_exists'])
            {
              //juz aktywowano
            }
            else
            {
              //dodanie roli
              $role = ORM::factory('role','1'); //login role
              $user->add('roles',$role);
              $user->save();
            }
          }
          else
          {
            //zly hash
          }
        }
      }
      
      • faster napisał:

        Bardzo dziękuje za odpowiedź, spodziewałem się jakiejś wskazówki, a otrzymałem przykład gotowego rozwiązania ;)

        Dziękuję

        PS świetny blog ;)

  23. Nieźle, całkiem dobry system ;)

  24. Kamil napisał:

    Świetna robota tylko mam jeden problem. Otóż zauważyłem że tabel ‚posts’ ma pole ‚image’. Uznałem to za pole dla url jakiegoś obrazka do postu. Dodałem do szablonu ‚dodaj wpis’ pole input

    <?php echo Form::label('image', __('Image').': ').Form::input('image', Arr::get($data, 'image'))?>

    a do modelu oczywiście walidację

    ->rules('image','url')

    … no i właściwie już na tym etapie wszystko się rozkraczyło => Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) nie mam bardzo pomysły co z tym zrobić. Pomożesz?? Wcześniej miałem taki problem miałem ze zmianą hasła ale sam (?) się naprawił. Czy to wina ORM??

    • Mariusz napisał:

      Jeśli dajesz pojedynczą regułę to daj bez s:

      ->rule('image', 'url')
      

      Dla rules powinno być:

      ->rules('image', array(array('url') ))
      

      Ogólnie to dobrym rozwiązaniem jest walidacja ORM. Jeśli będzie następna wersja, to będzie tak jak się to powinno robić.

  25. Michał napisał:

    Świetny blog/kurs kohany ;) Uczę się kohany od 4 dni i mam problem.
    Chciałbym zrobić katalog sklepów. Sklepy mógłby dodawać tylko administrator. Siedzę już nad tym kilka godzin ale jakoś nie umiem tego opanować ;(
    Utwożyłem tabelkę „shops” z id, opis, nazwa, www, logo (na podstawie tabelki users).
    Wszystkie pliki „user” skopiowałem i pozmieniałem parametry na „shop”.
    Teraz mam błąd: Błąd: Class ‚Model_Auth_Shop’ not found

    Błąd: …\httpd\Kohana-test\sklepy\application\classes\model\shop.php [3]

    Jeśli będzie to możliwe proszę o pomoc. Z góry dziękuję

    • Mariusz napisał:

      Model Shop nie powinien rozszerzać modelu Model_Auth_Shop (takiego zapewne nie ma), tylko ORM. Model Auth User jest do logowania. Spróbuj zmienić w application\classes\model\shop.php na:

      class Model_Shop extends ORM {
      
  26. Michał napisał:

    Dzięki, pomogło ;)

  27. Bartek napisał:

    mama male pytanie:]

    $this->options=Kohana::$config->load('options');
    

    co robi ten kawalek kodu.?
    a przy okazji chcialem podziekowac za pomoc przy zrozumieniu mojego pierwszego frameworka

    • Mariusz napisał:

      Do zmiennej $this->options przypisuje config (który zwraca tablicę array) o nazwie options (application/config/options.php).

      Kohana::$config->load()
      

      To nic innego jak wczytanie konfigu.

  28. Bartek napisał:

    jaki routing wybierze ta sciezka?

    <?php foreach ($pages as $page){?>
    <li><?php echo HTML::anchor(URL::title($page['title']),$page['title'])?></li><?php
    }?>
    
    • Mariusz napisał:

      Czy po kliknięciu w link, strona się wyświetla? Jeśli nie, to zapewne nie ma routingu do tego, albo link powinien inaczej wyglądać.

  29. Bartek napisał:

    niestey blog nie dziala na moim kompie bo podstrony przekierwouja mnie do panelu xamppa. analiujac kod nie rozumialem do kotrego routingu pasuje. ale mam jeszcze jedno pytanie. czy umieszczajac operacja na bazie dancyh w kontrolerze nie lamiesz zasady mvc?

    • Mariusz napisał:

      Najlepiej byłoby odpalić np. na wirtualnym linuxie i samemu wszystko potestować, gdyż chwilę do skryptu nie zaglądałem… Jest to też wersja 0.1 więc może zawierać pewne niedociągnięcia, ale powinna rozjaśnić to i owo. Co do operacji na bazie to wydaje mi się, że są w modelach. Zapytania select wg mnie mogą być w kontrolerze. Wcześniej (w tym skrypcie również) nie korzystałem z Walidacja ORM [KO3.2], a to jest fajne i powinno się tego używać :)

Dodaj komentarz

Dodając kod PHP używaj tagów: [php][/php]

*