Implementacja szablonu do Kohany

Załóżmy, że mamy już gotowy szablon strony (index.html, css i images) i chcielibyśmy go wdrożyć do Kohany, tak aby to framework obsługiwał szablon. Ja taki gotowy szablon pobrałem z internetu. Ktoś może zrobić własny albo wystarczy wpisać free css templates w wyszukiwarkę i znaleźć taki, który nam odpowiada.
Żeby można było poćwiczyć na tym samym zamieszczam go tutaj: Templatemo 121 simple gray (711)

Krótki opis: W tym szablonie nie ma nic poza index.html, stylami i folderem z obrazkami. Przecież to szablon i tak ma być. Spróbujemy skorzystać z kontrolera default, stworzonego w Pierwsze starcie i umieścić w odpowiednich plikach i katalogach.

Kontroler default: /application/classes/controller/default.php

<?php defined('SYSPATH') or die('No direct script access.');
 
class Controller_Default extends Controller_Template {
 
    public $template = 'default';
 
    public function  __construct(Request $request, Response $response) {
        parent::__construct($request, $response);
    }
 
    public function before() {
      parent::before();
 
        if ($this->auto_render)
        {
            // Initialize empty values
            $this->template->title = '';
            $this->template->description = '';
            $this->template->content = '';
 
            $this->template->styles = array();
            $this->template->scripts = array();
            $this->template->top_tab = '';
        }
    }
 
    public function after() {
        if ($this->auto_render)
        {
                $styles = array(
                        'media/css/style.css' => 'screen',
                );
 
                $scripts = array(
                        'media/js/jquery-1.5.1.min.js',
                );
 
                $this->template->styles = array_merge( $this->template->styles, $styles );
                $this->template->scripts = array_merge( $this->template->scripts, $scripts );
        }
        parent::after();
    }
 
    public function action_index() {
        $this->template->title = __('Home');
        $this->template->content='home';
        $this->template->top_tab='home';
    }
}
?>

Tworzymy widok default i kopiujemy do niego całą zawartość szablonu – index. html

Widok default: /application/views/default.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple Gray, Professional free website template</title>
<meta name="keywords" content="free templates, website templates, CSS, XHTML" />
<meta name="description" content="Simple Gray - Professional free XHTML/CSS template provided by templatemo.com" />
<link href="templatemo_style.css" rel="stylesheet" type="text/css" />
<script language="javascript" type="text/javascript">
function clearText(field)
{
    if (field.defaultValue == field.value) field.value = '';
    else if (field.value == '') field.value = field.defaultValue;
}
</script>
</head>
<body>
<div id="templatemo_header_wrapper">
<!--  Free Web Templates by TemplateMo.com  -->
  <div id="templatemo_header">
    
   	<div id="site_logo"></div>
        
		<div id="templatemo_menu">
      		<div id="templatemo_menu_left"></div>
            <ul>
                  <li><a href="#" class="current">Home</a></li>
                  <li><a href="http://www.templatemo.com">Services</a></li>
                  <li><a href="http://www.templatemo.com/page/2">Gallery</a></li>
                  <li><a href="#">Company</a></li>
                  <li><a href="#" class="last">Contact</a></li>
            </ul>    	
		</div> <!-- end of menu -->
    
    </div>  <!-- end of header -->
</div> <!-- end of header wrapper -->

<div id="templatemo_banner_wrapper">
	<div id="templatemo_banner">
    
    	<div id="templatemo_banner_image">
        	<div id="templatemo_banner_image_wrapper">
            	<img src="images/templatemo_image_01.jpg" alt="image 1" />
            </div>
        </div>
        
        <div id="templatemo_banner_content">
        	<div class="header_01">Lorem ipsum dolor sit amet, consectetur adipiscing elit. </div>
            <p>Aliquam dignissim elementum est sit amet iaculis. Integer pretium ultricies risus, condimentum molestie odio euismod vitae. </p>
            <div class="button_01"><a href="#">Read more</a></div>
        </div>	
    
    	<div class="cleaner"></div>
    </div> <!-- end of banner -->
</div> <!-- end of banner wrapper -->

