Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] 自定义HTML模板DIY支持PHP代码解析

[复制链接]
蛇镜眼是不蛇某 发表于 2011-1-3 14:47:33 | 显示全部楼层
留个记号

思路不错
回复

使用道具 举报

emporer 发表于 2011-1-3 14:58:16 | 显示全部楼层
很不错,但现在还没想过这样应用
回复

使用道具 举报

fuckgao 发表于 2011-1-3 15:16:29 | 显示全部楼层
没看明白,留个记号慢慢研究
回复

使用道具 举报

seabob 发表于 2011-1-3 15:38:57 | 显示全部楼层
终于看到一个有技术含量的帖子
回复

使用道具 举报

prettyboy 发表于 2011-1-3 18:17:38 | 显示全部楼层
看不太懂
回复

使用道具 举报

zkw0 发表于 2011-1-3 19:25:58 | 显示全部楼层
回复

使用道具 举报

veshow 发表于 2011-1-3 22:43:30 | 显示全部楼层
恩 我的意思是需要的时候自己努力会看懂的
回复

使用道具 举报

gxren 发表于 2011-1-4 01:09:02 | 显示全部楼层
回复

使用道具 举报

xmmoer 发表于 2011-1-4 10:35:02 | 显示全部楼层
回复

使用道具 举报

 楼主| suxiaojack 发表于 2011-1-7 20:21:25 | 显示全部楼层
本帖最后由 suxiaojack 于 2011-1-7 20:24 编辑

经过实际书写一些复杂的代码,修正两处BUG,解决HTML自定义错误时,DIY失效问题。


  1. function sxx_block_display_batch($bid)
  2. {
  3. $mixed_code=block_fetch_content($bid);
  4. $sql="select blockclass from ".DB::table("common_block")." where bid=$bid";
  5. $query=DB::query($sql);
  6. if($row=DB::fetch($query))
  7. {
  8.   $blockclass=$row['blockclass'];
  9. }else
  10. {
  11.   echo ("no block id:$bid,Please check your database.");
  12.   echo ($mixed_code);
  13.   return;
  14. };
  15. if(
  16.      $blockclass==="html_html" && ($_GET['diy']!="yes") #支持DIY当语句错误时可以修改
  17.    )
  18. {
  19.   $mixed_code=preg_replace("/\[html\]|\[\/html\]/i","",$mixed_code);
  20.   $mixed_code=preg_replace("/\'/","\\\'",$mixed_code);#还是自动转换好点!!!
  21.   $phpmark1="/?"; #可以采取两种书写方式 /? phpcode ?/ 或者 [php] phpcode [/php]
  22.   $phpmark1end="?/";
  23.   $phpmark2="[php]";
  24.   $phpmark2end="[/php]";
  25.   $phpmark= (stripos($mixed_code,$phpmark1,0) ? $phpmark1:$phpmark2);
  26.   $phpmarkend = ( stripos($mixed_code,$phpmark1,0) ? $phpmark1end:$phpmark2end ) ;
  27.   $phpmarkslen= ( stripos($mixed_code,$phpmark1,0) ? 2:5 );
  28.   $phpmarkelen=  ( stripos($mixed_code,$phpmark1,0) ? 2:6 );
  29.   $spos=0;
  30.   $epos=0;
  31.   $mixed_cool="";
  32.   do
  33.   {
  34.    $epos=stripos($mixed_code,$phpmark,$spos);
  35.    if($epos!==false)
  36.    {
  37.     $html_code=substr($mixed_code,$spos,$epos-$spos);
  38.     $mixed_cool.="echo('$html_code');";
  39.     $spos=$epos+$phpmarkslen;
  40.     $epos=stripos($mixed_code,$phpmarkend,$spos);
  41.     if($epos!==false)
  42.     {
  43.      $php_code=substr($mixed_code,$spos,$epos-$spos);
  44.      $spos=$epos+$phpmarkelen;
  45.      $mixed_cool.=$php_code;
  46.     }else
  47.     {
  48.      echo("error!no php_end_mark.");
  49.      echo($mixed_code);
  50.      return;
  51.     };
  52.    }else
  53.    {
  54.     $html_code=substr($mixed_code,$spos);
  55.     $mixed_cool.="echo('$html_code');";
  56.    };
  57.   }while($epos!==false);
  58.   eval($mixed_cool);
  59. }
  60. else if($_GET['diy']=="yes"&&$blockclass==="html_html")
  61. {
  62.   echo("自"."定"."义HT"."ML by "."su"."xi"."ao"."ja"."ck fixed");
  63.   echo block_fetch_content($bid,false,false,true);#这里修改了!!!
  64. }
  65. else
  66. {
  67.   echo($mixed_code);
  68. };
  69. }
  70. function block_fetch_content($bid, $isjscall=false, $forceupdate=false,$debug_block=false) {
  71.         global $_G;
  72.         static $allowmem = null;

  73.         if($allowmem === null) {
  74.                 $allowmem = getglobal('setting/memory/diyblockoutput/enable') && memory('check');
  75.         }

  76.         $str = '';
  77.         $block = empty($_G['block'][$bid])?array():$_G['block'][$bid];
  78.         if(!$block) {
  79.                 return;
  80.         }

  81.         if($forceupdate) {
  82.                 block_updatecache($bid, true);
  83.                 $block = $_G['block'][$bid];
  84.         } elseif($block['cachetime'] > 0 && $_G['timestamp'] - $block['dateline'] > $block['cachetime']) {
  85.                 if($isjscall || $block['punctualupdate']) {
  86.                         block_updatecache($bid, true);
  87.                         $block = $_G['block'][$bid];
  88.                 } elseif(empty($_G['blockupdate']) || $block['dateline'] < $_G['blockupdate']['dateline']) {
  89.                         $_G['blockupdate'] = array('bid'=>$bid, 'dateline'=>$block['dateline']);
  90.                 }
  91.         }

  92.         if($allowmem && empty($block['hidedisplay']) && empty($block['nocache'])) {
  93.                 $str = memory('get', 'blockcache_'.$bid.'_'.($isjscall ? 'js' : 'htm'));
  94.                 if($str !== null) {
  95.                         return $str;
  96.                 }
  97.         }

  98.         if($isjscall) {
  99.                 if($block['summary']) $str .= $block['summary'];
  100.                 $str .= block_template($bid);
  101.         } else {
  102.                 $classname = !empty($block['classname']) ? $block['classname'].' ' : '';
  103.                 $str .= "<div id="portal_block_$bid" class="{$classname}block move-span">";
  104.                 if($block['title']) $str .= $block['title'];
  105.                 $str .= '<div id="portal_block_'.$bid.'_content" class="content">';
  106.                 if($block['summary']) {
  107.                         $block['summary'] = stripslashes($block['summary']);
  108.                         #suxiaojack fixed 修正DIY失效问题!!!
  109.                         if($debug_block)
  110.                         {
  111.                                 $debug_bstr=$block['summary'];
  112.                                 $debug_bstr=preg_replace("/\</","&lt;",$debug_bstr);
  113.                                 $debug_bstr=preg_replace("/\>/","&gt;",$debug_bstr);
  114.                                 $str .= "<div class="portal_block_summary">$debug_bstr</div>";#!!!
  115.                         }
  116.                         else
  117.                         {
  118.                                 $str .= "<div class="portal_block_summary">$block[summary]</div>";
  119.                         };
  120.                 }
  121.                 $str .= block_template($bid);
  122.                 $str .= '</div>';
  123.                 $str .= "</div>";
  124.         }

  125.         if($allowmem && empty($block['hidedisplay']) && empty($block['nocache'])) {
  126.                 memory('set', 'blockcache_'.$bid.'_'.($isjscall ? 'js' : 'htm'), $str, getglobal('setting/memory/diyblockoutput/ttl'));
  127.         }

  128.         return !empty($block['hidedisplay']) ? '' : $str;
  129. }
