Soy bastante nuevo en MVC, y me he encontrado CodeIgniter recientemente. Todavía estoy aprendiendo todos los días, pero uno de los problemas es su motor de plantillas. ¿Cuál es la mejor manera de crear plantillas de CodeIgniter?

CakePHP viene con su propia plantilla de la biblioteca, hay una característica similar en CodeIgniter?

  • Hola @Martin, veo que esto es bastante viejo post y todavía no marca ninguna respuesta como correcta. ¿Encontrar una solución a su problema?
InformationsquelleAutor Martin | 2009-06-22

12 Comentarios

  1. 25

    A diferencia de otros frameworks CodeIgniter no tiene una plantilla global del sistema. Cada Controlador controla su propia salida independiente del sistema y las vistas son FIFO, a menos que se especifique lo contrario.

    Por ejemplo, si tenemos un mundial encabezado:

    <!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">

    y un pie de página:

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

    a continuación, nuestro controlador tendría que mirar como

    <?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);
        }
    }

    Hay otras combinaciones, pero la mejor de las soluciones a través de librerías de usuario como:

    Ver Los Comentarios De Abajo

    • Llegué aquí desde google, los enlaces anteriores no funcionan y redirigir a la repo de github para CodeIgniter, pero usted puede ir a las páginas wiki de allí y la búsqueda para «plantilla» para encontrar una docena de diferentes implementaciones para este problema.
    • También hay una gran cantidad de bibliotecas de plantillas que he utilizado, que no son parte de CodeIgniter, pero puede ser fácilmente integrado, Bigote(github.com/bobthecow/mustache.php) y Rama(twig.sensiolabs.org)
    • Por qué esta respuesta tiene tantos upvotes?
    • Porque cuando la pregunta fue dada y respondida hace 6 años era pertinente.
  2. 14

    He intentado de varias maneras para hacer codeigniter plantillas y la forma en la que me quedo es la forma más rápida y más sencilla, es la siguiente.

    De controlador:

        //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);

    A la vista template.php:

    <!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> 

    $body es la opinión de contacto.

    • Cuando se utiliza este método, obtener gran cantidad de variables no definidas, no parecen ser cada vez transcurrido desde el controlador a la $cuerpo de la variable.
  3. 13

    Hacer una biblioteca que incluye todos sus puntos de vista y enviar los datos que usted necesita para enviar su contenido a la vista. Esto es todo!

    <?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');        
        }
    }
  4. 5

    Esta biblioteca, fácil de usar y personalizar, hace exactamente lo que usted esperaría:

    • evitar HTML duplicación (encabezado, pie de página..)
    • no hay necesidad de aprender un nuevo idioma (!)

    La mayoría Simple de la Plantilla de la Biblioteca para CodeIgniter

    • La cosa que más me gusta de esto es que en lugar de cambiar a una sintaxis diferente para algo como Smarty, conserva lo que más me gusta de CI plantillas básicas: PHP formato corto de etiquetas.
  5. 4

    Puedo usar CodeIgniter con Smarty y es genial (si te gusta Smarty, yo).

    Dicen que usted tiene un artículo en el controlador, se podría hacer algo como esto en él:

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

    Y, a continuación, en su plantilla:

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

    La parte buena de esto es que el programador no necesita saber acerca de los encabezados y pies de página. Sólo se sabe que un grupo de artículos se muestran como una lista. A partir de ahí, sólo las plantillas que son los responsables de definir cómo una lista de las cosas que se muestran, en este caso, en un ul entre un encabezado y pie de página.

    Otra cosa interesante puedes hacer es utilizar esta plantilla de lista de cosas que no son artículos. Usted podría tener una lista de usuarios o páginas o lo que sea. En algunos casos la reutilización de una plantilla como esta puede ser útil. No siempre, pero a veces.

    La configuración de CodeIgniter para smarty es bastante sencillo. Es cuestión de copiar el Smarty archivos a la carpeta de la biblioteca y la creación de un simple contenedor para él. Usted puede encontrar las instrucciones aquí:

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

    Una vez que se obtiene es configurar es genial.

  6. 2

    Tengo dos plantillas, una para el sitio y para nuestro panel de administración. Aquí está mi configuración para nuestro sitio principal (en su mayoría estáticos)… me he decidido por un controlador llamado site Se llama el archivo de plantilla y de cada página y se su archivo de vista.

    ¿Por qué no mencionar a nadie de la plantilla de motor de uso? Son -solo – opiniones mejor/más rápido?

    • En config/template.php he definido la plantilla(s). Nota *site_template* es en el views carpeta:

      $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;
    • En config/routers.php puedo configurar reglas para manejar las peticiones de los
      site controlador que son una de los segmentos de direcciones url en su mayoría, pero que hacemos
      tiene una sección que está estructurado como tal; /quienes-somos y, a continuación,
      para las personas seleccionadas /quienes-somos/robert-wayne y así:

      $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"
    • Y controllers/site.php de Nuevo con una función para cada página/sección:

      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...

    y como punto fino aviso de que el router nos permite dejar fuera `/sitio/’ en la url,
    http://the site.com/who-we-are

    pensamientos? nadie? bueller?

    • Me sorprende que esto no ha sido upvoted más.
  7. 1

    Estoy sesgado hacia el este de la plantilla de la biblioteca realizado por Carmelo Capinpin porque es tan fácil de usar: enlace de texto. Sólo tienes que copiar el archivo de la biblioteca y usted está listo para ir. Las instrucciones sobre cómo usar es en el enlace que he proporcionado.

  8. 0

    Un Codeigniter plantilla es generalmente un archivo PHP. Usted puede utilizar todos los habituales de PHP sintaxis para las variables de salida, hacer loops, y llamar a otros de código PHP.

    Ejemplo de controlador:

    <?php
    class Blog extends Controller {
    
        function index()
        {
            $data['title'] = "My Real Title";
            $data['heading'] = "My Real Heading";
    
            $this->load->view('blogview', $data);
        }
    }
    ?>

    Vista de muestra:

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

    Leer más en la documentación aquí: Guía Del Usuario De CodeIgniter: Vistas

    • Bien, sí. Pero me gustaría saber si hay de todos modos para acelerar este proceso y hacerlo más organizado – así no tengo que escribir en <header></header>, <body>, estilo, etc… quiero tener en una carpeta o biblioteca. Piense en ello como wordpress, usted podría cambiar de plantilla sin tener que editar cada vista.
  9. 0

    Me permiten proponer una manera más fácil de hacer esto. Considere la posibilidad de mi respuesta a una pregunta similar.

    Pros:

    1. Su plantilla de archivo puede ser un archivo HTML. Usted no tiene que romper el encabezado y el pie de página.
    2. Cualquier archivo de vista puede ser convertida en una plantilla con un mínimo de esfuerzo.
    3. De datos para la vista específico puede ser generada en la plantilla.

    Contras:
    1. Puede que tenga que agregar un template (o layout—si quieres hacerlo de la de Rails) directorio bajo puntos de vista en el fin de estructurar el código correctamente. Esto se desprende de Pros[2].
    2. Datos específicos de la vista desde el controlador debe ser, ante todo, se pasa a la plantilla.

Dejar respuesta

Please enter your comment!
Please enter your name here