Codeigniter Şablonları ile Deal nasıl?

12 Cevap php

Ben MVC için oldukça yeni ve son zamanlarda CodeIgniter'ı buldum. Ben hala her gün bir şeyler öğreniyorum, ama bir problem, şablon motorudur. CodeIgniter'daki şablonları oluşturmak için en iyi yolu nedir?

CakePHP kendi şablon kütüphanesi ile birlikte, CodeIgniter'daki benzer bir özellik var?

12 Cevap

Diğer çerçeveler aksine CodeIgniter küresel bir şablon sistemi yoktur. Her Kontrolör bu sistemin bağımsız kendi çıkışlarını kontrol eder ve aksi belirtilmediği sürece manzarası FIFO vardır.

Biz küresel bir başlık varsa Örneğin:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
    <head>
        <title><?=$title?></title>
        <!-- Javascript -->
        <?=$javascript ?>
        <!-- Stylesheets -->
        <?=$css ?>
    </head>
    <body>
        <div id="header">
            <!-- Logos, menus, etc... -->
        </div>
        <div id="content">

ve küresel bir altbilgi:

        </div>
        <div id="footer">
            <!-- Copyright, sitemap, links, etc... -->
        </div>
    </body>
</html>

sonra bizim denetleyici gibi bakmak gerekir

<?php
class Welcome extends Controller {

    function index() {
        $data['title'] = 'My title';
        // Javascript, CSS, etc...

        $this->load->view('header', $data);

        $data = array();
        // Content view data
        $this->load->view('my_content_view', $data);

        $data = array();
        // Copyright, sitemap, links, etc...
        $this->load->view('footer', $data);
    }
}

Orada başka kombinasyonlar vardır, ama daha iyi çözümler gibi kullanıcı kütüphaneleri aracılığıyla var:

See Comments Below

Ben, CodeIgniter şablonlar ve ben kalmak yolu hızlı ve basit yapmak için çeşitli yollar denedim aşağıdaki gibidir ettik.

Denetleyici:

    //Charge the view inside array
    $data['body'] = $this->load->view('pages/contact', '', true);


    //charge the view "contact" in the other view template
    $this->load->view('template', $data);

View template.php in:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es"> 
<head> 
    <title>Template codeigniter</title> 
</head> 
<body> 
    <div> 
        <?=$body?>
    </div> 
    <div class="clear"></div> 
    <div>Footer</div> 
    </div> 
</body> 
</html> 

$ Vücut görünümü temas.

Tüm görüşlerini içeren bir kütüphane yapmak ve bunu size içerik görünümü göndermek için gereken veri göndermek. Bu hepsi bu!

<?php
class Display_lib
{

public function user_page($data,$name)
{
    $CI =& get_instance ();

    $CI->load->view('preheader_view',$data);
    $CI->load->view('header_view');
    $CI->load->view('top_navigation_view');
    $CI->load->view($name.'_view',$data);
    $CI->load->view('leftblock_view',$data);
    $CI->load->view('rightblock_view',$data);
    $CI->load->view('footer_view');        
}

}

Kullanmak ve özelleştirmek için kolay Bu kütüphane, tam olarak beklediğiniz ne yaptığını:

  • HTML tekrarından kaçınmak (header, footer ..)
  • Yeni bir dil öğrenmek gerek (!)

Most Simple Template Library for CodeIgniter

Ben Smarty ile CodeIgniter'ı kullanmak ve (eğer Smarty isterseniz, ben) harika.

Eğer bir makale denetleyicisi söylüyorlar, bunu böyle somehting yapabilirsiniz:

class Article extends Controller {
  function show_all() {
    $articles = $this->article_model->get_all();
    $this->smarty->assign('entities', $articles);
    $this->smarty->view('list');
  }
}

Ve sonra şablonu:

{include file="header.tpl"}
  <ul>
  {foreach from=$entities item=entity}
  <li>{$entity.title}</li>
  {/foreach}
  </ul>
{include file="footer.tpl"}

Bu konuda güzel bir parçası denetleyici gerçekten üstbilgi ve altbilgiler hakkında bilmeniz gereken olmamasıdır. Bu sadece makalelerin bir grup bir liste olarak gösterilir gerektiğini bilir. Oradan, o şeylerin bir listesini bir başlık ve altbilgi arasında bir ul, bu durumda, nasıl görüntüleneceğini tanımlayan sorumlu sadece şablonlar bulunuyor.

Yapabileceğiniz başka serin şey makaleleri olmayan şeyler için bu liste şablonunu kullanmaktır. Kullanıcılara veya sayfaların ya da her neyse bir liste olabilir. Bazı durumlarda böyle bir şablonu yeniden yararlı olabilir. Her zaman değil, ama bazen.

Smarty için CodeIgniter'ı kurma oldukça basittir. Bu kütüphane klasörüne Smarty dosyaları kopyalama ve bunun için basit bir sarıcı yaratma meselesi. Sen talimatları burada bulabilirsiniz:

