2010-03-18 5 views
0

J'essaie d'apprendre codeigniter (suite à un livre), mais ne comprends pas pourquoi la page Web sort vide.newbie problèmes avec codeigniter

mon contrôleur est

class Welcome extends Controller { 

    function Welcome() 
    { 
     parent::Controller(); 
    } 

    function index() 
    { 
     $data['title'] = "Welcome to Claudia's Kids"; 
     $data['navlist'] = $this->MCats->getCategoriesNav(); 
     $data['mainf'] = $this->MProducts->getMainFeature(); 
     $skip = $data['mainf']['id']; 
     $data['sidef'] = $this->MProducts->getRandomProducts(3, $skip); 
     $data['main'] = "home";  
     $this->load->vars($data); 
     $this->load->view('template'); 
    } 

la vue est:

<--doctype declaration etc etc.. --> 
</head> 
<body> 
    <div id="wrapper"> 
     <div id="header"> 
      <?php $this->load->view('header');?> 
     </div> 

     <div id='nav'> 
      <?php $this->load->view('navigation');?> 
     </div> 

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

     <div id="footer"> 
      <?php $this->load->view('footer');?> 
     </div> 

    </div> 
</body> 
</html> 

Maintenant, je sais que le modèle passe en arrière les bonnes variables, mais la page apparaît complètement vide. Je m'attendrais au moins à voir une erreur, ou la structure html de base, mais la page est juste vide. De plus, le contrôleur ne fonctionne pas même si je le modifie comme suit:

function index() 
{ 
    echo "hello."; 
} 

Qu'est-ce que je fais de mal? Tout fonctionnait jusqu'à ce que je fasse quelques changements au modèle - mais même si je supprime tous ces nouveaux changements, la page est toujours vide .. je suis vraiment confus!

merci, P.


J'ai isolé la fonction qui me donne des problèmes. voici:

function getMainFeature() 
{ 
    $data = array(); 
    $this->db->select("id, name, shortdesc, image"); 
    $this->db->where("featured", "true"); 
    $this->db->where("status", "active"); 
    $this->db->orderby("rand()"); 
    $this->db->limit(1); 
    $Q = $this->db->get("products"); 
    if ($Q->num_rows() > 0) 
    { 
     foreach($Q->result_arry() as $row) 
     { 
      $data = array(
       "id" => $row['id'], 
       "name" => $row['name'], 
       "shortdesc" => $row['shortdesc'], 
       "image" => $row['image'] 
       ); 
     } 
    } 
    $Q->free_result(); 
    return $data; 
} 

Je suis tout à fait convaincu qu'il doit y avoir une erreur de syntaxe quelque part - mais ne comprends toujours pas pourquoi il ne montre aucune erreur, même si je l'ai mis en place error_reporting E_ALL dans la fonction d'index ..

+0

Q-> result_arry() - right est result_array(). (ou c'est juste une faute de frappe?) – DCrystal

+0

bien repéré :) C'était une erreur réelle dans le code, mais je l'avais déjà repéré moi-même et n'ai pas résolu le problème .. – Patrick

+0

Si vous avez isolé à une fonction dans un modèle pourquoi ne pas le poster afin que nous puissions être en mesure de repérer l'erreur. – Eric

Répondre

2

Le premier port d'appel est d'exécuter php -l sur la ligne de commande contre votre contrôleur et tous les modèles que vous avez modifiés puis restaurés.

% php -l somefile.php 

Il est probable qu'il y ait une erreur d'analyse dans l'un des fichiers, et vous avez des erreurs d'affichage est désactivé dans votre php.ini. Vous devez définir les erreurs d'affichage pour le développement et désactiver pour la production, au cas où vous ne l'avez pas déjà fait.

(Edit:.. Dans l'exemple ci-dessus, vous avez manqué de la fermeture} de la classe Il est peut-être que)

+0

Le rapport d'erreurs est = E_ALL dans php.ini. Je ne suis pas familier avec la ligne de commande - comment puis-je le faire? (la parenthèse manquante était seulement une erreur de couper n coller ..) J'ai isolé une fonction dans l'un des modèles qui génère l'erreur (par exemple, si je sors cette fonction, le type de fonctionnement de contrôleur, à savoir il sort "bonjour"; Pourtant, le modèle n'est pas chargé, mais aucune erreur n'apparaît!) – Patrick

+0

Peu importe ce que vous définissez error_reporting, les erreurs ne seront toujours pas affichées à l'écran si display_errors est désactivé. –

+0

Merci, cela l'a résolu. J'ai mis display_errors sur et j'ai donc pu voir l'erreur et la réparer! – Patrick

1

Assurez-vous error_reporting dans index.php est réglé sur E_ALL et publiez votre code pour le modèle Dans la question.

Après avoir regardé à travers votre fonction, je pense qu'il est causé par $this->db->orderby("rand()"); Pour enregistrement actif cela devrait être $this->db->order_by('id', 'random');

Notez que orderby est obsolète, vous pouvez toujours l'utiliser pour l'instant, mais le nouveau nom de la fonction est order_by

-1

Pas sûr, mais il peut également être causé par "display_errors" de php est défini sur false. You can change it dans votre fichier php.ini.

+0

Voté pour avoir copié une partie de ma réponse. –

+0

p.g.l.hall, désolé je ne l'ai pas remarqué ... – DCrystal