2013-01-03 1 views
0

J'essayais d'intégrer codeigiter et boilerplate.codeigniter avec boilerplate

J'ai créé un contrôleur maison

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

/* Heredamos de la clase CI_Controller */ 
class Home extends CI_Controller { 

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

    function index() 
    { 
     $data = array('title' => 'homepage', 'main_content' => 'home_v'); 
     $this->load->view('template', $data); 
    } 

} 

alors je crée un dossier « comprend » avec 2 fichiers: en-tête et pied de page (en vue)

et aussi dans les vues de mon modèle et un fichier home_v avec du texte juste pour savoir si mon exemple fonctionnait.

template.php

<!DOCTYPE html> 
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
     <title>$title</title> 
     <meta name="description" content=""> 
     <meta name="viewport" content="width=device-width"> 

     <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> 

     <link rel="stylesheet" href="<?php echo base_url('css/normalize.css'); ?>"> 
     <link rel="stylesheet" href="<?php echo base_url('css/main.css'); ?>"> 
     <script src="<?php echo base_url('js/vendor/modernizr-2.6.2.min.js'); ?>"></script> 
    </head> 
    <body> 
     <!--[if lt IE 7]> 
      <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p> 
     <![endif]--> 

     <!-- Add your site or application content here --> 
     <div id="container"> 
     <header> 
      <?php $this->load->view('includes/header'); ?> 

     </header> 

     <div id="main" role="main"> 
      <?php $this->load->view($main_content); ?> 
     </div> 


     <footer> 
      <?php $this->load->view('includes/footer'); ?> 
     </footer> 
     </div> 
     <!-- fin container --> 

     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
     <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.3.min.js"><\/script>')</script> 
     <script src="js/plugins.js"></script> 
     <script src="js/main.js"></script> 

     <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> 
     <script> 
      var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]; 
      (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0]; 
      g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js'; 
      s.parentNode.insertBefore(g,s)}(document,'script')); 
     </script> 
    </body> 
</html> 

Après qu'un nouveau contrôleur categorias

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

/* Heredamos de la clase CI_Controller */ 
class Categorias extends CI_Controller { 

    function __construct() 
    { 

     parent::__construct(); 

     /* Cargamos la base de datos */ 
     $this->load->database(); 

     /* Cargamos la libreria*/ 
     $this->load->library('grocery_crud'); 

      /* Añadimos el helper al controlador */ 
     $this->load->helper('url'); 

    } 

    function index() 
    { 
     /* Puse lo mismo pero cambiando el contenido  */ 
     //$data = array('title' => 'categorias', 'main_content' => 'categorias/categorias_v'); 
     //$this->load->view('template', $data); 

        /* si solo muestro esto funciona el crud */ 
     //redirect('categorias/categorias_v'); 

    } 

    /* 
    * 
     **/ 
    function categorias_v() 
    { 
     try{ 

      /* Creamos el objeto */ 
      $crud = new grocery_CRUD(); 

      /* Seleccionamos el tema */ 
      $crud->set_theme('flexigrid'); 

      /* Seleccionmos el nombre de la tabla de nuestra base de datos*/ 
      $crud->set_table('categorias'); 

      /* Le asignamos un nombre */ 
      $crud->set_subject('Categorias'); 

      /* Asignamos el idioma español */ 
      $crud->set_language('spanish'); 

      /* Aqui le decimos a grocery que estos campos son obligatorios */ 
      $crud->required_fields( 
       'id_categoria', 
       'nombre_categoria' 
      ); 

      /* Aqui le indicamos que campos deseamos mostrar */ 
      $crud->columns( 
       'id_categoria', 
       'nombre_categoria' 
      ); 

      /* Generamos la tabla */ 
      $output = $crud->render(); 



      $this->load->view('categorias/categorias_v', $output); 

     }catch(Exception $e){ 
      /* Si algo sale mal cachamos el error y lo mostramos */ 
      show_error($e->getMessage().' --- '.$e->getTraceAsString()); 
     } 
    } 
} 

et vues categorias_v

<?php 
foreach($css_files as $file): ?> 
    <link type="text/css" rel="stylesheet" href="<?php echo $file; ?>" /> 
<?php endforeach; ?> 
<?php foreach($js_files as $file): ?> 
    <script src="<?php echo $file; ?>"></script> 
<?php endforeach; ?> 

<?php echo $output; ?> 

mais cela ne fonctionne pas, j'ai quelques erreurs

Une erreur PHP a été rencontré Gravité: Avis Message: Undefined variable: css_files Nom du fichier: categorias/categorias_v.php Numéro de ligne: 2

J'espère que quelqu'un peut m'aider, merci d'avance!

+0

vous savez qu'un contrôleur ne peut pas appeler un autre contrôleur directement !! et ce code commenté fonctionne-t-il ou quoi? alors d'où passez-vous les $ css_files –

Répondre

0

Dans votre vue categorias_v, vous essayez d'accéder à une variable nommée $css_files. Toutefois, vous ne transmettez jamais de variables dans cette vue.

Vous passez des variables dans une vue en envoyant un tableau à la méthode $this->load->view comme ceci:

$data = array('css_files' => 'style.css'); 
$this->load->view($main_content, $data); 

// $data has the array key of css_files, 
// so in the view $css_files will be available. 
Questions connexes