- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Bạn có thể dễ dàng giới hạn hiển thị module hay tùy biến nội dung module cho trang hiện tại bằng cách thay đổi vị trí của nó trong Prestashop Admin. Tuy nhiên, nếu bạn muốn tự động sử lý động bằng code, mẹo nhỏ sau đây có thể áp dụng để tạo hook module mà cho phép giới hạn chỉ hiển thị cho trang cụ thể.
Biến ngữ cảnh php_self
Mỗi trang trong Prestashop có tên xác định, nó xác định trong từng controller tương ứng. Nó chứa trong thuộc tính id được gán cho thẻ body của trang đó chính là biến template $page_name
trong smarty. Tuy nhiên, nếu bạn cố gắng lấy tên page bởi biến này từ trong module, bạn có thể nhận lỗi cảnh báo vì biến đó chỉ tồn tại trong template smarty. Vậy có cách nào để bạn chỉ định sử dụng module cho page không? có trong module bạn gọi biến php_self
sẽ thay thế cho biến $page_name.
$this->context->controller->php_self
Nó thực sự hữu ích nếu bạn chỉ muốn giới hạn page khi sử dụng module. Nào chúng ta hãy làm ví dụ đơn giản dưới đây.
Giới hạn hiển thị module cho page
Ví dụ, chúng ta chỉ muốn hiển thị ở phần trên của trang với module nếu page hiện tại là trang chủ. Chúng ta sử dụng blicksearch. Trong trường hợp này, chúng ta sẽ chỉ cần sửa file blocksearch.php, tìm phương thức hookTop:
public function hookTop($params) { if (!$this->isCached('blocksearch-top.tpl', $this->getCacheId('blocksearch-top'))) { $this->calculHookCommon($params); $this->smarty->assign('blocksearch_type', 'top'); } return $this->display(__FILE__, 'blocksearch-top.tpl', $this->getCacheId('blocksearch-top')); }
và thêm đoạn sau vào trước nội dung hàm:
if('index' != $this->context->controller->php_self) return false;
Code trên nói với module rằng, Chúng ta chỉ hiển thị nội dung của hàm hookTop nếu URL hiện tại là trang chủ.
Sử dụng điều này kiểm tra page sẽ giúp bạn hiển thị những nội dung khác nhau và làm những công việc khác trong cùng một hook tùy thuộc vào trang hiện tại bạn muốn sử lý.
Bằng cách nào? đầu tiên bạn cần xác định page sẽ thay đổi nội dung, sử dụng var_dump($this->context->controller->php_self)
để lấy chính xác tên page. Sau đó sử dụng lệnh điều kiện rẽ nhánh và thêm các lệnh ở từng page bạn muốn.
if('index' == $this->context->controller->php_self) // Do something and display a template for the homepage else if('category' == $this->context->controller->php_self) // Do something and display a template if we are in the category page else // not in any of the 2 pages above return false: // don't display anything
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 Messenger
- Gmail
- Viber
- Skype