• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

织梦吧 - dedecms,网站模板,建站教程,图片素材免费下载

DedeCMS视频教程
当前位置: 织梦吧 > CMS教程 > discuz教程 >

数据调用分析

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-07点击:
 

数据调用可以增加网站数据调用的灵活性,让其它网站也能够调用论坛的数据信息(外部数据调用)

数据调用使用:
进入后台 -- 门户 -- 模块管理 --数据调用
然后,添加调用  。添加成功之后,管理员可以选择:内部调用、外部调用,两种方式。
内部调用:如,<!--{block/314}--> 用将这样的代码放入到模板中即可,在浏览的时候,程序会自动处理
外部调用:如:<script type="text/javascript" src="http://localhost/x2zs/api.php?mod=js&bid=314"></script> 将这种代码放到想要展示的地方。注意:如果将js代码放置在论坛之外的程序中,由于没有样式控制,展示会混乱。因此需要管理员在调用js代码的地方添加样式、或者在添加调用模块的时候,直接在模板中定义样式控制
如:

  1. <div class="module cl xl xl1"> 
  2.  
  3. <style type="text/css"> 
  4.  
  5.    ul {  
  6.  
  7.      list-style:none;  
  8.  
  9.    }  
  10.  
  11. </style> 
  12.  
  13. <ul> 
  14.  
  15. [loop]  
  16.  
  17. <li><a href="{url}" title="{title}"{target}>{title}</a></li> 
  18.  
  19. [/loop]  
  20.  
  21. </ul> 
  22.  
  23. </div> 

外部调用的链接是不会被伪静态化,原因:discuz!伪静态原理是将模版输出前的链接替换,js是调用输出的数据是不被伪静态化

数据调用原理:

内部调用: 将<!--{block/314}-->这种代码放置到模板中的时候,在模板被解析的时候
打开:class_template.php

$template = preg_replace("/[\n\r\t]*\{block\/(\d+?)\}[\n\r\t]*/ie", "\$this->blocktags('\\1')", $template);
这里将 <!--{block/314}-->这样的代码进行替换 ,最终得到的是类似这样的代码:<?php block_display('$bid');?>

block_display函数的功能:等同于block_display_batch 模块显示,具体过程这里不做分析

外部调用:
<script type="text/javascript" src="http://localhost/x2zs/api.php?mod=js&bid=314"></script>

从这段代码中可以看出,访问的是接口api.php
从 api.php?mod=js可以分析出: 最终进入到文件,api\javascript\javascript.php

  1. header('Expires: '.gmdate('D, d M Y H:i:s', time() + 60).' GMT');  
  2.  
  3.  
  4.  
  5. if(!defined('IN_API')) {  
  6.  
  7.         exit('document.write(\'Access Denied\')');  
  8.  
  9. }  
  10.  
  11.  
  12.  
  13. loadcore();  
  14.  
  15.  
  16.  
  17. include_once libfile('function/block');  
  18.  
  19.  
  20.  
  21. loadcache('blockclass');  
  22.  
  23. $bid = intval($_G['gp_bid']);  
  24.  
  25. block_get_batch($bid);  
  26.  
  27. $data = block_fetch_content($bid, true);  
  28.  
  29.  
  30.  
  31. $search = "/(href|src)\=(\"|')(?![fhtps]+\:)(.*?)\\2/i";  
  32.  
  33. $replace = "\\1=\\2$_G[siteurl]\\3\\2";  
  34.  
  35. $data = preg_replace($search, $replace, $data);  
  36.  
  37.  
  38.  
  39. echo 'document.write(\''.preg_replace("/\r\n|\n|\r/", '\n', addcslashes($data, "'\\")).'\');';  
标签:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 tom@tiptop.cn ,  QQ