Powered by Blogger.

Thêm position vào theme OpenCart 1.5.1.1

Nhiều bạn thắc mắc tại sao opencart không có nhiều vị trí để đặt các module trong theme như joomla hay đơn giản chỉ cần nhiều vị trí (position) hơn so với  mặc định  chỉ có "content top", "content bottom", "column right", "column left". Bài viết này sẽ hướng dẫn và giải thích làm như thế nào để có nhiều position hơn.
Những gì bạn cần biết là:

- Tôi nên bắt đầu bằng cách nói rằng tôi không phải là một chuyên gia OpenCart. Như vậy, tôi không chắc chắn điều này làm việc với các phiên bản opencart cũ hơn 1.5.1.1.
- Những thay đổi trong hướng dẫn này được thực hiện để thay đổi nội dung các tập tin mà có thể bị ghi đè khi các bạn nâng cấp hoặc cập nhật lên phiên bản opencart mới trong tương lai.

Bắt đầu thực hiện:
Đầu tiên các bạn tải về và cài đặt module miễn phí Hildebrando Youtube OpenCart v1.5.1.1. Tôi đã chọn mod này chủ yếu là bởi vì nó đã được đánh giá cao và không liên quan quá nhiều đến các chức năng trong back-end. Tôi giả sử các bạn có thể thay đổi bất kỳ thành phần nào tương tự.
1. Thêm position trong admin (administration)
  • Trước tiên, các bạn cần phải sửa tập tin ngôn ngữ của module trong /admin/language/english/module/s_youtube.phpvà thêm vào position mới của bạn. Đối với hướng dẫn này chúng ta sẽ có thêm một position mới được gọi là: Content Middle.
$_['text_content_middle'] = 'Content Middle';

  • Thứ hai, các bạn cần phải sửa tệp tin admin template của module trong /admin/view/template/module/s_youtube.tpl và thêm một "position".
- Thêm đoạn code sau:
<?php if ($module['position'] == 'content_middle') { ?>
<option value="content_middle" selected="selected"><?php echo $text_content_middle; ?></option>
<?php } else { ?>
<option value="content_middle"><?php echo $text_content_middle; ?></option>
<?php } ?>

vào dưới dòng:
<td class="left"><select name="s_youtube_module[<?php echo $module_row; ?>][position]">

- Thêm dòng:
html += '      <option value="content_middle"><?php echo $text_content_middle; ?></option>';

vào sau dòng:
html += '      <option value="content_bottom"><?php echo $text_content_bottom; ?></option>';

  • Thứ ba, bạn cần phải sửa tập tin controller của module trong /admin/controller/module/ s_youtube.php và thêm một dòng mới bất cứ nơi nào xung quanh như 35.
Thêm dòng:
$this->data['text_content_middle'] = $this->language->get('text_content_middle');

vào sau dòng:
$this->data['text_content_bottom'] = $this->language->get('text_content_bottom');

Bây giờ các bạn sẽ nhìn thấy vị trí mới trong phần cài đặt module của bạn. Ngoài ra các bạn cần chắc chắn rằng layout của module được thiết lập là "Home".

2. Thêm position vào theme của bạn
  • Trước tiên, các bạn phải thêm vị trí các mảng nằm trong /catalog/controller/common/home.php
Thêm dòng:
'common/content_middle',

vào sau dòng:
'common/content_bottom',

  • Thứ hai, các bạn cần phải tạo ra các tập tin PHP tương ứng trong /catalog/controller/common/ (ví dụ: "content_middle.php"). Thêm đoạn code sau, chú ý đến các dòng 2, 50, 79, 80, và 82) sẽ cần để phản ánh position của bạn:
<?php
class ControllerCommonHomeOne extends Controller {
    public function index() {
        $this->load->model('design/layout');
        $this->load->model('catalog/category');
        $this->load->model('catalog/product');
        $this->load->model('catalog/information');
        if (isset($this->request->get['route'])) {
            $route = $this->request->get['route'];
        } else {
            $route = 'common/home';
        }
        $layout_id = 0;
        if (substr($route, 0, 16) == 'product/category' && isset($this->request->get['path'])) {
            $path = explode('_', (string)$this->request->get['path']);
            $layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
        }
        if (substr($route, 0, 15) == 'product/product' && isset($this->request->get['product_id'])) {
            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
        }
        if (substr($route, 0, 23) == 'information/information' && isset($this->request->get['information_id'])) {
            $layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
        }
        if (!$layout_id) {
            $layout_id = $this->model_design_layout->getLayout($route);
        }
        if (!$layout_id) {
            $layout_id = $this->config->get('config_layout_id');
        }
        $module_data = array();
        $this->load->model('setting/extension');
        $extensions = $this->model_setting_extension->getExtensions('module');
        foreach ($extensions as $extension) {
            $modules = $this->config->get($extension['code'] . '_module');
            if ($modules) {
                foreach ($modules as $module) {
                    if ($module['layout_id'] == $layout_id && $module['position'] == 'home_one' && $module['status']) {
                        $module_data[] = array(
                            'code'       => $extension['code'],
                            'setting'    => $module,
                            'sort_order' => $module['sort_order']
                        );
                    }
                }
            }
        }
        $sort_order = array();
        foreach ($module_data as $key => $value) {
            $sort_order[$key] = $value['sort_order'];
        }
        array_multisort($sort_order, SORT_ASC, $module_data);
        $this->data['modules'] = array();
        foreach ($module_data as $module) {
            $module = $this->getChild('module/' . $module['code'], $module['setting']);
            if ($module) {
                $this->data['modules'][] = $module;
            }
        }
        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/home_one.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/common/home_one.tpl';
        } else {
            $this->template = 'default/template/common/home_one.tpl';
        }
        $this->render();
    }
}
?>

  • Thứ ba, tạo ra các tập tin tương ứng trong /view/theme/your-theme/template/common/ (ví dụ: "content_middle.tpl" TPL) . Thêm đoạn code sau:
<?php foreach ($modules as $module) { ?>
<?php echo $module; ?>
<?php } ?>

  • Bây giờ, các bạn có thể gọi chèn position của bạn vào bất cứ nơi nào trong tập tin home.tpl theme của bạn bằng cách gọi
<?php echo $content_middle; ?>
    Blogger Comment
    Facebook Comment