2015-07-27 1 views
0

J'essaie de faire une forme facile dans OpenCart 2.0.1.1 qui stocke les valeurs dans la base de données.Modifier la valeur de la base de données via l'administrateur personnalisé, Opencart 2.0

J'ai fait une page d'admin personnalisée où j'aurai des extensions que je fais moi-même. C'était la partie facile.

J'ai fait la forme et la colonne dans la base de données, cela fonctionne très bien, je reçois les valeurs et il est affiché dans la zone de texte à l'intérieur de l'administrateur. Mais le problème est quand j'essaie d'éditer les textes. Quand je change la valeur de la zone de texte et que j'applique la sauvegarder, elle disparaît! et la colonne dans la base de données a disparu.

Mon fichier contrôleur:

admin/contrôleur/Ekomet/design.php

<?phpclass ControllerEkometdesign extends Controller { 
private $error = array(); 

public function index() { 
    $this->load->language('ekomet/design'); 

    $this->document->setTitle($this->language->get('heading_title')); 

    $this->load->model('setting/setting'); 

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 
     $this->model_setting_setting->editSetting('design_name', $this->request->post); 
     } 

    $data['button_save'] = $this->language->get('button_save'); 
    $data['button_cancel'] = $this->language->get('button_cancel'); 

    $data['tab_general'] = $this->language->get('tab_general'); 

    $data['breadcrumbs'] = array(); 

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('text_home'), 
     'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL') 
    ); 

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('text_stores'), 
     'href' => $this->url->link('ekomet/design', 'token=' . $this->session->data['token'], 'SSL') 
    ); 

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('heading_title'), 
     'href' => $this->url->link('ekomet/design', 'token=' . $this->session->data['token'], 'SSL') 
    ); 

    if (isset($this->session->data['success'])) { 
     $data['success'] = $this->session->data['success']; 

     unset($this->session->data['success']); 
    } else { 
     $data['success'] = ''; 
    } 

    $data['action'] = $this->url->link('ekomet/design', 'token=' . $this->session->data['token'], 'SSL'); 

    $data['cancel'] = $this->url->link('ekomet/design', 'token=' . $this->session->data['token'], 'SSL'); 

    $data['token'] = $this->session->data['token']; 

    $settings = $this->model_setting_setting->getSetting('design_name'); 

    if (isset($this->request->post['config_ekomet_name'])) { 
     $data['config_ekomet_name'] = $this->request->post['config_ekomet_name']; 
    } else { 
     $data['config_ekomet_name'] = $this->config->get('config_ekomet_name'); 
    } 

    $data['header'] = $this->load->controller('common/header'); 
    $data['column_left'] = $this->load->controller('common/column_left'); 
    $data['footer'] = $this->load->controller('common/footer'); 

    $this->response->setOutput($this->load->view('ekomet/design.tpl', $data)); 
} 

protected function validate() { 
    if (!$this->user->hasPermission('modify', 'ekomet/design')) { 
     $this->error['warning'] = $this->language->get('error_permission'); 
    } 

    if ($this->error && !isset($this->error['warning'])) { 
     $this->error['warning'] = $this->language->get('error_warning'); 
    } 

    return !$this->error; 
}} 

Je l'ai regardé à travers le contrôleur setting.php et je ne veux utiliser la table de réglage dans ma base de données stocker mes valeurs (pas besoin d'inventer la roue à nouveau). Comme je l'ai dit ci-dessus. Il transmet les valeurs de la base de données. Mais je ne peux pas le mettre à jour.

Mon fichier modèle:

admin/view/template/Ekomet/design.tpl

  <div class="form-group required"> 
      <label class="col-sm-2 control-label" for="input-ekomet-name">E-komet namn</label> 
      <div class="col-sm-10"> 
       <input type="text" name="config_ekomet_name" value="<?php echo $config_ekomet_name; ?>" placeholder="<?php echo $entry_ekomet_name; ?>" id="input-ekomet-name" class="form-control" /> 
       <?php if ($error_ekomet_name) { ?> 
       <div class="text-danger"><?php echo $error_ekomet_name; ?></div> 
       <?php } ?> 
      </div> 
      </div> 

Je ne l'ai pas fait mon propre fichier modèle parce que je veux utiliser celui qui est connecté à la mise en . Dois-je créer mon propre modèle pour que cela fonctionne?

Répondre

2

Vous utilisez mauvais préfixe pour le code et champ clé

Assurez-vous que si code = abc puis key = abc_def

Remplacer

$this->model_setting_setting->editSetting('design_name', $this->request->post); 

Avec

$this->model_setting_setting->editSetting('config', $this->request->post); 

Alors que ce sera code = config et key = config_ekomet_name

+0

Salut mec, merci pour votre réponse rapide, j'ai essayé de faire ce que vous avez dit. Quand j'ai essayé de le faire avec une colonne prédéfinie dans la base de données ça a bien fonctionné comme avant, mais dès que j'ai sauvegardé et changé la valeur, j'ai effacé toutes mes clés "config" dans le tableau des paramètres. fopen (/ home/u/u6144172/www/system/logs /): impossible d'ouvrir le flux: est un répertoire dans /home/u/u6144172/www/system/library/log.php à la ligne 6). J'ai aussi essayé sans colonne prédéfinie, même résultat. Savez-vous ce que je manque? –

+0

Peut dire que cela a fonctionné comme un charme pour ma colonne, mais il a supprimé toutes les autres colonnes de config hehe. –

+0

Je suis désolé mec (je me sens stupide maintenant). Je viens de renommer le code + clé à autre chose et cela fonctionne parfaitement maintenant, merci beaucoup pour l'aide! –