<div id="templatemo_content_wrapper">
	<div id="templatemo_content">
    
    	<div id="column_w530">
        	
            <div class="header_02">Welcome to our WEBSITE!</div>
            
            <p class="em_text">Simple Gray is a professional XHTML/CSS layout provided by <a href="http://www.templatemo.com" target="_parent">templatemo.com</a> for free of charge. You can use this template for any purpose. Credit goes to <a href="http://www.photovaco.com" target="_blank">Free Photos</a> for photos.</p>
            
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor. Duis in tincidunt lorem. Nunc et tellus nisi. Nulla non velit lectus. Morbi luctus ullamcorper felis, non gravida neque congue sit amet.</p>
            
            <div class="margin_bottom_20"></div>
            
            <ul class="content_list_01">
                <li>Integer tempor, libero quis laoreet dapibus, quam mauris hendrerit  urna, vel feugiat dolor lectus non velit. Fusce at nisl libero, ac  fringilla risus.</li>
                <li>Proin non velit nec enim volutpat euismod. Phasellus lorem velit, porttitor non iaculis in, euismod a metus. Nullam orci odio, dignissim a egestas ac, sollicitudin in quam.</li>
            </ul>
            
            <div class="margin_bottom_20"></div>           
            
            <div class="content_section_01">
            	Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor. Duis in tincidunt lorem. Nunc et tellus nisi. Nulla non velit lectus. Morbi luctus ullamcorper felis, non gravida neque congue sit amet. Nam nec mi metus, ac elementum velit. Etiam vel arcu velit, eget consequat risus. 
            </div>
            
            <div class="cleaner"></div>
        </div>
        
        <div id="column_w300">
        
        	<div class="header_03">Latest News</div>
            
            <div class="column_w300_section_01">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_02.jpg" alt="image" />
                </div>
                
                <div class="news_content">
                	<div class="news_date">OCT 29, 2048</div>
                    <div class="header_04"><a href="#">Lorem ipsum dolor sit</a></div>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor.</p>
				</div>
                                
                <div class="cleaner"></div>
            </div>
            
            <div class="column_w300_section_01 even_color">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_03.jpg" alt="image" />
                </div>
                
                <div class="news_content">
                	<div class="news_date">OCT 28, 2048</div>
                    <div class="header_04"><a href="#">Nam dictum pellentesque</a></div>
                    <p>Nam ultricies cursus enim, non aliquet orci lacinia ac. Etiam lobortis adipiscing.</p>
				</div>
                                
                <div class="cleaner"></div>
            </div>
            
            <div class="column_w300_section_01">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_04.jpg" alt="image" />
                </div>
                
                <div class="news_content">
                	<div class="news_date">OCT 27, 2048</div>
                    <div class="header_04"><a href="#">Donec faucibus tortor</a></div>
                    <p>Aliquam porttitor nibh in erat porttitor in accumsan dui pulvinar.</p>
				</div>
                                
                <div class="cleaner"></div>
            </div>
            
            <div class="cleaner"></div>
        </div>
    
    	<div class="cleaner"></div>
    </div> <!-- end of content wrapper -->
</div> <!-- end of content wrapper -->

