2016-10-11 2 views
0

J'ai commencé à créer un simple module 'produits populaires' pour Opencart 2.3 juste pour comprendre comment créer des modules dans Opencart. J'ai un problème où quand je clique pour installer le module de la section des extensions dans le backend je suis confronté à une page d'erreur interne, une partie de ma logique doit être incorrecte mais je ne suis pas tout à fait sûr où je vais mal. Je me demandais si quelqu'un serait capable de montrer où sont mes problèmes?Opencart Module Interal Error

Le module était destiné uniquement à être utilisé sur le thème par défaut. Je l'ai marqué quels fichiers sont ce au sommet commenté:

FICHIERS ADMIN:

ADMIN CONTRÔLEUR FICHIER

<!-- ADMIN CONTROLLER FILE --> 

<?php 
class ControllerModulePopular extends Controller { 
    private $error = array(); 

    public function index() { 
    $this->load->language('extension/module/popular'); 
    $this->document->setTitle($this->language->get('heading_title')); 
    $this->load->model('extension/module'); 

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { 
     if (!isset($this->request->get['module_id'])) { 
     $this->model_extension_module->addModule('popular', $this->request->post); 
     } else { 
     $this->model_extension_module->editModule($this->request->get['module_id'], $this->request->post); 
     } 

     $this->cache->delete('product'); 
     $this->session->data['success'] = $this->language->get('text_success'); 
     $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)); 
    } 

    $data['heading_title'] = $this->language->get('heading_title'); 
    $data['text_edit'] = $this->language->get('text_edit'); 
    $data['text_enabled'] = $this->language->get('text_enabled'); 
    $data['text_disabled'] = $this->language->get('text_disabled'); 

    $data['entry_name'] = $this->language->get('entry_name'); 
    $data['entry_limit'] = $this->language->get('entry_limit'); 
    $data['entry_width'] = $this->language->get('entry_width'); 
    $data['entry_height'] = $this->language->get('entry_height'); 
    $data['entry_status'] = $this->language->get('entry_status'); 

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

    if (isset($this->error['warning'])) { 
     $data['error_warning'] = $this->error['warning']; 
    } else { 
     $data['error_warning'] = ''; 
    } 

    if (isset($this->error['name'])) { 
     $data['error_name'] = $this->error['name']; 
    } else { 
     $data['error_name'] = ''; 
    } 

    if (isset($this->error['width'])) { 
     $data['error_width'] = $this->error['width']; 
    } else { 
     $data['error_width'] = ''; 
    } 

    if (isset($this->error['autoplay'])) { 
     $data['error_autoplay'] = $this->error['autoplay']; 
    } else { 
     $data['error_autoplay'] = ''; 
    } 

    if (isset($this->error['height'])) { 
     $data['error_height'] = $this->error['height']; 
    } else { 
     $data['error_height'] = ''; 
    } 


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

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

    $data['breadcrumbs'][] = array(
     'text' => $this->language->get('text_module'), 
     'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true) 
    ); 

    if (!isset($this->request->get['module_id'])) { 
     $data['breadcrumbs'][] = array(
     'text' => $this->language->get('heading_title'), 
     'href' => $this->url->link('extension/module/popular', 'token=' . $this->session->data['token'], true) 
    ); 
    } else { 
     $data['breadcrumbs'][] = array(
     'text' => $this->language->get('heading_title'), 
     'href' => $this->url->link('extension/module/popular', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], true) 
    ); 
    } 

    if (!isset($this->request->get['module_id'])) { 
     $data['action'] = $this->url->link('extension/module/popular', 'token=' . $this->session->data['token'], true); 
    } else { 
     $data['action'] = $this->url->link('extension/module/popular', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], true); 
    } 

    $data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true); 

    if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { 
     $module_info = $this->model_extension_module->getModule($this->request->get['module_id']); 
    } 

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

    if (isset($this->request->post['name'])) { 
     $data['name'] = $this->request->post['name']; 
    } elseif (!empty($module_info)) { 
     $data['name'] = $module_info['name']; 
    } else { 
     $data['name'] = ''; 
    } 

    $this->load->model('catalog/product'); 

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

    if (isset($this->request->post['product'])) { 
     $products = $this->request->post['product']; 
    } elseif (!empty($module_info)) { 
     $products = $module_info['product']; 
    } else { 
     $products = array(); 
    } 

    foreach ($products as $product_id) { 
     $product_info = $this->model_catalog_product->getProduct($product_id); 

     if ($product_info) { 
     $data['products'][] = array(
      'product_id' => $product_info['product_id'], 
      'name'  => $product_info['name'] 
     ); 
     } 
    } 

    if (isset($this->request->post['limit'])) { 
     $data['limit'] = $this->request->post['limit']; 
    } elseif (!empty($module_info)) { 
     $data['limit'] = $module_info['limit']; 
    } else { 
     $data['limit'] = 5; 
    } 

    if (isset($this->request->post['width'])) { 
     $data['width'] = $this->request->post['width']; 
    } elseif (!empty($module_info)) { 
     $data['width'] = $module_info['width']; 
    } else { 
     $data['width'] = 360; 
    } 

    if (isset($this->request->post['height'])) { 
     $data['height'] = $this->request->post['height']; 
    } elseif (!empty($module_info)) { 
     $data['height'] = $module_info['height']; 
    } else { 
     $data['height'] = 360; 
    } 

    if (isset($this->request->post['autoplay'])) { 
     $data['autoplay'] = $this->request->post['autoplay']; 
    } elseif (!empty($module_info)) { 
     $data['autoplay'] = $module_info['autoplay']; 
    } else { 
     $data['autoplay'] = 5000; 
    } 

    if (isset($this->request->post['status'])) { 
     $data['status'] = $this->request->post['status']; 
    } elseif (!empty($module_info)) { 
     $data['status'] = $module_info['status']; 
    } else { 
     $data['status'] = ''; 
    } 



    $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('extension/module/popular.tpl', $data)); 
    } 

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

    if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 64)) { 
     $this->error['name'] = $this->language->get('error_name'); 
    } 

    if (!$this->request->post['width']) { 
     $this->error['width'] = $this->language->get('error_width'); 
    } 

    if (!$this->request->post['height']) { 
     $this->error['height'] = $this->language->get('error_height'); 
    } 


    return !$this->error; 
    } 
} 

