Làm cách nào tôi có thể sử dụng Cache của Joomla với chế độ xem thành phần của mình?


12

Như thường thấy với một CMS, hầu hết các lần truy cập xảy ra trong khi nó vẫn còn "mới". Tôi muốn lưu trữ đầu ra trang vào lần đầu tiên nó được hiển thị trong một khoảng thời gian nhất định để giảm khối lượng công việc nặng cần thiết để tạo ra nó.

Tôi đã làm việc từ tài liệu JCache và có các cơ chế cơ bản hoạt động như được hiển thị ở đây:

$cache = JFactory::getCache('MyCache', '');
$cache->setCaching(true);
$cache->setLifeTime(86400);  //24 hours
$cache_id = 'MyCache_page_123';
$cached_page= $cache->get($cache_id);
if (!empty($cached_page)) {
    $the_page_output = $cached_page;
}else{
    $the_page_output = ...<div>the generated view HTML</div>....
    $cache->store($the_page_output, $cache_id);
}
// echo or return "$the_page_output"

Tôi bị mắc kẹt khi cố gắng xác định nơi tôi nên tạo bộ đệm, sau đó là "điểm ngọt" để sử dụng bộ đệm đó trước khi tất cả công việc bắt đầu lại.

Câu trả lời:


8

Cho đến nay các tìm kiếm của Google khiến tôi cho rằng j Joomla tự động lưu trữ thành phần của bạn nếu bạn thêm display(true,...)vào phương thức hiển thị của bộ điều khiển như trong ví dụ sau.
Ví dụ này cũng bao gồm một số mã đo lường để kiểm tra xem nó có hoạt động không (phần JProfiler).

public function display($cachable = false, $urlparams = array()) {
    $profiler = new JProfiler();//debug

    //Joomla cache only takes format, option, view, layout, tpl, language en id als default cache_id ($urlparams)
    $input  = new Jinput;
    $urlparams['comp_page_specific_id']=$input->getUInt('comp_specific_id');
    $urlparams['comp_page_specific_else']=$input->getUInt('comp_page_specific_else');

    parent::display(true, $urlparams);
    JFactory::getApplication()->enqueueMessage($profiler->mark( ' seconds with caching<br>Only works after someone has visited this page at least once.<br>Can be reset in backend.' ));//debug
}
  • Bạn phải đặt thủ công$urlparams xác định chế độ xem thành phần nào cần bộ đệm khác nhau ( urlparams = cache_id để nói). Và Joomla đã quan tâm đến các tham số phổ biến như định dạng, tùy chọn, chế độ xem, bố cục, tpl, ngôn ngữ en id.

  • Cũng cần lưu ý rằng không có bản cập nhật sẽ được thực hiện trong thành phần của bạn. Nếu bạn có bộ đếm lần truy cập trong mô hình của mình, số lần truy cập sẽ không đổi khi chế độ xem được lưu trong bộ nhớ cache được hiển thị.

* Thông tin bổ sung: Trong bộ điều khiển của thư viện j Joomla, đây là dòng sau gọi bộ đệm xem và đồng thời đặt bộ đệm nếu chưa có:
$cache->get($view, 'display'); //689: legacy controller

( EDIT 2015-01-14: Đã thêm urlparams)
( EDIT 2015-01-15: Đã thêm mã thông tin bổ sung)


but I can't find any core joomla code where the cache is being set.Chỉ cần một lưu ý - đó là $cache->getphương pháp bên trong
Dmitry Rekun

Ồ Đó là mã hóa rất thông minh. Cảm ơn bạn về thông tin. Tôi sẽ cập nhật câu trả lời.
điện tử

Chỉ cần chắc chắn rằng câu trả lời đã đầy, đây rồi
Dmitry Rekun 15/1/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.