<div id="templatemo_footer_wrapper">

	<div id="templatemo_footer">
    	
        <div class="section_w180">
        	<div class="header_05">Services</div>
            <div class="section_w180_content"> 
            	<ul class="footer_menu_list">
                    <li><a href="#">Lorem ipsum dolor</a></li>
                    <li><a href="#">Cum sociis</a></li>
                    <li><a href="#">Donec quam</a></li>
                    <li><a href="#">Nulla consequat</a></li>
                    <li><a href="#">In enim justo</a></li>              
                </ul>
			</div>
        </div>
        
        <div class="section_w180">
        	<div class="header_05">About</div>
            <div class="section_w180_content">
                <ul class="footer_menu_list">
                    <li><a href="#">Nullam quis</a></li>
                    <li><a href="#">Sed consequat</a></li>
                    <li><a href="#">Cras dapibus</a></li> 
                    <li><a href="#">Lorem ipsum dolor</a></li>
                    <li><a href="#">Cum sociis</a></li>                
                </ul>
            </div>
        </div>
                
        <div class="section_w180">
        	<div class="header_05">Cool links</div>
            <div class="section_w180_content"> 
                <ul class="footer_menu_list">
                    <li><a href="#">Aenean vulputate</a></li>
                    <li><a href="#">Etiam ultricies</a></li>
                    <li><a href="#">Nullam quis</a></li>
                    <li><a href="#">Sed consequat</a></li>
                    <li><a href="#">Cras dapibus</a></li>             
                </ul>
			</div>
        </div>
        
        <div class="section_w180">
	        <div class="header_05">Contact</div>
            
            <div class="section_w180_content">
            
                <ul class="footer_menu_list">
                    <li><a href="#">Donec quam</a></li>
                    <li><a href="#">Nulla consequat</a></li>
                    <li><a href="#">In enim justo</a></li>    
                    <li><a href="#">Aenean vulputate</a></li>
                    <li><a href="#">Etiam ultricies</a></li>           
                </ul>
			</div>
        </div>
        
        <div class="section_w180">
			<div class="header_05">Partners</div>  
            <div class="section_w180_content">      
                <ul class="footer_menu_list">
                    <li><a href="http://www.templatemo.com" target="_parent">CSS Templates</a></li>
                    <li><a href="http://www.flashmo.com" target="_parent">Flash Websites</a></li>
                    <li><a href="http://www.templatemo.com/page/2" target="_parent">Website Templates</a></li>
                    <li><a href="http://www.webdesignmo.com" target="_parent">Web Design Tips</a></li>
                    <li><a href="http://www.photovaco.com" target="_blank">Free Stock Photos</a></li>
                </ul>
			</div>
        </div>
        
        <div class="margin_bottom_20"></div>
        Copyright © 2048 <a href="#">Your Company Name</a> | <a href="http://www.iwebsitetemplate.com" target="_parent">Website Templates</a> by <a href="http://www.templatemo.com" target="_parent">Free CSS Templates</a>
        <div class="cleaner"></div>
    </div> <!-- end of footer -->
    <!--  Free CSS Templates by TemplateMo.com  -->
</div> <!-- end of footer -->
</body>
</html>

Zawartość diva o id templatemo_content wycinamy, bez ostatniego diva:

<div class="cleaner"></div>

Wklejamy ją do nowego widoku home, a w to miejsce w widoku default wklejamy kod:

<?php include Kohana::find_file('views', $content);?>

Widok home: /application/views/home.php

    	<div id="column_w530">

            <div class="header_02">Welcome to our WEBSITE!</div>

            <p class="em_text">Simple Gray is a professional XHTML/CSS layout provided by <a href="http://www.templatemo.com" target="_parent">templatemo.com</a> for free of charge. You can use this template for any purpose. Credit goes to <a href="http://www.photovaco.com" target="_blank">Free Photos</a> for photos.</p>

            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor. Duis in tincidunt lorem. Nunc et tellus nisi. Nulla non velit lectus. Morbi luctus ullamcorper felis, non gravida neque congue sit amet.</p>

            <div class="margin_bottom_20"></div>

            <ul class="content_list_01">
                <li>Integer tempor, libero quis laoreet dapibus, quam mauris hendrerit  urna, vel feugiat dolor lectus non velit. Fusce at nisl libero, ac  fringilla risus.</li>
                <li>Proin non velit nec enim volutpat euismod. Phasellus lorem velit, porttitor non iaculis in, euismod a metus. Nullam orci odio, dignissim a egestas ac, sollicitudin in quam.</li>
            </ul>

            <div class="margin_bottom_20"></div>

            <div class="content_section_01">
            	Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor. Duis in tincidunt lorem. Nunc et tellus nisi. Nulla non velit lectus. Morbi luctus ullamcorper felis, non gravida neque congue sit amet. Nam nec mi metus, ac elementum velit. Etiam vel arcu velit, eget consequat risus.
            </div>

            <div class="cleaner"></div>
        </div>

        <div id="column_w300">

        	<div class="header_03">Latest News</div>

            <div class="column_w300_section_01">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_02.jpg" alt="image" />
                </div>

                <div class="news_content">
                	<div class="news_date">OCT 29, 2048</div>
                    <div class="header_04"><a href="#">Lorem ipsum dolor sit</a></div>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam a justo dolor.</p>
				</div>

                <div class="cleaner"></div>
            </div>

            <div class="column_w300_section_01 even_color">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_03.jpg" alt="image" />
                </div>

                <div class="news_content">
                	<div class="news_date">OCT 28, 2048</div>
                    <div class="header_04"><a href="#">Nam dictum pellentesque</a></div>
                    <p>Nam ultricies cursus enim, non aliquet orci lacinia ac. Etiam lobortis adipiscing.</p>
				</div>

                <div class="cleaner"></div>
            </div>

            <div class="column_w300_section_01">
            	<div class="news_image_wrapper">
                	<img src="images/templatemo_image_04.jpg" alt="image" />
                </div>

                <div class="news_content">
                	<div class="news_date">OCT 27, 2048</div>
                    <div class="header_04"><a href="#">Donec faucibus tortor</a></div>
                    <p>Aliquam porttitor nibh in erat porttitor in accumsan dui pulvinar.</p>
				</div>

                <div class="cleaner"></div>
            </div>

            <div class="cleaner"></div>
        </div>

