ฉันจะใช้ Cache ของ Joomla ด้วยมุมมองส่วนประกอบของฉันได้อย่างไร


13

ตามปกติแล้วในกรณีที่มี CMS ความนิยมมากที่สุดจะเกิดขึ้นในขณะที่ยังคงเป็น "ใหม่" ฉันต้องการแคชการแสดงผลหน้าเว็บในครั้งแรกที่มีการสร้างการแสดงผลในช่วงเวลาที่กำหนดเพื่อลดปริมาณงานที่ต้องใช้ในการสร้าง

ฉันทำงานจากเอกสารJCacheและให้กลไกพื้นฐานทำงานตามที่แสดงไว้ที่นี่:

$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"

ฉันกำลังพยายามหาว่าฉันควรสร้างแคชที่ไหนจากนั้นจุด "จุดหวาน" เพื่อใช้แคชนั้นก่อนที่งานทั้งหมดจะเริ่มขึ้นอีกครั้ง

คำตอบ:


9

จนถึงตอนนี้การค้นหาของ Google ทำให้ฉันเข้าใจว่าjoomla แคชคอมโพเนนต์ของคุณโดยอัตโนมัติหากคุณเพิ่มdisplay(true,...)วิธีการแสดงผลของคอนโทรลเลอร์ในตัวอย่างต่อไปนี้
ตัวอย่างนี้ยังมีรหัสการวัดบางส่วนเพื่อตรวจสอบว่ามันใช้งานได้หรือไม่ (ส่วนของ 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
}
  • คุณต้องตั้งค่า$urlparamsมุมมององค์ประกอบที่ต้องการแคชที่แตกต่างกันด้วยตนเอง ( urlparams = cache_idเพื่อพูด) และ Joomla จะดูแลพารามิเตอร์ทั่วไปเช่นรูปแบบตัวเลือกมุมมองเค้าโครง tpl ภาษาและรหัส

  • นอกจากนี้โปรดทราบว่าจะไม่มีการอัปเดตในส่วนประกอบของคุณ หากคุณมีตัวนับจำนวนเยี่ยมชมในโมเดลของคุณจำนวนครั้งที่เข้าชมจะคงที่เมื่อมุมมองแคชปรากฏขึ้น

* ข้อมูลเพิ่มเติม: ในตัวควบคุมของไลบรารี joomla มันเป็นบรรทัดต่อไปนี้ที่เรียกดูแคชและในเวลาเดียวกันก็จะทำการตั้งค่าแคชหากยังไม่ได้:
$cache->get($view, 'display'); //689: legacy controller

( แก้ไข 2015-01-14: เพิ่ม urlparams)
( แก้ไข 2015-01-15: ข้อมูลเพิ่มเติมที่เพิ่มรหัส)


but I can't find any core joomla code where the cache is being set.เพียงทราบ - มันเป็น$cache->getวิธีการภายใน
Dmitry Rekun

ว้าว! นั่นคือการเข้ารหัสที่ฉลาดมาก ขอบคุณสำหรับข้อมูล. ฉันจะอัปเดตคำตอบ
e-motiv

เพียงเพื่อให้แน่ใจว่าคำตอบเต็มแล้วนี่คือ
Dmitry Rekun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.