Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Prestashop » Hiển thị module template cho trang Prestashop

Hiển thị module template cho trang Prestashop

Thứ Bảy, 07/02/2015 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Nếu bạn đã từng gặp vấn đề mất template sau khi nâng cấp Prestashop, bài viết này mình sẽ giúp bạn khắc phục điều đó với giải pháp hiển thị module template cho trang Prestashopm, bạn sẽ không sợ thay thế file hệ thống sau khi nâng cấp mà vẫn dữ được những thay đổi của bạn.
Download Project Files
Tuần trước, mình có sử dụng hook bằng cách sửa đổi displayOverrideTemplate mà có được đề cập trong tài liệu phát triển từ Prestashop nhưng chúng ta cần phải kế thừa hoặc sửa đổi template hiện tại mà không sợ bị mất dữ liệu của bạn khi nâng cấp phiên bản mới.

Nó được bổ xung ở phiên Prestashop 1.5 trong file FrontController.php:

/**
 * Returns the template corresponding to the current page.
 * By default this method return false but could easily be overridden in a specific controller
 *
* @since 1.5
* @return bool
*/
public function getOverrideTemplate()
{
    return Hook::exec('DisplayOverrideTemplate', array('controller' => $this));
}

Đúng vậy, bạn sẽ hiểu sức mạnh của hooks này để làm gì nhé.

Ví dụ – Override trang category

Trong ví dụ này, chúng ta sẽ sủ dụng một module đơn giản để override trang category. Tải file mẫu project ở trên và đặt thư mục ‘psoverridetemplatedemo’ vào trong folder ‘modules/’ của Prestashop. Thao tác vừa rồi rất đơn giản là bạn tạo một module trống;. Chúng ta sẽ thêm một vài thứ ở đây như phương thức install và đăng ký hook của chúng ta.

public function install()
{
    if (!parent::install() ||
        !$this->registerHook('displayOverrideTemplate')
        )
        return false;
    return true;
}

Cài đặt nó, sau đó để nó có thể hoạt động thực sự bạn sẽ cần thêm một vài thứ mà bạn kiểm soát được ví dụ mình sử dụng lệnh ngắt trang như thế này:

public function hookDisplayOverrideTemplate($params)
{
    die('here');
    // return dirname(__FILE__).'/views/templates/hook/skeleton.tpl';
}

Nó sẽ xóa mọi page của store và hiển thị chữ “here” thay vào đó. Nếu không phải vậy bạn hãy kiểm tra lại phương thức registerHook.
Giá trị nào được trả về từ hook?
Không phải template như bạn có thể đang nghĩ tới và chúng ta sẽ include file smarty’ template. Chúng ta cần trả về đường dẫn tới file .tpl mà chúng ta sử dụng. CHúng ta có một file trong thư mục gốc của module (psoverridetemplatedemo.tpl).

public function hookDisplayOverrideTemplate($params)
{
    return dirname(__FILE__).'/psoverridetemplatedemo.tpl';
}

Lưu và load lại trang. Bây giờ bạn thấy mỗi trang của Prestashop có thêm cột trống ở giữa. Tại sao như vậy? Bởi vì trong file template chưa có nội dung gì. Bạn có thể tự kiểm tra bằng cách thử thêm một vài nội dung vào file và bạn sẽ thấy nó xuất hiện ở mọi trang. Vậy mình muốn chỉ hiển thị ở một số template thì làm thế nào? Trong bài viết trước hướng dẫn cách sử dụng Module hooks cho từng page trong Prestashop. Tôi đã chỉ cho bạn cách lấy page sử dụng biến php_self:

$this->context->controller->php_self

Trong lớp FrontController chúng ta có thể lấy đối tượng controller hiện tại thông qua tham số $params truy cập vào biến trên giống như sau:

$params['controller']->php_self;

Khá dễ dàng đúng không nào, giờ bạn có thể tùy biến hiển thị module với trang category rồi:

public function hookDisplayOverrideTemplate($params)
{
    if ($params['controller']->php_self == 'category')
        return dirname(__FILE__).'/psoverridetemplatedemo.tpl';
}

Lưu và load lại trang nội dung template chỉ được thay thế khi bạn truy cập vào trang category, còn những pages khác thì sao? Để lấy tên các page khác chỉ đơn giản echo nội dung của biến php_self là bạn sẽ thấy ngay:

public function hookDisplayOverrideTemplate($params)
{
    var_dump($params['controller']->php_self);
    //if ($params['controller']->php_self == 'category')
    //  return dirname(__FILE__).'/psoverridetemplatedemo.tpl';
}

Tên page sẽ hiển thị ở trên đầu trang. Nhưng chú ý một vài page có thể không gán biến php_self và code php sẽ bị lỗi, nên để chắc bạn bạn cần kiểm tra biến đó có tồn tại hay không.

public function hookDisplayOverrideTemplate($params)
{
    if (isset($params['controller']->php_self) && $params['controller']->php_self == 'category')
        return dirname(__FILE__).'/psoverridetemplatedemo.tpl';
}

Như vậy với cách này bạn có thể sử dụng riêng template của module cho từng trang trong Prestashop. Chúc bạn thành công.

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Prestashop Tìm kiếm: override, template

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.