ajax很简单。自然,它也可以很复杂得不近人情。
我做的网站首页有个模块是从别的网站捞天气。缓存之本地。每天第一次请求时获取。
常常在这里会让整个页面停顿,给人以这个网站很慢的感觉。所以我想到了用ajax异步获取。

mambo 4.5.2装载模块的部分是在/includes目录下的frontend.php里。

我修改了下,新增了几个函数,用来装载ajax模块,并将模块盒子的输出改为模板控制。

这下感觉好多了。

mambo->ajax应用
mambo->ajax应用
/* 客户端模块内容的外壳,id明确=模块名。由于模块名独立,所以不会产生冲突 */
mambo->ajax应用
function ajaxClient($name,$loading,$styleObj=''){
mambo->ajax应用    
$style = "style=\"$styleObj\"";
mambo->ajax应用    
$client = "<div id='$name' $style>$loading</div>\n";
mambo->ajax应用    
$client .= ajaxClientJs($name);
mambo->ajax应用    
return $client;
mambo->ajax应用}
mambo->ajax应用
mambo->ajax应用
/* 生成客户端请求的脚本其中oXML对象在ajax.js中就已经定义了 */
mambo->ajax应用
function ajaxClientJs($name,$clientFunc=''){
mambo->ajax应用
global $mosConfig_live_site;
mambo->ajax应用
$clientFunc = $clientFunc?$clientFunc:"Fill_".$name;
mambo->ajax应用
//$site = "http://corp.cnnavi.com";
mambo->ajax应用
$url = $mosConfig_live_site."/modules/".$name.".php";
mambo->ajax应用
$js=<<<EOD
mambo->ajax应用
mambo->ajax应用
<script language="javascript" type="text/javascript">
mambo->ajax应用
<!--
mambo->ajax应用url 
= '$url';
mambo->ajax应用oXML
.LoadUrl( url,$clientFunc ,'');
mambo->ajax应用
function $clientFunc(htmlstr){
mambo->ajax应用    
var obj = document.getElementById('$name');
mambo->ajax应用    obj
.innerHTML = htmlstr;
mambo->ajax应用}
mambo->ajax应用
//-->
mambo->ajax应用
</script>
mambo->ajax应用
mambo->ajax应用EOD;
mambo->ajax应用
return $js;
mambo->ajax应用
//send( urlToCall , params , func ,funcParam )
mambo->ajax应用
}//end func
mambo->ajax应用