ADMIN LANGUE FICHIER

<!-- ADMIN LANGUAGE FILE --> 

<?php 
// Heading 
$_['heading_title'] = 'Popular Products'; 

// Text 
$_['text_module']  = 'Modules'; 
$_['text_success']  = 'Success: You have modified module "Popular Products"!'; 
$_['text_edit']  = 'Edit Popular Products Module'; 

// Entry 
$_['entry_name']  = 'Module Name'; 
$_['entry_limit']  = 'Limit'; 
$_['entry_width']  = 'Width'; 
$_['entry_height']  = 'Height'; 
$_['entry_status']  = 'Status'; 

// Error 
$_['error_permission'] = 'Warning: You do not have permission to modify module "Popular Products"!'; 
$_['error_width']  = 'Width required!'; 
$_['error_height']  = 'Height required!'; 

ADMIN VIEW FICHIER

<!-- ADMIN VIEW FILE --> 

<?php echo $header; ?><?php echo $column_left; ?> 
<div id="content"> 
    <div class="page-header"> 
    <div class="container-fluid"> 
     <div class="pull-right"> 
     <button type="submit" form="form-popular" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button> 
     <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div> 
     <h1><?php echo $heading_title; ?></h1> 
     <ul class="breadcrumb"> 
     <?php foreach ($breadcrumbs as $breadcrumb) { ?> 
     <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> 
     <?php } ?> 
     </ul> 
    </div> 
    </div> 
    <div class="container-fluid"> 
    <?php if ($error_warning) { ?> 
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?> 
     <button type="button" class="close" data-dismiss="alert">&times;</button> 
    </div> 
    <?php } ?> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
     <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3> 
     </div> 
     <div class="panel-body"> 
     <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-popular" class="form-horizontal"> 
      <div class="form-group"> 
      <label class="col-sm-2 control-label" for="input-name"><?php echo $entry_name; ?></label> 
      <div class="col-sm-10"> 
       <input type="text" name="name" value="<?php echo $name; ?>" placeholder="<?php echo $entry_name; ?>" id="input-name" class="form-control" /> 
       <?php if ($error_name) { ?> 
       <div class="text-danger"><?php echo $error_name; ?></div> 
       <?php } ?> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label class="col-sm-2 control-label" for="input-limit"><?php echo $entry_limit; ?></label> 
      <div class="col-sm-10"> 
       <input type="text" name="limit" value="<?php echo $limit; ?>" placeholder="<?php echo $entry_limit; ?>" id="input-limit" class="form-control" /> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label class="col-sm-2 control-label" for="input-width"><?php echo $entry_width; ?></label> 
      <div class="col-sm-10"> 
       <input type="text" name="width" value="<?php echo $width; ?>" placeholder="<?php echo $entry_width; ?>" id="input-width" class="form-control" /> 
       <?php if ($error_width) { ?> 
       <div class="text-danger"><?php echo $error_width; ?></div> 
       <?php } ?> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label class="col-sm-2 control-label" for="input-height"><?php echo $entry_height; ?></label> 
      <div class="col-sm-10"> 
       <input type="text" name="height" value="<?php echo $height; ?>" placeholder="<?php echo $entry_height; ?>" id="input-height" class="form-control" /> 
       <?php if ($error_height) { ?> 
       <div class="text-danger"><?php echo $error_height; ?></div> 
       <?php } ?> 
      </div> 
      </div> 
      <div class="form-group"> 
      <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label> 
      <div class="col-sm-10"> 
       <select name="status" id="input-status" class="form-control"> 
       <?php if ($status) { ?> 
       <option value="1" selected="selected"><?php echo $text_enabled; ?></option> 
       <option value="0"><?php echo $text_disabled; ?></option> 
       <?php } else { ?> 
       <option value="1"><?php echo $text_enabled; ?></option> 
       <option value="0" selected="selected"><?php echo $text_disabled; ?></option> 
       <?php } ?> 
       </select> 
      </div> 
      </div> 
     </form> 
     </div> 
    </div> 
    </div> 