http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html

Eğer kurmak olsun bir kez harika.

Kullanımı çok kolay, çünkü ben Carmelo Capinpin tarafından yapılan bu şablon kütüphanesi karşı önyargılı değilim: link text. Sadece kütüphanede dosya kopyalama ve gitmek için hazırsınız. Nasıl kullanılacağı hakkında talimatlar ben sağlanan bağlantı olduğunu.

There is a library which allows you to use templates in CodeIgniter in a native style. To load a template/theme just do:

$this->load->theme(‘theme_name’);

Eğer yapabilirsiniz görüşlerinden CSS ve javascript dosyaları yüklemek için:

$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);

İsteğe bağlı yol önbellek CSS & tarayıcılar kontrol edebilirsiniz JS dosyaları.

Ben iki temel şablonları var; site için tek ve bizim admin panelinden için. İşte bizim ana site (çoğunlukla statik) için benim kurulum ... Ben site O its Dosyayı şablon dosyası ve her sayfayı çağırır ve alır denilen bir kontrolör verdi.

Neden kimse motor şablonu kullanımı söz etmez? Are -just- views better/faster?

  • In config/template.php Ben şablonu (ler) tanımlanmıştır. Not * site_template * views klasörde bulunmaktadır:

    $template['site']['template'] = 'site_template';
    $template['site']['regions'] = array('title','section','col2','content',);
    $template['site']['parser'] = 'parser';
    $template['site']['parser_method'] = 'parse';
    $template['site']['parse_template'] = FALSE;
    
  • In config/routers.php I setup rules to handle the requests for the site controller which are single segments urls mostly but we do have one section that is structured as such; /who-we-are and then for selected people /who-we-are/robert-wayne and so:

    $route['what-we-do'] = 'site/what_we_do';
    $route['who-we-are'] = 'site/who_we_are';
    $route['who-we-are/(:any)'] = "site/who_we_are/$1"
    
  • Ve controllers/site.php Yine her sayfa / bölüm için bir fonksiyonu:

    class Site extends CI_Controller
    {
    function __construct() {
        parent::__construct();
        $this->template->set_template('site'); // ask for the site template
        $this->load->library('mobile');
    }
    public function index()
    {
    $data = array('section' => 'home');
    $this->template->write_view('col2', 'site/menu.php', $data);
    $this->template->write('title', "COOL PAGE TITLE", TRUE);
    $this->template->write('section', $data['section'], TRUE);
    $this->template->write_view('content', 'site/welcome', $data);
    $this->template->render();
    }
    public function who_we_are()
    {
    // this bit readies the second segment.
    $slug = str_replace('-', '_', $this->uri->segment(2, 0));
    if($slug) // IF there is a second segment we load the person.
    {
    $data['bio'] = $this->load->view('site/people/'.$slug, '', true)
    } else {
    // where it loads the general view who_we_are
    }
    // and so on for each page...
    

and as fine point notice the router lets us leave out `/site/' in the url, http://the site.com/who-we-are

düşünceler? kimse? Bueller'a?

Peki aslında şablonları için CodeIgniter kütüphane kullanabilirsiniz. En ünlü olanları şunlardır:

  1. Codeigniter Simplicity (Aktif olarak geliştirilmiş)
  2. Phil Sturgeon's Template Library (aktif gelişmiş değil)
  3. An Introduction to Views & Templating in CodeIgniter (Burada aslında sıfırdan bir şablon kitaplığı oluşturmak)

Bir Codeigniter şablon genellikle sadece bir PHP dosyası olduğunu. Sen döngüler yapmak, çıkış değişkenleri için tüm olağan PHP sözdizimi kullanın ve diğer PHP kodu çağırabilirsiniz.

Örnek denetleyicisi:

<?php
class Blog extends Controller {

    function index()
    {
    	$data['title'] = "My Real Title";
    	$data['heading'] = "My Real Heading";

    	$this->load->view('blogview', $data);
    }
}
?>

Örnek görünüm:

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html>

Burada dokümanlar daha okuyun: CodeIgniter User Guide: Views

Bana bunu yapmak için daha kolay bir yol teklif izin. Düşünün my answer to a similar question.

Pros:

  1. Sizin şablon dosyası tam bir HTML dosyası olabilir. Sen üstbilgi ve altbilgi kırmak zorunda değilsiniz.
  2. Herhangi bir görünüm dosyası en az çabayla bir şablon haline olabilir.
  3. Belirli bir görüntü için veriler şablon üretilebilir.

Cons: 1. You may have to add a template (or layout—if you want to do it the Rails way) directory under views in order to structure your code properly. This follows from Pros[2]. 2. Data for the specific view from the controller must first of all be passed to the template.

Peki codeignier varsayılan olarak bu tür kitaplığı yok. Ama isterseniz, farklı temalar, görüş ve varlıklar bu kullanmayı deneyin yönetilen edilecek:

https://github.com/mahadazad/php-layout-manager