diff --git a/admin-dev/tabs/AdminPerformance.php b/admin-dev/tabs/AdminPerformance.php index 00741d66d..e19fb3950 100644 --- a/admin-dev/tabs/AdminPerformance.php +++ b/admin-dev/tabs/AdminPerformance.php @@ -46,6 +46,8 @@ class AdminPerformance extends AdminTab $this->_errors[] = Tools::displayError('To use Memcached, you must install the Memcache PECL extension on your server.').' http://www.php.net/manual/en/memcache.installation.php'; else if ($cache_active && $caching_system == 'CacheApc' && !extension_loaded('apc')) $this->_errors[] = Tools::displayError('To use APC cache, you must install the APC PECL extension on your server.').' http://fr.php.net/manual/fr/apc.installation.php'; + else if ($cache_active && $caching_system == 'CacheXcache' && !extension_loaded('xcache')) + $this->_errors[] = Tools::displayError('To use Xcache, you must install the Xcache extension on your server.').' http://xcache.lighttpd.net'; else if ($cache_active && $caching_system == 'CacheFs' && !is_writable(_PS_CACHEFS_DIRECTORY_)) $this->_errors[] = Tools::displayError('To use CacheFS the directory').' '.realpath(_PS_CACHEFS_DIRECTORY_).' '.Tools::displayError('must be writable'); @@ -224,6 +226,9 @@ class AdminPerformance extends AdminTab $warnings[] = $this->l('To use Memcached, you must install the Memcache PECL extension on your server.').' http://www.php.net/manual/en/memcache.installation.php'; if (!extension_loaded('apc')) $warnings[] = $this->l('To use APC, you must install the APC PECL extension on your server.').' http://fr.php.net/manual/fr/apc.installation.php'; + if (!extension_loaded('xcache')) + $warnings[] = $this->l('To use Xcache, you must install the Xcache extension on your server.').' http://xcache.lighttpd.net'; + if (!is_writable(_PS_CACHEFS_DIRECTORY_)) $warnings[] = $this->l('To use CacheFS the directory').' '.realpath(_PS_CACHEFS_DIRECTORY_).' '.$this->l('must be writable'); @@ -447,6 +452,7 @@ class AdminPerformance extends AdminTab diff --git a/cache/class_index.php b/cache/class_index.php index e0ad94d1c..0927fde94 100644 --- a/cache/class_index.php +++ b/cache/class_index.php @@ -240,6 +240,8 @@ 'CacheFs' => 'override/classes/cache/CacheFs.php', 'CacheMemcacheCore' => 'classes/cache/CacheMemcache.php', 'CacheMemcache' => 'override/classes/cache/CacheMemcache.php', + 'CacheXcacheCore' => 'classes/cache/CacheXcache.php', + 'CacheXcache' => 'override/classes/cache/CacheXcache.php', 'DbCore' => 'classes/db/Db.php', 'Db' => 'override/classes/db/Db.php', 'DbMySQLiCore' => 'classes/db/DbMySQLi.php', diff --git a/classes/cache/CacheXcache.php b/classes/cache/CacheXcache.php new file mode 100644 index 000000000..7466504ad --- /dev/null +++ b/classes/cache/CacheXcache.php @@ -0,0 +1,90 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +/** + * This class require Xcache extension + * + * @since 1.5.0 + */ +class CacheXcacheCore extends Cache +{ + public function __construct() + { + $this->keys = xcache_get(self::KEYS_NAME); + if (!is_array($this->keys)) + $this->keys = array(); + } + + /** + * @see Cache::_set() + */ + protected function _set($key, $value, $ttl = 0) + { + return xcache_set($key, $value, $ttl); + } + + /** + * @see Cache::_get() + */ + protected function _get($key) + { + return xcache_isset($key) ? xcache_get($key) : false; + } + + /** + * @see Cache::_exists() + */ + protected function _exists($key) + { + return xcache_isset($key); + } + + /** + * @see Cache::_delete() + */ + protected function _delete($key) + { + return xcache_unset($key); + } + + /** + * @see Cache::_writeKeys() + */ + protected function _writeKeys() + { + xcache_set(self::KEYS_NAME, $this->keys); + } + + /** + * @see Cache::flush() + */ + public function flush() + { + $this->delete('*'); + return true; + } +} diff --git a/modules/blockcategories/blockcategories.php b/modules/blockcategories/blockcategories.php index 6eb483b3b..03f225ec6 100644 --- a/modules/blockcategories/blockcategories.php +++ b/modules/blockcategories/blockcategories.php @@ -112,7 +112,7 @@ class BlockCategories extends Module

'.$this->l('Activate dynamic (animated) mode for sublevels').'

- +

'.$this->l('Set the number of footer columns').'

@@ -167,7 +167,7 @@ class BlockCategories extends Module GROUP BY id_category ORDER BY `level_depth` ASC, c.`position` ASC') ) - + return; $resultParents = array(); @@ -215,7 +215,7 @@ class BlockCategories extends Module public function hookFooter($params) { $id_current_shop = $this->context->shop->getID(); - + $id_customer = (int)($params['cookie']->id_customer); // Get all groups for this customer and concatenate them as a string: "1,2,3..." $groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_; @@ -256,7 +256,7 @@ class BlockCategories extends Module $widthColumn= floor(100/$nbrColumns); $this->context->smarty->assign('numberColumn', $numberColumn); $this->context->smarty->assign('widthColumn', $widthColumn); - + $blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH')); unset($resultParents, $resultIds); @@ -322,7 +322,7 @@ class BlockCategories extends Module { $this->_clearBlockcategoriesCache(); } - + public function hookAfterSaveAdminMeta($params) { $this->_clearBlockcategoriesCache(); diff --git a/override/classes/cache/CacheXcache.php b/override/classes/cache/CacheXcache.php new file mode 100644 index 000000000..07d78df47 --- /dev/null +++ b/override/classes/cache/CacheXcache.php @@ -0,0 +1,7 @@ +