Dzięki temu, część w divie templatemo_content będzie się zmieniać po przechodzeniu na inne strony, a po wejściu na stronę główną wczytany zostanie widok home. Do szablonu strony – widok default dodajemy w sekcji nagłówkowej – head zmienne, które będą odpowiadać za podmianę tytułu, tagów description, stylów i plików js. Widok default wygląda teraz tak:

Widok default: /application/views/default.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo 'Kohana - '.$title ?></title>
    <?php foreach ($styles as $file => $type) echo HTML::style($file, array('media' => $type)), "\n" ?>
    <?php foreach ($scripts as $file) echo HTML::script($file), "\n" ?>

<script language="javascript" type="text/javascript">
function clearText(field)
{
    if (field.defaultValue == field.value) field.value = '';
    else if (field.value == '') field.value = field.defaultValue;
}
</script>
</head>
<body>
<div id="templatemo_header_wrapper">
<!--  Free Web Templates by TemplateMo.com  -->
  <div id="templatemo_header">

   	<div id="site_logo"></div>

		<div id="templatemo_menu">
      		<div id="templatemo_menu_left"></div>
            <ul>
                  <li><a href="#" class="current">Home</a></li>
                  <li><a href="http://www.templatemo.com">Services</a></li>
                  <li><a href="http://www.templatemo.com/page/2">Gallery</a></li>
                  <li><a href="#">Company</a></li>
                  <li><a href="#" class="last">Contact</a></li>
            </ul>
		</div> <!-- end of menu -->

    </div>  <!-- end of header -->
</div> <!-- end of header wrapper -->

<div id="templatemo_banner_wrapper">
	<div id="templatemo_banner">

    	<div id="templatemo_banner_image">
        	<div id="templatemo_banner_image_wrapper">
            	<img src="images/templatemo_image_01.jpg" alt="image 1" />
            </div>
        </div>

        <div id="templatemo_banner_content">
        	<div class="header_01">Lorem ipsum dolor sit amet, consectetur adipiscing elit. </div>
            <p>Aliquam dignissim elementum est sit amet iaculis. Integer pretium ultricies risus, condimentum molestie odio euismod vitae. </p>
            <div class="button_01"><a href="#">Read more</a></div>
        </div>

    	<div class="cleaner"></div>
    </div> <!-- end of banner -->
</div> <!-- end of banner wrapper -->

<div id="templatemo_content_wrapper">
	<div id="templatemo_content">
            <?php include Kohana::find_file('views', $content);?>
    	<div class="cleaner"></div>
    </div> <!-- end of content wrapper -->
</div> <!-- end of content wrapper -->