复制代码
DIY中如果有错误,经常会无法再DIY所以,最好是DIY时只有框架,内部自定义的内容都是文字输出。
测试代码:
使用anythingslider幻灯的效果。自定义了ccs显示400x300的幻灯。


  1. <LINK rel="stylesheet" type="text/css" href="/xlfw/sx/slider400x300.css" media="screen">

  2. <SCRIPT type="text/javascript" src="/xlfw/sx/jquery.min.js"></SCRIPT>

  3. <SCRIPT type="text/javascript" src="/xlfw/sx/jquery.easing.1.2.js"></SCRIPT>

  4. <SCRIPT type="text/javascript" charset="utf-8" src="/xlfw/sx/jquery.anythingslider.js"></SCRIPT>
  5. <SCRIPT type="text/javascript">
  6.         function formatText(index, panel) {
  7.                   return index + "";
  8.             }   
  9.         $(function () {        
  10.             $('.anythingSlider').anythingSlider({
  11.                 easing: "easeInOutExpo",        // 定义插件
  12.                 autoPlay: true,                 // 这将关闭整个FUNCTIONALY,如果它不只是开始运行与否。
  13.                 delay: 3000,                    // 自动播放模式下,幻灯片轮换时间
  14.                 startStopped: false,            //如果是自动播放,这可以迫使它停止启动
  15.                 animationTime: 600,             // 幻灯片的过渡时间
  16.                 hashTags: true,                 // 是否跟换hashtag是链接地址
  17.                 buildNavigation: true,          // 如果是真,建立和锚链接列表链接到每张幻灯片
  18.                         pauseOnHover: true,             // 如果是真,并启用自动播放,鼠标经过暂停播放
  19.                         startText: "自动",             // Start text
  20.                         stopText: "暂停",               // Stop text
  21.                         navigationFormatter: formatText       // 在这个文件的顶部使用详情(高级使用)
  22.             });            
  23.             $("#slide-jump").click(function(){
  24.                 $('.anythingSlider').anythingSlider();
  25.             });
  26.         });
  27. </script>
  28. <DIV class="anythingSlider">
  29. <DIV class="wrapper">
  30. <UL>
  31. /?
  32. \$sql="select * from ".DB::table("portal_article_title")." where thumb=1 order by dateline desc limit 0,8";
  33. \$query=DB::query(\$sql);
  34. while(\$row=DB::fetch(\$query))
  35. {
  36.       ?/<LI><div><center><a href="/xlfw/portal.php?mod=view&aid=/?echo("\$row[aid]");?/"><img alt="/?echo("\$row[title]");?/" height=300 src=http:///?echo("\$_SERVER[SERVER_NAME]");?//xlfw/data/attachment/portal//?echo("\$row[pic]");?/></a></center></div></LI>
  37. /?};?/
  38. </UL>
  39. </DIV></DIV>

复制代码


上述代码调试修正后工作正常。注意\的写法,一个\这个要这样表示\$slash="\\\\";用\$slash吧,有点恐怖哈哈。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-9-29 01:23 , Processed in 0.131972 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表