mambo->ajax应用
/* 异步装载模块数据调用 */
mambo->ajax应用
function ajaxModuleCall($modName,$style='',$params="",$loading="loadingmambo->ajax应用..",$styleObj='')
mambo->ajax应用{    
mambo->ajax应用    
global $mosConfig_gzip, $mosConfig_absolute_path, $database, $my, $Itemid, $mosConfig_caching;
mambo->ajax应用    
$client = ajaxClient($modName,$loading,$styleObj);
mambo->ajax应用    
$contents = &$client;
mambo->ajax应用    
$module = $mosConfig_absolute_path .'/modules/'. $modName .'.php' ;
mambo->ajax应用    
if (!file_exists ($module)) {
mambo->ajax应用        
$msg = "module  file {$module} not exists, please check";
mambo->ajax应用        
return $msg;
mambo->ajax应用    }
mambo->ajax应用    
//取模块参数
mambo->ajax应用
    $q = "select title,showtitle,params from #__modules where module='$modName'  ";
mambo->ajax应用    
$database->setQuery($q);    
mambo->ajax应用    
$database->loadObject($rowMod);//prt($rowMod);
mambo->ajax应用
    $moduleParams = $params?$params:$rowMod->params;
mambo->ajax应用    
$params = new mosParameters( $moduleParams );
mambo->ajax应用    
$moduleclass_sfx = $params->get('moduleclass_sfx');
mambo->ajax应用    
$returnString = "";
mambo->ajax应用    
$tplfile = $mosConfig_absolute_path."/templates/modulebox/box".$style.".html";
mambo->ajax应用    
if (!is_file($tplfile)) {
mambo->ajax应用        
$tplfile = $mosConfig_absolute_path."/templates/modulebox/box.html";
mambo->ajax应用    }
mambo->ajax应用    
$boxTemplate = file_get_contents ( $tplfile );
mambo->ajax应用    
/* 是否输出头 */
mambo->ajax应用    
if ($rowMod->showtitle==1
mambo->ajax应用        
$rowModTitle = $rowMod->title;
mambo->ajax应用    
else 
mambo->ajax应用        
$boxTemplate = preg_replace("#.*{$rowModTitle}.*#","",$boxTemplate);
mambo->ajax应用    
mambo->ajax应用    
/* 替换模版 */
mambo->ajax应用    
$htmldata  = preg_replace("#{([^}]*)}#e","\\1",$boxTemplate);
mambo->ajax应用    
return $htmldata ;
mambo->ajax应用
// end func
mambo->ajax应用

mambo->ajax应用
mambo->ajax应用
mambo->ajax应用
/**
mambo->ajax应用* @param string The modName
mambo->ajax应用* @param int The style.  0=normal, 1=horiz, -1=no wrapper
mambo->ajax应用* 本模块调用返回字符串,所以,在执行模块里不可有任何输出缓冲。
mambo->ajax应用
*/
mambo->ajax应用
function mosLoadModule2( $modName='', $style=0 , $params='' ) {
mambo->ajax应用    
global $mosConfig_gzip, $mosConfig_absolute_path, $database, $my, $Itemid, $mosConfig_caching;
mambo->ajax应用    
$module = $mosConfig_absolute_path .'/modules/'. $modName .'.php' ;
mambo->ajax应用    
if (!file_exists ($module)) {
mambo->ajax应用        
$msg = "module  file {$module} not exists, please check";
mambo->ajax应用        
return $msg;
mambo->ajax应用    }
mambo->ajax应用
mambo->ajax应用    
//取模块参数
mambo->ajax应用
    $q = "select title,showtitle,params from #__modules where module='$modName'  ";
mambo->ajax应用    
$database->setQuery($q);    
mambo->ajax应用    
$database->loadObject($rowMod);//prt($rowMod);
mambo->ajax应用
    $moduleParams = $params?$params:$rowMod->params;
mambo->ajax应用    
$params = new mosParameters( $moduleParams );
mambo->ajax应用    
$moduleclass_sfx = $params->get('moduleclass_sfx');
mambo->ajax应用    
//执行模块
mambo->ajax应用
    ob_start();
mambo->ajax应用    
include$module );
mambo->ajax应用    
$contents = ob_get_contents();
mambo->ajax应用    
ob_end_clean();
mambo->ajax应用
mambo->ajax应用    
$tplfile = $mosConfig_absolute_path."/templates/modulebox/box".$style.".html";
mambo->ajax应用    
if (!is_file($tplfile)) {
mambo->ajax应用        
$tplfile = $mosConfig_absolute_path."/templates/modulebox/box.html";
mambo->ajax应用    }
mambo->ajax应用    
$boxTemplate = file_get_contents ( $tplfile );
mambo->ajax应用    
/* 是否输出头 */
mambo->ajax应用    
if ($rowMod->showtitle==1) {
mambo->ajax应用        
$rowModTitle = $rowMod->title;
mambo->ajax应用    }
mambo->ajax应用    
else {//如果不是,则将头部包含的一行html去掉。        
mambo->ajax应用
        $boxTemplate = preg_replace("#.*{$rowModTitle}.*#","",$boxTemplate);
mambo->ajax应用    }
mambo->ajax应用    
$htmldata  = preg_replace("#{([^}]*)}#e","\\1",$boxTemplate);
mambo->ajax应用    
return $htmldata ;
mambo->ajax应用}
mambo->ajax应用


我将模板放在templates/modulebox目录下。这下盒子的输出怎么变都简单了。新建文件的问题。而且保留原有的类别后缀。ok.


前台调用。

mambo->ajax应用//右边
mambo->ajax应用//function ajaxModuleCall($modName,$style=-1,$params="",$loading="loadingmambo->ajax应用..",$styleObj='')
mambo->ajax应用
mambo->ajax应用//外汇

mambo->ajax应用
$waihui = ajaxModuleCall ( 'mod_getwaihui','',"","loading waihuimambo->ajax应用mambo->ajax应用." ); 
mambo->ajax应用
mambo->ajax应用
//天气
mambo->ajax应用

mambo->ajax应用
$styleObj = "height:250px;";
mambo->ajax应用
$weather = ajaxModuleCall ( 'mod_weather','',"","loading weathermambo->ajax应用mambo->ajax应用.", $styleObj); 
mambo->ajax应用
//echot($weather);
mambo->ajax应用

ok。你可以发现我将所有的输出都放在字符串里。这样做是为了模板的替换。

模板在这里得到简单的运用。而且有效。为什么不用smarty?phplib?

因为这样简单。而且我反正是要做html缓存。用不着smarty............

相关文章:

  • 2022-02-06
  • 2022-01-07
  • 2021-12-09
  • 2021-09-19
  • 2022-12-23
  • 2021-08-21
  • 2021-04-12
  • 2021-04-14
猜你喜欢
  • 2021-08-15
  • 2021-07-05
  • 2021-12-18
  • 2022-03-06
  • 2022-01-11
  • 2022-02-03
相关资源
相似解决方案