<div id="templatemo_footer_wrapper">

	<div id="templatemo_footer">

        <div class="section_w180">
        	<div class="header_05">Services</div>
            <div class="section_w180_content">
            	<ul class="footer_menu_list">
                    <li><a href="#">Lorem ipsum dolor</a></li>
                    <li><a href="#">Cum sociis</a></li>
                    <li><a href="#">Donec quam</a></li>
                    <li><a href="#">Nulla consequat</a></li>
                    <li><a href="#">In enim justo</a></li>
                </ul>
			</div>
        </div>

        <div class="section_w180">
        	<div class="header_05">About</div>
            <div class="section_w180_content">
                <ul class="footer_menu_list">
                    <li><a href="#">Nullam quis</a></li>
                    <li><a href="#">Sed consequat</a></li>
                    <li><a href="#">Cras dapibus</a></li>
                    <li><a href="#">Lorem ipsum dolor</a></li>
                    <li><a href="#">Cum sociis</a></li>
                </ul>
            </div>
        </div>

        <div class="section_w180">
        	<div class="header_05">Cool links</div>
            <div class="section_w180_content">
                <ul class="footer_menu_list">
                    <li><a href="#">Aenean vulputate</a></li>
                    <li><a href="#">Etiam ultricies</a></li>
                    <li><a href="#">Nullam quis</a></li>
                    <li><a href="#">Sed consequat</a></li>
                    <li><a href="#">Cras dapibus</a></li>
                </ul>
			</div>
        </div>

        <div class="section_w180">
	        <div class="header_05">Contact</div>

            <div class="section_w180_content">

                <ul class="footer_menu_list">
                    <li><a href="#">Donec quam</a></li>
                    <li><a href="#">Nulla consequat</a></li>
                    <li><a href="#">In enim justo</a></li>
                    <li><a href="#">Aenean vulputate</a></li>
                    <li><a href="#">Etiam ultricies</a></li>
                </ul>
			</div>
        </div>

        <div class="section_w180">
			<div class="header_05">Partners</div>
            <div class="section_w180_content">
                <ul class="footer_menu_list">
                    <li><a href="http://www.templatemo.com" target="_parent">CSS Templates</a></li>
                    <li><a href="http://www.flashmo.com" target="_parent">Flash Websites</a></li>
                    <li><a href="http://www.templatemo.com/page/2" target="_parent">Website Templates</a></li>
                    <li><a href="http://www.webdesignmo.com" target="_parent">Web Design Tips</a></li>
                    <li><a href="http://www.photovaco.com" target="_blank">Free Stock Photos</a></li>
                </ul>
			</div>
        </div>

        <div class="margin_bottom_20"></div>
        Copyright © 2048 <a href="#">Your Company Name</a> | <a href="http://www.iwebsitetemplate.com" target="_parent">Website Templates</a> by <a href="http://www.templatemo.com" target="_parent">Free CSS Templates</a>
        <div class="cleaner"></div>
    </div> <!-- end of footer -->
    <!--  Free CSS Templates by TemplateMo.com  -->
</div> <!-- end of footer -->
</body>
</html>

Następnie tworzymy w głównym katalogu kohany foldera /media a w nim 2 foldery /css do którego kopiujemy styl templatemo_style.css, folder /img do którego kopiujemy zawartość /images szablonu. Edytujemy /application/bootstrap.php aby standardowo wczytywał się kontroler defautl (zmieniamy Route::set), przy okazji usuwamy index.php z linku (dodajemy w Kohana::init)

Kohana::init(array(
	'base_url'   => '/',
        'index_file' => FALSE,
));
 
Route::set('default', '(<controller>(/<action>(/<id>)))')
	->defaults(array(
		'controller' => 'default',
		'action'     => 'index',
	));

Teraz po wywołaniu strony powinny się załadować widoki. Ale to jeszcze nie wszytko! Najprawdopodobniej nie będą się zgadzać ścieżki do css i img. Pierwsze co należy teraz wykonać to w kontrolerze default w funkcji after() podać nową, prawidłową nazwę stylu css

$styles = array(
                        'media/css/templatemo_style.css' => 'screen',
                );

Już trochę lepiej to wygląda – css wczytany, ale mogą nie zgadzać się w nim ścieżki do obrazków, jak i w samych widokach (default i home) ścieżki mogą być nieprawidłowe. Trzeba je poprawić. Zacznijmy od css. Znajdujemy w nim pierwsze z brzegu odwołanie do pliku tła:

background: url(images/templatemo_button_01.png) no-repeat;

