1
andrey3761
XoopsCache class.

Hi guys,

I need 'XoopsCache' class documentation which is located in \class\cache\xoopscache.php. How do I use it with different types of cache like engine memcache, engine model etc.?

One more question, how do I choose a different caching type for Smarty templates e.g. engine memcache?

2
Dylian
Re: XoopsCache class.
  • 2009/12/22 22:51

  • Dylian

  • Friend of XOOPS

  • Posts: 237

  • Since: 2007/7/21


Quote:
I need 'XoopsCache' class documentation which is located in \class\cache\xoopscache.php.


Go to http://dev.xoofoo.org/dev_xoops_242/ then classes > XoopsCache .

Don't know if this is what you mean't by documentation...

Greets Dylian.

3
andrey3761
Re: XoopsCache class.

The example of operation with this class is necessary to me.

4
dbman
Re: XoopsCache class.
  • 2009/12/23 2:01

  • dbman

  • Friend of XOOPS

  • Posts: 172

  • Since: 2005/4/28


Check out one of the few usage examples in xoops:
- modules/system/class/gui/default/default.php
- admin.php

Also have a look at class/cache/memcache.php

There are some other classes of interest regarding xoopscache in the documentation as Dylan mentions.

Are you planning to implement memcache in a module or as a core hack?

5
andrey3761
Re: XoopsCache class.

Quote:
Are you planning to implement memcache in a module or as a core hack?


I wish to cache SMARTY templates in memcached. I wish to use in the modules memcached.

6
trabis
Re: XoopsCache class.
  • 2009/12/23 19:52

  • trabis

  • Core Developer

  • Posts: 2269

  • Since: 2006/9/1 1


Has I understand you need to load class with:
xoops_load('cache') or xoops_load('xoopscache') for XOOPS 2.4.3.

Then you instantiate the class with:
$cache = XoopsCache::getInstance();

The you set the engine:
$cache->engine($name = 'file', $settings = array());

There are 5 engines available:
apc
file (default)
memcache
model(requires XOOPS 3.0)
xcache

You can use methods write, read, delete, clear.
You can get info about the available settings by looking into the engine classes (init method).

7
andrey3761
Re: XoopsCache class.

Help me.

I start this script, and in folder "/xoops_data/caches/xoops_cache" there is file "xoops_test_http%3A%2F%2Fradio-hobby_org.php", it cached in file, instead of in memcached. Where error? How to switch on cache in memcache?

<?php include_once '../mainfile.php'; $val = 'val'; $key = 'test'; xoops_load('cache'); $cache = XoopsCache::getInstance(); $cache->engine('memcache'); $cache->write($key, $val, 100); $ret = $cache->read($key); echo $ret; ?>

8
andrey3761
Re: XoopsCache class.

Has found function for caching Smarty of templates in memcached.

le="color: #000000"><?php /** * Project: Smarty memcached cache handler function * Author: Mads Sülau Jørgensen <php at mads dot sulau dot dk> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ function memcache_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null) { // ref to the memcache object $m = $GLOBALS['memcached_res']; // the key to store cache_ids under, used for clearing $key = 'smarty_caches'; // check memcache object if (get_class($m) != 'Memcache') { $smarty_obj->trigger_error('cache_handler: $GLOBALS['memcached_res'] is not a memcached object'); return false; } // unique cache id $cache_id = md5($tpl_file.$cache_id.$compile_id); switch ($action) { case 'read': // grab the key from memcached $contents = $m->get($cache_id); // use compression if($smarty_obj->use_gzip && function_exists("gzuncompress")) { $cache_content = gzuncompress($contents); } else { $cache_content = $contents; } $return = true; break; case 'write': // use compression if($smarty_obj->use_gzip && function_exists("gzcompress")) { $contents = gzcompress($cache_content); } else { $contents = $cache_content; } // add the cache_id to the $key string $caches = $m->get($key); if (!is_array($caches)) { $caches = array($cache_id); $m->set($key, $caches); } else if (!in_array($cache_id, $caches)) { array_push($caches, $cache_id); $m->set($key, $caches); } // store the value in memcached $stored = $m->set($cache_id, $contents); if(!$stored) { $smarty_obj->trigger_error("cache_handler: set failed."); } $return = true; break; case 'clear': if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) { // get all cache ids $caches = $m->get($key); if (is_array($caches)) { $len = count($caches); for ($i=0; $i<$len; $i++) { // assume no errors $m->delete($caches[$i]); } // delete the cache ids $m->delete($key); $result = true; } } else { $result = $m->delete($cache_id); } if(!$result) { $smarty_obj->trigger_error("cache_handler: query failed."); } $return = true; break; default: // error, unknown action $smarty_obj->trigger_error("cache_handler: unknown action "$action""); $return = false; break; } return $return; } ?>


I apply it so:

<?php include_once 'memcache_cache_handler.php'; // $GLOBALS['memcached_res'] = new Memcache; $GLOBALS['memcached_res']->connect('localhost', 11211) or die ("Could not connect"); // $xoopsTpl->cache_handler_func = 'memcache_cache_handler'; if (!$xoopsTpl->is_cached('db:shoutbox_shoutbox.html')) { $result = 'test'; $xoopsTpl->assign('shout', $result); } $xoopsTpl->display('db:shoutbox_shoutbox.html'); ?>


How in this function correctly to specify $cache_id?

le="color: #000000"><?php $cache_id = md5($tpl_file.$cache_id.$compile_id);

9
Dylian
Re: XoopsCache class.
  • 2010/1/5 0:34

  • Dylian

  • Friend of XOOPS

  • Posts: 237

  • Since: 2007/7/21


Try this one, this way you'll immediately see if MEMCACHE is even available on your server.

<?php require(../'mainfile.php'); include($GLOBALS['xoops']->path('header.php')); if (class_exists('Memcache')) { echo '<span style="color: green; font-weight: bold; font-size: 12px;">The Memcache class is available</span><br />'; }else{ echo '<span style="color: red; font-weight: bold; font-size: 14px;">The Memcache class is not available</span><br />'; } xoops_load('xoopscache'); $cache = XoopsCache::getInstance(); if($cache->engine('memcache')){ $val = 'val'; $key = 'test'; $cache->write($key, $val, 100); $ret = $cache->read($key); echo $ret; }else{ echo '<span style="color: blue; font-weight: bold; font-size: 12px;">MEMCACHE Could not be loaded</span>'; } include($GLOBALS['xoops']->path('footer.php')); ?>
(Just a modified version of your original script)

Greets Dylian.

Login

Donat-O-Meter

Stats
Goal: $15.00
Due Date: Jul 31
Gross Amount: $0.00
Net Balance: $0.00
Left to go: $15.00
Make donations with PayPal!

Latest GitHub Commits