การนำ cache ไปใช้กับ module บน Joomla

ถามตอบ ปัญหาการพัฒนา Extension ไม่ว่าจะเป็น Module plugin Component หรือ แม้แต่ template การปรับแต่งโค้ด Joomla ต่างๆ ทุกเวอร์ชั่น 1.5 2.5 หรือ 3.x

Moderators: mindphp, ผู้ดูแลกระดาน

jay_limm
PHP VIP Members
PHP VIP Members
Posts: 4935
Joined: 02/06/2014 9:58 am

การนำ cache ไปใช้กับ module บน Joomla

Post by jay_limm » 03/07/2014 2:21 pm

การใช้งาน cache กับ module ของ joomla
เรียกดู cache โดย

Code: Select all

$cache = JFactory::getCache('ชื่อแคชที่ต้องการ'); 
แล้วจะรู้ได้อย่างไรว่าเราจะใช้ cache ที่มีชื่อว่าอะไร
บางที Bug ก็ไม่มีเหตุผล และไม่ต้องการคำจำกัดความ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23396
Joined: 22/09/2008 6:18 pm
Contact:

Re: การนำ cache ไปใช้กับ module บน Joomla

Post by mindphp » 03/07/2014 2:22 pm

ตัวอย่างการทำ cache ใน plugin
แต่ทำใน Module ก็ใช้หลักการเดียวกัน

Code: Select all

<?php
/**
{{LICENSE}} 
*/

defined('_JEXEC') or die;

class PlgContentMlinkarticle extends JPlugin
{
    
    public function onContentPrepare($context, &$row, &$params, $page = 0)
    {
                JHTML::_('behavior.tooltip');
                //$profiler = new JProfiler();
                //echo $profiler->mark('Start <br />');
                
                $cache = JFactory::getCache('mlinkarticle');
               //  $cache->setCaching(true);
                $store = unserialize($cache->_getStorage()->get($row->id, 'mlinkarticle'));
                
                if(!empty($store)) {
                    $row->text = $store;
                } else {
                    $regex = '/href\=\"index\.php\?option\=com\_content&view\=article&id=([0-9]*)/i';
                    $matches = array();
                    preg_match_all($regex, $row->text, $matches);

                    $db = JFactory::getDbo();
                    $query = $db->getQuery(true);

                    $query->select('id, title, introtext')->from('#__content');
                    $db->setQuery($query);
                    $db->query();

                    $content = $db->loadObjectList('id');

                    $loop = count($matches[0]);
                    if($loop > 0) {
                        for($i = 0; $i < $loop; $i++) {
                            $id = $matches[1][$i];
                            if(isset($content[$id])) {
                                $tip = $content[$id]->title.'::'.substr(htmlentities($content[$id]->introtext), 0, 25).'...';
                                $row->text = str_replace($matches[0][$i], 'class="hasTip" title="'.$tip.'" '.$matches[0][$i], $row->text);
                                $row->text = str_replace('{--mlinkarticle--}', '', $row->text);
                                $row->text = str_replace('{--mlinkarticle='.$id.'--}', '', $row->text);
                            }
                        }
                    }
                    $cache->store($row->text, $row->id);
                }
                //echo $profiler->mark('Finish <br />');
    }
}

 
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

jay_limm
PHP VIP Members
PHP VIP Members
Posts: 4935
Joined: 02/06/2014 9:58 am

Re: การนำ cache ไปใช้กับ module บน Joomla

Post by jay_limm » 03/07/2014 2:32 pm

การเซต cache

Code: Select all

$cache->setCaching( 'ชื่อcacheที่เซตโดยที่เราตั้งเอง' );
แล้วก็ทำการ get cache

Code: Select all

$cache = JFactory::getCache('ชื่อcacheเดียวกับตอนเซตcache');
ไม่ทราบว่าตามโค้ดเข้าใจถูกหรือเปล่า
บางที Bug ก็ไม่มีเหตุผล และไม่ต้องการคำจำกัดความ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23396
Joined: 22/09/2008 6:18 pm
Contact:

Re: การนำ cache ไปใช้กับ module บน Joomla

Post by mindphp » 03/07/2014 2:37 pm

เริ่มสร้าง object
$cache = JFactory::getCache('ชื่อcacheเดียวกับตอนเซตcache');
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

jay_limm
PHP VIP Members
PHP VIP Members
Posts: 4935
Joined: 02/06/2014 9:58 am

Re: การนำ cache ไปใช้กับ module บน Joomla

Post by jay_limm » 04/07/2014 4:37 pm

การนำ cache ไปใช้ จะต้องเช็คว่ามีการเก็บ cache ไว้หรือไม่ ตอนที่ ใช้คำสั่ง query หรือว่า ใส่ตอน fetch ข้อมูลออกมาแสดงค่ะ
กรณีที่ทำอยู่ query กับ fetch อยู่คนละไฟล์กันค่ะ
Last edited by jay_limm on 04/07/2014 5:16 pm, edited 1 time in total.
บางที Bug ก็ไม่มีเหตุผล และไม่ต้องการคำจำกัดความ

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 23396
Joined: 22/09/2008 6:18 pm
Contact:

Re: การนำ cache ไปใช้กับ module บน Joomla

Post by mindphp » 04/07/2014 4:43 pm

ก่อน query เช็คว่า ใน cache มีอยู่หรือไม่
ถ้ามีก็เอาจาก cache แทน ไม่ต้อง query ให้เสียเวลาฐานข้อมูล
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Joomla Development”

Who is online

Users browsing this forum: Bing [Bot] and 1 guest