Cách lưu dữ liệu tùy chỉnh trong bộ nhớ cache trong Magento 2

wsoftpro
9/8/2019 4:27Phản hồi: 0
Cách lưu dữ liệu tùy chỉnh trong bộ nhớ cache trong Magento 2
Gần đây tôi đang làm việc để hiển thị hình ảnh trên một mẫu tùy chỉnh. Chính xác hơn, tôi đã tạo một widget để chèn ảnh đóng vai trò là trình tải ảnh. Và theo mặc định, quản trị viên phải nhập một số tham số (chiều rộng, chiều cao, alt) và nếu anh ta quyết định, anh ta có thể tải lên một hình ảnh khác.
Tham khảo để tạo một hướng dẫn widget có thể được nhìn thấy Wsoftpro . Phần thú vị của tác vụ là khi tiện ích được lưu trên một số trang Magento và được tải vào tức là ‘Giới thiệu’, hình ảnh hoặc hình ảnh và các giá trị tham số phải được lưu trong bộ đệm.
Vì vậy, khi bạn truy cập ‘Giới thiệu’ vào một lần khác, nội dung hình ảnh sẽ được phục vụ ngay lập tức.
Trong bài viết này, chúng tôi sẽ lưu dữ liệu tùy chỉnh đơn giản bên trong bộ đệm và tải nó khi Magento kết xuất lại mẫu.

Điều kiện tiên quyết
Trước hết, bạn sẽ cần cài đặt Magento 2 Development hiện là phiên bản 2.2 trở lên. Bởi vì việc triển khai giao diện mà chúng tôi sẽ sử dụng để tuần tự hóa dữ liệu (chuyển đổi thành chuỗi) không có sẵn trong các phiên bản dưới đây 2.2. Magento sẽ sử dụng một số ưu đãi khác. Vì vậy, đừng quên kiểm tra Cách cài đặt Magento 2 của chúng tôi và Cách tạo mô-đun Magento 2 cơ bản mà tôi rất khuyến khích.

Tạo khối và nhận dữ liệu
Với mục đích học tập, chúng ta sẽ cần một tệp xml bố cục. Đừng quên thay đổi không gian tên và đường dẫn mẫu bằng tên nhà cung cấp, mô-đun và tên tệp của bạn.

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block class="Inchoo\LearnCaching\Block\Cacher"
name="form"
template="Inchoo_LearnCaching::example.phtml"/>
</referenceContainer>
</body>
</page>
Tất nhiên, nếu khối của bạn sử dụng phép nội xạ phụ thuộc để chèn nhiều hơn một đối tượng bổ sung, thì tôi khuyên bạn nên tạo mô hình xem.
Bây giờ, chúng ta sẽ cần một lớp khối sẽ lưu / tải dữ liệu bên trong bộ đệm. Tất nhiên, việc gọi hàm tạo cha mẹ và chèn $context, là điều bắt buộc. Một đối tượng cần thiết khác bên trong constructor là SerializerInterface. Magento 2 Development sẽ tạo
Magento\Framework\Serialize\Serializer\Json đối tượng cho bạn. Đó là tất cả những gì chúng ta cần, bây giờ.

Quảng cáo


Mỗi lớp khối là con của Mẫu và Mẫu là con của AbstractBlock. Với mẫu đó, tất cả trẻ em AbstractBlock sẽ thừa hưởng thuộc tính được bảo vệ $_cachesẽ đóng vai trò là đối tượng chính để lưu hoặc tải từ bộ đệm.
Hơn nữa, để lưu dữ liệu trong bộ đệm, chúng ta cần trải qua một số bước.
1. Tạo dữ liệu
2. Sắp xếp dữ liệu
3. Lưu dữ liệu
hoặc khi tải dữ liệu, thuật toán sẽ là:
1. Tải dữ liệu
2. Không xác định dữ liệu
3. Đặt
định nghĩa Khối dữ liệu :

<?php

Quảng cáo



namespace Inchoo\LearnCaching\Block;

use Magento\Framework\Serialize\SerializerInterface;
use Magento\Framework\View\Element\Template;