W szablonie plik stylu był bezpośrednio w folderze z szablonem a obrazki w folderze /images. Należy więc podać prawidłowe ścieżki do plików graficznych. Najprościej będzie skorzystać z opcji znajdź i zamień w edytorze. Zamieniamy w całym css’ie images/ na ../img/. Odświeżamy i tła powinny już być wczytane, jednakże brakuje jeszcze obrazków. Przechodzimy do poprawy widoków. Zarówno w default, jak i w home znajdują się jeszcze odwołania z szablonu do folderu /images, musimy więc poprawić z images/ na /media/img/. Najlepiej skorzystać z wcześniejszej opcji znajdź zamień (może się zdarzyć, że fraza images/ występuje nie tylko w odwołaniach do obrazków i może podmienić nieodpowiedni tekst, trzeba więc podać więcej unikalnego tekstu, np. src=”images/).

Po tych czynnościach mamy zaimplementowany szablon do Kohany

Stwórzmy jeszcze prosty kontroler Service i widok aby wczytać inną treść niż na stronie głównej.
Kontroler Service: /application/classes/controller/service.php

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Service extends Controller_Default {
     public function action_index() {
        $this->template->title = __('Services');
        $this->template->content='service';
        $this->template->top_tab='service';
    }

    public function action_details($id=NULL) {
        $this->template->title = __('Service details');
        $this->template->content='service_details';
        $this->template->top_tab='service';

        switch ($id){
            case 1:$name='Service 1'; break;
            case 2:$name='Service 2'; break;
            case 3:$name='Service 3'; break;
            default: $name='No service';
        }
        $this->template->name=$name;
    }
}
?>

Potrzebne będą jeszcze 2 widoki: service i service_details
Widok service: /application/views/service.php

<h1><?php echo $title;?></h1>
<p><a href="/service/details/1">Service 1</a></p>
<p><a href="/service/details/2">Service 2</a></p>
<p><a href="/service/details/3">Service 3</a></p>

Widok service_details: /application/views/service_details.php

<h1><?php echo $title;?></h1>
<h3><?php echo $name?></h3>
<p><?php echo $name?>- Lorem ipsum dolor</p>

Podmieńmy jeszcze w widoku default link w topie i wykrywanie aktywnej strony:

<li><a href="/"<?php echo $top_tab=='home' ? ' class="current"' : ''?>>Home</a></li>
<li><a href="/service"<?php echo $top_tab=='service' ? ' class="current"' : ''?>>Services</a></li>

Możemy zastosować jeszcze klasy css do widoków service i service_details, ale to już każdy wg uznania. Zatem zaimplementowaliśmy gotowy szablon strony w HTML do Kohany.
Gotowe pliki można pobrać: Implementacja szablonu do ko3.1.2 (537)

