function t3_init() { t3import('core.parameter'); t3import('core.extendable'); t3import('core.template'); t3import('core.basetemplate'); t3import('core.cache'); t3import('core.head'); t3import('core.hook'); t3import('core.joomla.view'); if (!class_exists('JModuleHelper', false)) { t3import('core.joomla.modulehelper'); } t3import('core.joomla.pagination'); //Load template language $this->loadLanguage('tpl_' . T3_ACTIVE_TEMPLATE, JPATH_SITE); $params = T3Common::get_template_based_params(); //instance cache object. $devmode = $params ? $params->get('devmode', '0') == '1' : false; T3Cache::getInstance($devmode); //Check if enable T3 info mode. Enable by default (if not set) if ($params->get('infomode', 1) == 1) { if (!JRequest::getCmd('t3info') && JRequest::getCmd('tp')) { JRequest::setVar('t3info', JRequest::getCmd('tp')); } } $key = T3Cache::getPageKey(); $data = null; $user =& JFactory::getUser(); if (!$devmode && JRequest::getCmd('cache') != 'no') { T3Cache::setCaching(true); JResponse::allowCache(true); } $data = T3Cache::get($key); if ($data) { if (!preg_match('#<jdoc:include\\ type="([^"]+)" (.*)\\/>#iU', $data)) { $mainframe = JFactory::getApplication(); $token = JUtility::getToken(); $search = '#<input type="hidden" name="[0-9a-f]{32}" value="1" />#'; $replacement = '<input type="hidden" name="' . $token . '" value="1" />'; $data = preg_replace($search, $replacement, $data); JResponse::setBody($data); echo JResponse::toString($mainframe->getCfg('gzip')); if (JDEBUG) { global $_PROFILER; $_PROFILER->mark('afterCache'); echo implode('', $_PROFILER->getBuffer()); } $mainframe->close(); } } //Preload template t3import('core.preload'); $preload = T3Preload::getInstance(); $preload->load(); $doc =& JFactory::getDocument(); $t3 = T3Template::getInstance($doc); $t3->_html = $data; }
function get_file($key) { if (!$key) { return null; } $t3cache = T3Cache::getInstance(); $data = null; $path = $t3cache->cache_assets_path() . DS . $key; if (is_file($path)) { $data = @file_get_contents($path); } return $data; }
function optimizecss($css_urls) { $content = ''; $optimize_css = T3Parameter::get('optimize_css', 2); if (!$optimize_css) { return $css_urls; } //no optimize css $output = array(); $optimize_exclude = trim(T3Parameter::get('optimize_exclude', '')); $optimize_exclude_regex = null; if ($optimize_exclude) { $optimize_exclude_regex = '#' . preg_replace('#[\\r\\n]+#', '|', preg_quote($optimize_exclude)) . '#'; } $files = array(); $t3cache = T3Cache::getInstance(); $cachepath = T3Path::path(T3Parameter::get('optimize_folder', 't3-assets')); $needupdate = false; $filelimit = $optimize_css == 1 ? 20 : 999; //limit files import into a css file (in IE7, only first 30 css files are loaded). other case, load unlimited $filecount = 0; jimport('joomla.filesystem.file'); foreach ($css_urls as $theme => $urls) { foreach ($urls as $url) { $ignore = false; $import = false; $importupdate = false; //check ignore to optimize // - not a local file // - not a css file // - in ignore list if (!$url[0]) { $ignore = true; } else { if (!preg_match('#\\.css$#', $url[0])) { $ignore = true; } else { if ($optimize_exclude_regex && preg_match($optimize_exclude_regex, $url[1])) { $ignore = true; } } } if (!$ignore && $optimize_css > 1) { //check if need update. for css, the cache should be [filename] or [filename]-import //[filename]-import - for the case there's @import inside //in the ignore of @import, file still optimize but will be put into a sigle file $cfile = $cachepath . DS . md5($url[0]) . '.' . basename($url[0]); if (!(is_file($cfile) && @filemtime($url[0]) < @filemtime($cfile)) && !(is_file($cfile . '-import') && @filemtime($url[0]) < @filemtime($cfile . '-import'))) { //Need update $data = T3Head::compresscss(@JFile::read($url[0]), $url[1]); //check if contain @import if (preg_match('#@import\\s+.+#', $data)) { $import = true; $importupdate = true; $cfile = $cfile . '-import'; } //delete old file if exists @JFile::delete($cfile); @JFile::delete($cfile . '-import'); //write to cache file @JFile::write($cfile, $data); //make a flag for updating cache file $needupdate = true; } else { if (is_file($cfile . '-import')) { $import = true; $importupdate = false; $cfile = $cfile . '-import'; } } } //match ignore file, or import file, or reach the limit: flush previous files out if ($ignore || $import || count($files) == $filelimit) { if (count($files)) { $ourl = T3Head::store_file2($files, 'css', $needupdate); if (!$ourl) { return $css_urls; } //put result into output $output[] = array('', $ourl); } //reset the flag for file update $needupdate = false; $files = array(); } //write out the @import file if ($import) { $ourl = T3Head::store_file2(array(array($cfile, '')), 'css', $importupdate); if (!$ourl) { return $css_urls; } //put result into output $output[] = array('', $ourl); } else { if ($ignore) { $output[] = $url; } else { if ($optimize_css > 1) { $files[] = array($cfile, ''); } else { $files[] = $url; } } } } } if (count($files)) { $ourl = T3Head::store_file2($files, 'css', $needupdate); if (!$ourl) { return $css_urls; } //put result into output $output[] = array('', $ourl); } return array($output); }