class Cacher extends Template
{

private cacheId = 'IdForCachingPurposes';

/**
* @var SerializerInterface
*/

private $serializer;

/**
* Cacher constructor.
* @param Template\Context $context
* @param SerializerInterface $serialized
* @param array $data
*/

public function __construct(
Template\Context $context,
SerializerInterface $serializer,
array $data = []
) {
parent::__construct($context, $data);
$this->serializer = $serializer;
}

public function loadDataFromCache(){
$data = $this->_cache->load($this->cacheId);
if (!$data) {
$this->saveDataInCache();
return;
}

$data = $this->serializer->unserialize($data);
$this->setData($data);
};

public function saveDataInsideCache(){
$this->insertData();
$data = $this->serializer->serialize($this->getData());
$this->_cache->save($data, $this->cacheId);
};

public function insertData(){
$data = [
'id' => 1,
'first_name' => 'Roni',
'last_name' => 'Cost',
'email' => 'roni_cost@example.com'
];
$this->setData($data);
}
}
Để đơn giản hóa, lớp Cacher có dữ liệu được mã hóa cứng chỉ được sử dụng cho mục đích học tập. Bạn phải chèn dữ liệu với bộ sưu tập, hoặc có thể widget sẽ chèn dữ liệu đó cho bạn, nhưng trong mọi trường hợp, logic để chèn dữ liệu vào bộ đệm rất đơn giản. Phương thức save($data, $uniqueId) sẽ lưu $data trong bộ đệm với id duy nhất có thể được tạo bằng một số trình tạo chuỗi ngẫu nhiên hoặc thậm chí mã hóa cứng. Và phương thức load($this->cacheId) sẽ trả về false nếu dữ liệu có id không có trong bộ đệm hoặc sẽ trả về dữ liệu dưới dạng chuỗi.
Vì vậy, công việc của chúng tôi là giải mã chuỗi thành dữ liệu và chúng tôi cũng phải chuyển đổi dữ liệu thành chuỗi trước khi lưu những gì sẽ rõ ràng hơn trong phần cuối của bài viết. Thuật toán khi khách truy cập trang có thể trông như thế này:
0. Lấy id bộ đệm duy nhất.
1. Tải dữ liệu từ bộ đệm.
2. Nếu không có dữ liệu

  • lấy dữ liệu
  • tuần tự hóa dữ liệu
  • lưu trong bộ nhớ cache
  • trở về
3. Nếu không

  • hủy dữ liệu
  • đặt nó với setData ()
  • sử dụng nó
Phương pháp save() có thêm tham số. Mảng thẻ và thời gian tồn tại của dữ liệu trong bộ đệm. Theo mặc định, thời gian tồn tại của bộ đệm là 9999999999 trong dấu thời gian UNIX. Đó là khoảng 250 năm kể từ bây giờ.

Magento 2 lưu dữ liệu ở đâu?
Chà, Magento 2 lưu dữ liệu bên trong var / cache. Mở một số trang lưu trữ Magento mà không xóa bộ nhớ cache và xem bên trong var / cache. Sẽ có một loạt các thư mục mage từ n với một số tệp có tên kỳ lạ.
Chuỗi lạ đó trong tên sau dấu gạch dưới cuối cùng (_) là Id bộ đệm duy nhất, chỉ được chuyển đổi thành chữ hoa. Vì vậy, hãy thử truy cập vào khối của bạn, nơi Magento 2 sẽ lưu dữ liệu trong bộ đệm và không xóa bộ nhớ cache, hãy tìm
mage INTERN 658_APP_IDFORCACHINGPURPOSES.
Ở đó bạn sẽ tìm thấy tất cả các dữ liệu nối tiếp, đó là điểm cuối cùng.
CÒn bạn thì sao? Bạn có thể chia sẻ một số mẹo hữu ích về việc lưu dữ liệu tùy chỉnh vào bộ đệm không? Để lại nhận xét bên dưới và liên hệ với Wsoftpro nếu bạn cần trợ giúp cải thiện hiệu suất trang web Magento của bạn!
Chia sẻ

Xu hướng

Xu hướng

Bài mới









  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2024 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019