23 Odpowiedzi :“Implementacja szablonu do Kohany”

  1. Mariusz napisał:

    Poprawiłem archiwum (wcześniejsze nie mogło się rozpakować).

  2. Mój problem polega na tym że link w widoku default przekierowuje na adres http://localhost/service, a kohane mam w folderze kohana/. Gdy zmienię odnośnik na /kohana/service też nie działa prawidłowo wyświetla błąd 404 not found

    • A to o czym często zapominam a powoduje dziwne błędy to jeszcze ustawienia pliku .htaccess, także należy o tym pamiętać ;)

  3. Mariusz napisał:

    W bootstrapie w sekcji init trzeba ustawić base_url na katalog kohana/ jeśli framework nie znajduje się w bezpośrednim katalogu. Plik .htaccess we większości przypadków wystarczy stworzyć z example.htaccess, ew. dodać w pierwszej linii: Options FollowSymLinks

  4. Też Mariusz napisał:

    Co daje „Options FollowSymLinks” w htaccessie?
    Szukałem w google ale nic ciekawego nie wyczytałem.

  5. Mariusz napisał:

    Ta komenda zezwala na podążanie wzdłuż linków symbolicznych. Na pewnych specyficznych ustawieniach serwera apache jest ona potrzebna do działania przyjaznych linków (jeśli mamy wszystko dobrze skonfigurowane, a po wpisaniu w linku /kontroler/akcja nie wyświetla się strona, to wtedy należy ją dodać).

  6. Destrix napisał:

    Wszystko ładnie opisane, miałem już do czynienia z Kohaną, ale po przerwie potrzebowałem sobie odświeżyć pamięć. Świetny blog, czekamy na kolejne wpisy (zwłaszcza auth). MGR chyba juz obroniony? ;) Pozdro

  7. Mariusz napisał:

    Jeszcze nie mgr, semestr zamknięty, praca napisana, obrona we wrześniu. Przygotowuję wpis o logowaniu z wykorzystaniem auth i innym prostym logowaniem.. już niebawem się ukaże ;)

  8. white napisał:

    czy w kohanie 3.2 dalej należy dawać te before i after w controlerze ?
    czy są one niezbędne, co tak właściwie robią ?

    • Mariusz napisał:

      Nie są one wymagane. We wcześniejszych też nie były. Wykonują się one każdorazowo przed i po wywołaniu kontrolera (jeśli dodamy do głównego to będą się wykonywały zawsze – w kontrolerach rozszerzające główny kontroler również się wykonają). Możemy w nich sprawdzać zalogowanie użytkownika, pobierać język z sesji, przesyłać zmienne, które zawsze występują w widokach.

  9. white napisał:

    i czasami na końcu controllera piszesz
    ” ?> ”

    czy zakończenie php jest niezbędne czy niepoprawne w kohanie, bo jest różnie w oryginalnym controlerze kohany nie ma

    • Mariusz napisał:

      Zamykanie znacznika php nie jest wymagane we wszystkich plikach (np. kontrolerach, konfigach), nic nie stoi jednak na przeszkodzie aby zamykać. W widokach jeśli po php występuje kod html to musimy zamykać, z wiadomych względów…

  10. Mikołaj napisał:

    Witam serdecznie!

    Jako że jestem nowicjuszem w Kohana 3.2 mam problem z szablonami. Podpowiedzcie mi jak ładuje do szkieletu strony czyli Template inne widoki wszystko ładnie sie wyświetla. Do tego szkieletu ładuje np widok „Box_Score” który wygląda dobrze. Natomiast kiedy chce wejść do tego widoku bezpośrednio poprzez kohana/box_score/index/ pojawia mi sie pusta strona :/ Kombinowałem z konstruktorami dawało to taki efekt ze strona bezpośrednio z linku kohana/box_score/index/ sie pojawiala to znowu szkielet wyswietlal błąd o missing argument :/ w czym tkwi błąd?

    • Mariusz napisał:

      Wywołanie z linku kohana/box_score/index/ uruchamia główny kontroler, kontroler o nazwie box_score i akcję index, a w nich wczytuje się szablon i widoki. Z linku nie można otwierać samego widoku. Polecam wpis drugie starcie, gdyż zawarte tam wskazówki dotyczą ko 3.2 i powinny wyjaśnić podstawy.

      • Mikołaj napisał:

        Rozumiem oczywiscie, źle sie wyraziłem…
        powiem może jaśniej.
        Do szablonu strony ładuje odpowiednie kontrolery które ładują widoki. Wszystko gra pięknie tak jak ma być bo kontrolery pobieraja dane z bazy danych i wyświetlaja je w widokach które są zamieszczone w szkielecie strony. Wszystko gra… ale jesli potrzebuje np zobaczyc jak to wyglada bez szkieletu tylko sam widok wywołuje przykładowo podany wcześniej /kohana/box_score/index/ Gdzie box_score to nazwa controlera a index to nazwa metody która ma zadziałać To pojawia mi się biały ekran, nie wyskakuje żaden błąd tylko zwraca mi biały ekran… dziwne bo zamieszczony ten sam controler w szkielecie działa dobrze :/

      • Mariusz napisał:

        W nazwie kontrolera nie używaj _, chyba, że jest on w podfolderze box. I jeśli ten kontroler box_score rozszerza kontroler szablonu (np. default) to wywołanie /kohana/box_score/index/ wczyta również szablon.

        Jeśli kontroler główny (np. default) rozszerza template (używasz szablonu)

        class Controller_Default extends Controller_Template {
        

        A w innym kontrolerze nie chcesz szablonu to zamiast

        class Controller_Box_Score extends Controller_Default {
        

        daj:

        class Controller_Box_Score extends Controller {
        

        Ew. wklej na pastebin.pl kod i daj linka to zobaczymy co może być nie tak.

  11. Mikołaj napisał:

    Moje założenie jest takie
    Jest strona która jest podzielona na bloki za pomocą szkieletu
    Bloki te to nic innego jak oddzielne widoki.
    z tym że nie wszystkie widoki są statycznymi.
    niektóre widoki które próbuje dołączyć do szkieletu pobierają dane z bazy danych. Ale dane oczywiście trzeba obrobić przygotować do wyświetlenia. dlatego tworze nowy obiekt controllera w indexie zeby pobrac dane i odrazu zwrocić je z widokiem do szkieletu. Natomiast niektóre controllery nie będą miały szablonu ponieważ nie chce aby korzystały z szablonu. Dla przykładu chciałbym aby przykładowy boxscore używany w szkielecie mógłbyć wyświetlony również bez ogólnego szkieletu strony.

    Podziedz mi prosze czemu nie można tak ładowac kontrolera
    1 $boxscore = new Controller_Boxscore();
    ?

    Czy mógłbyś mi wyjaśnić jak zrobic takie cos

    Majac szkielet z blokami „menu” i „boxscore”
    menu bedzie statycznym htmlem natomiast boxscore bedzie miał swój kontroler w którym pobierane bedą dane i będzie zwracany widok. Tak to mam mniej wiecej zrobione ale chciałbym zeby jeszcze oprócz działania w szkielecie zeby mozna bylo boxscore obejrzec bez szkieletu. Nie mgoe sie dokopać do takich informacji w necie :/ Dlaczego controler ktory wyswietla dobrze widok boxscore w szkielecie strony nie jest w stanie wyswietlic tego samego boxscore bez szkieletu ? Afera :P

    Dlatego

    • Mariusz napisał:

      Myślę, że problem tkwi tu w rozumowaniu:

      boxscore bedzie miał swój kontroler w którym pobierane bedą dane i będzie zwracany widok

      Kontroler powinien zarządzać elementem (blokiem boxscore), a nie odwrotnie. Spróbuj jeszcze raz przeanalizować mój ostatni komentarz ;) i napisz wtedy w jakich sytuacjach jest Ci potrzebny ten blok.

    • Mikołaj napisał:

      Poniekąd rozwiązałem problem :)

      Aby wyświetlać zawartość widoku w szkielecie poprzez kontroler boxscore należy zwracać widok za pomocą $this->response->body($view)
      natomiast jeśli chce wyświetlić bezpośrednio czyli kohana/boxscore/index nalezy zwracać za pomocą return $view;

      narazie jest to dla mnie jedyne wyjście :/ :)

  12. A co z html 5? Chciałbym aby helper wykorzystać dla dodawania css i js w nomenklaturze html5 i nie mogę sobie poradzić…

    może ktoś podpowiedzieć? :)

    • Mariusz napisał:

      Chodzi Ci o HTML::style, HTML::script?
      Ja w głównym kontrolerze daje:

      public function before()
      {
        parent::before();
        if ($this->auto_render)
        {
          $this->template->styles = array();
          $this->template->scripts = array();
        }
      }
      public function after()
      {
        if ($this->auto_render)
        {
          $styles = array(
            'media/css/reset.css' => 'screen',
            'media/css/style.css' => 'screen',
            );
      
          $scripts = array(
            'media/js/jquery.min.js' => 'src',
            '$jQ=jQuery.noConflict();' =>'code',
            );
          $this->template->styles = array_merge($styles, $this->template->styles);
          $this->template->scripts = array_merge($scripts, $this->template->scripts);
        }
        parent::after();
      }
      

      A w widoku szablonowym:

      <?php foreach ($styles as $file => $type) echo HTML::style($file, array('media' => $type))."\n" ?>
      <?php foreach ($scripts as $file => $type) echo ($type=='code' ? '<script type="text/javascript">'.$file.'</script>' : HTML::script($file))."\n" ?>
      

      Jeśli to, co zwracają te helpery nie jest zgodne z html5, to można by nadpisać w application kod, aby był zgodny.

Dodaj komentarz

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

*