</div> 
<?php echo $footer; ?> 

FICHIERS CATALOGUE:

CONTRÔLEUR FICHIER:

<!-- CATALOG CONTROLLER FILE --> 

<?php 
class ControllerModulePopular extends Controller { 
    public function index($setting) { 
    $this->load->language('extension/module/popular'); 

    $data['heading_title'] = $this->language->get('heading_title'); 
    $data['text_tax']  = $this->language->get('text_tax'); 
    $data['button_cart']  = $this->language->get('button_cart'); 
    $data['button_wishlist'] = $this->language->get('button_wishlist'); 
    $data['button_compare'] = $this->language->get('button_compare'); 

    $this->load->model('catalog/product'); 
    $this->load->model('tool/image'); 

    $data['products'] = array(); 
    $product_data  = array(); 

    if(isset($setting['limit']) && $setting['limit']!=''){ 
     $setting['limit'] = $setting['limit']; 
    } 
    else{ 
     $setting['limit'] = 4; 
    } 


    $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.viewed DESC LIMIT " . (int)$setting['limit']); 



    foreach ($query->rows as $result) { 
     $product_data[$result['product_id']] = $this->model_catalog_product->getProduct($result['product_id']); 
    } 

    $results = $product_data; 

    if ($results) { 
     foreach ($results as $result) { 
     if ($result['image']) { 
      $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']); 
     } else { 
      $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']); 
     } 


     if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { 
      $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); 
     } else { 
      $price = false; 
     } 

     if ((float)$result['special']) { 
      $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); 
     } else { 
      $special = false; 
     } 

     if ($this->config->get('config_tax')) { 
      $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']); 
     } else { 
      $tax = false; 
     } 


     if ($this->config->get('config_review_status')) { 
      $rating = $result['rating']; 
     } else { 
      $rating = false; 
     } 

     $data['products'][] = array(
      'product_id' => $result['product_id'], 
      'thumb'  => $image, 
      'name'   => $result['name'], 
      'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', 
      'price'  => $price, 
      'special'  => $special, 
      'tax'   => $tax, 
      'rating'  => $rating, 
      'href'   => $this->url->link('product/product', 'product_id=' . $result['product_id']), 
     ); 
     } 

