2010-06-22 7 views
1

Je travaille sur ma deuxième application CI. J'ai créé quelques méthodes CRUD simples dans mon contrôleur. Mon client a demandé que chaque enregistrement inclue une image. J'ai cherché des forums et d'autres ressources pour l'aide mais n'ai pas eu beaucoup de chance.Codeigniter - Comment ajouter des images à mes méthodes CRUD?

J'ai réussi à télécharger des fichiers dans un répertoire en utilisant la classe de téléchargement de fichiers, mais mon problème est de savoir comment associer le/les fichier (s) téléchargé (s) à l'enregistrement correspondant.

Voici les parties pertinentes de mon MVC .., toute aide/point dans la bonne direction serait appréciée.

View - admin/locationEdit.php

<form method="post" action="<?php echo $action; ?>"> 
     <div class="data"> 
     <table> 
      <tr> 
       <td width="30%">ID</td> 
       <td><input type="text" name="id" disabled="disable" class="text" value="<?php echo $this->validation->id; ?>"/></td> 
       <input type="hidden" name="id" value="<?php echo $this->validation->id; ?>"/> 
      </tr> 
      <tr> 
       <td valign="top">Name<span style="color:red;">*</span></td> 
       <td><input type="text" name="name" class="text" value="<?php echo $this->validation->name; ?>"/> 
       <?php echo $this->validation->name_error; ?></td> 
      </tr> 
      <tr> 
       <td valign="top">Address<span style="color:red;">*</span></td> 
       <td><input type="text" name="address" class="text" value="<?php echo $this->validation->address; ?>"/> 
        <?php echo $this->validation->address_error; ?></td> 
      </tr> 

      <tr> 
       <td>&nbsp;</td> 
       <td><input type="submit" value="Save"/></td> 
      </tr> 
     </table> 
     </div> 
     </form> 

Controller - location.php

function add(){ 
     // set validation properties 
     $this->_set_fields(); 

     // set common properties 
     $data['title'] = 'Add new location'; 
     $data['message'] = ''; 
     $data['action'] = site_url('admin/location/addLocation'); 
     $data['link_back'] = anchor('admin/location/index/','Back to list of locations',array('class'=>'back')); 



      // Write to $title 
     $this->template->write('title', 'Admin - Add New Location!'); 
    // Write to $sidebar 
     $this->template->write_view('content', 'admin/locationEdit', $data); 
     // Render the template 
     $this->template->render(); 

    } 

function addLocation(){ 
     // set common properties 
     $data['title'] = 'Add new location'; 
     $data['action'] = site_url('admin/location/addLocation'); 
     $data['link_back'] = anchor('admin/location/index/','Back to list of locations',array('class'=>'back')); 

     // set validation properties 
     $this->_set_fields(); 
     $this->_set_rules(); 

     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size'] = '100'; 
     $config['max_width'] = '1024'; 
     $config['max_height'] = '768'; 

     $path_to_uploads='./uploads'; 
      $config['upload_path'] = $path_to_uploads; 
      $this->load->library('upload', $config); 

      $upload_data=$this->upload->data(); 
      $file_name=$upload_data['file_name']; 
      $full_file_path = $path_to_uploads.'/'.$file_name; 

     // run validation 
     if ($this->validation->run() == FALSE){ 
      $data['message'] = ''; 
     }else{ 


      // save data 
      $location = array('name' => $this->input->post('name'), 
          'address' => $this->input->post('address'), 
          'image_url' => $full_file_path); 
      $id = $this->locationModel->save($location); 

      // set form input name="id" 
      $this->validation->id = $id; 

      // set user message 
      $data['message'] = '<div class="success">add new location success</div>'; 
     } 

     // Write to $title 
     $this->template->write('title', 'Admin - Add New Location!'); 
    // Write to $sidebar 
     $this->template->write_view('content', 'admin/locationEdit', $data); 
     // Render the template 
     $this->template->render(); 
    } 

Répondre

2

Au sein de votre fonction de téléchargement, obtenir le chemin du fichier téléchargé:

$config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = '100'; 
    $config['max_width'] = '1024'; 
    $config['max_height'] = '768'; 
    $path_to_uploads='./uploads'; 
    $config['upload_path'] = $path_to_uploads; 
    $this->load->library('upload', $config); 
    //add this 
    $this->upload->initialize($config); 
    if (!$this->upload->do_upload()){ 
     $error = $this->upload->display_errors(); 
     echo "<script>alert($error);</script>"; 
    }else{ 
     $upload_data=$this->upload->data(); 
     $file_name=$upload_data['file_name']; 
     $full_file_path = $path_to_uploads.'/'.$file_name; 
    } 

alors vous pouvez retourner $full_file_path à la méthode qui l'a appelé et l'insérer dans le db, ou juste inse rt directement.

+0

Merci pour la réponse rapide stormdrain, cependant, je suis coincé au dernier obstacle. Quand j'insère l'enregistrement le contenu des champs lisent simplement ./uploads/ et quand je vérifie le dossier de téléchargement il n'y a rien là? Qu'est-ce que cela suggère? Merci pour votre aide Dan –

+0

Il suggère que le téléchargement échoue pour une raison quelconque. Pouvez-vous modifier votre question ci-dessus pour inclure le code que vous utilisez pour traiter le téléchargement? Lorsque vous utilisez la classe de téléchargement de fichiers, si une erreur survient pour une raison quelconque, elle vous indiquera généralement pourquoi. Avez-vous défini correctement les autorisations sur le dossier de téléchargement (par exemple, chmod 777)? – stormdrain

+0

Il s'agit d'une installation locale sur un mac, j'ai changé les propriétés à lire/écrire pour tous dans le dossier des téléchargements. J'ai ajouté mon nouveau code ci-dessus, pouvez-vous voir ce que je fais mal? Merci, Dan –

Questions connexes