2016-10-11 45 views
0

我已经开始创造Opencart的2.3一个简单的“流行产品”模块只是为了获得与如何在Opencart的创建模块交手。Opencart的模块INTERAL错误

我有一个问题,当我点击安装在我面对一个内部错误页面的后端扩展部分的模块,我的一些逻辑必须是不正确的,但我没有那么肯定我哪里错了。我想知道是否有人能够指出我的问题在哪里?

该模块的目的只是要在默认的主题。我已经标记哪些文件顶部注释掉什么:

ADMIN FILES:

ADMIN控制器的文件

<!-- 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语言文件

<!-- 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浏览文件

<!-- 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; ?> 

个目录文件:

控制器的文件:

<!-- 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); 
     } 
    } 
    } 
} 

目录语言文件

<!-- LANGUAGE CONTROLLER FILE --> 

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

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

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

目录视图文件

<!-- 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> 

我认为,涵盖一切。我确定我的文件位置设置正确,因为我知道这些文件位置自2.0以来已更改。

在这里的任何帮助将不胜感激。

谢谢。

回答

2

在这里,你必须在这两个控制器文件写错了Controller类。你忘了在那里提到“扩展”。

查找并在两者(ADMIN &目录)控制文件替换下面的代码。然后检查它。

查找:

class ControllerModulePopular extends Controller { 

替换:

class ControllerExtensionModulePopular extends Controller { 
+0

传奇。我的目标是缺乏鹰眼。谢谢。 –