     if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/extension/module/popular.tpl')) { 
     return $this->load->view($this->config->get('config_template') . '/template/extension/module/popular.tpl', $data); 
     } else { 
     return $this->load->view('default/template/extension/module/popular.tpl', $data); 
     } 
    } 
    } 
} 

CATALOGUE LANGUE FICHIER

<!-- LANGUAGE CONTROLLER FILE --> 

<?php 
// Heading 
$_['heading_title'] = 'Popular Products'; 

// Text 
$_['text_reviews'] = 'Based on %s reviews.'; 

// Tax 
$_['text_tax']  = 'Ex Tax:'; 

CATALOGUE FICHIER VOIR

<!-- CATALOG VIEW FILE --> 

<h3><?php echo $heading_title; ?></h3> 
<div class="row"> 
    <?php foreach ($products as $product) { ?> 
    <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12"> 
    <div class="product-thumb transition"> 
     <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>" class="img-responsive" /></a></div> 
     <div class="caption"> 
     <h4><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h4> 
     <p><?php echo $product['description']; ?></p> 
     <?php if ($product['rating']) { ?> 
     <div class="rating"> 
      <?php for ($i = 1; $i <= 5; $i++) { ?> 
      <?php if ($product['rating'] < $i) { ?> 
      <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> 
      <?php } else { ?> 
      <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span> 
      <?php } ?> 
      <?php } ?> 
     </div> 
     <?php } ?> 
     <?php if ($product['price']) { ?> 
     <p class="price"> 
      <?php if (!$product['special']) { ?> 
      <?php echo $product['price']; ?> 
      <?php } else { ?> 
      <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> 
      <?php } ?> 
      <?php if ($product['tax']) { ?> 
      <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> 
      <?php } ?> 
     </p> 
     <?php } ?> 
     </div> 
     <div class="button-group"> 
     <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button> 
     <button type="button" data-toggle="tooltip" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-heart"></i></button> 
     <button type="button" data-toggle="tooltip" title="<?php echo $button_compare; ?>" onclick="compare.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-exchange"></i></button> 
     </div> 
    </div> 
    </div> 
    <?php } ?> 
</div> 

je pense que cela couvre tout. Je suis sûr que j'ai les emplacements de fichiers correctement définis car je sais que ceux-ci ont changé depuis la 2.0.

Toute aide ici serait grandement appréciée.

Merci.

Répondre

2

Ici, vous avez écrit une mauvaise classe de contrôleur dans les deux fichiers du contrôleur. Vous avez oublié de mentionner "Extension" là.

Recherchez et remplacez le code suivant dans les deux fichiers de contrôleur (ADMIN & CATALOG). puis vérifiez-le.

Recherche:

class ControllerModulePopular extends Controller { 

Remplacer:

class ControllerExtensionModulePopular extends Controller { 
+0

Légende. C'est un manque d'oeil-aigle de ma part. Je vous remercie. –