澳门新葡萄京娱乐场 47

澳门新葡萄京娱乐场phpcms v9 ecshop2.3.7 discuz x3.0整合

有时,我们希望调用随机的信息。

1. ajax对xml的接收和处理

第一步:完全安装Phpcms v9 和 Discuz! X3.0的最新版

可以在生成标签的时候,标签参数中的排序参数用:rand()。引号不用。

xml主要作用:

  小编是将Phpcms
v9安装在根目录,然后在根目录新建一个bbs目录安装Discuz!
X2.5,本教程中的路径是以此安装目录为例的,站长们操作时应该以自己实际情况更改路径。另小编制作测试本教程时使用的是最新版的程序,所以不保证所有版本按照本教程都能整合成功,建议将程序升级到最新版。

比如:

主要保存和传输数据

第二步:在 UCenter 中添加“phpsso 应用”

[ecmsinfo]2,10,32,0,0,2,0,,rand()[/ecmsinfo]

1. xml文档结构

  登录Discuz!
X3.0后台,进入“UCenter”,点击“应用管理”后点击“添加新应用”进入应用添加界面,设置如下:

但如果信息量很大的时候,比如上万后。严重影响生成速度。不建意使用。

澳门新葡萄京娱乐场 1

澳门新葡萄京娱乐场 2

如果确实要使用,可以用下面思路:

dom操作xml

  1、安装方式选择“自定义安装”

先用php随机出信息ID,然后SQL调用用id in (php随机的ID列表)

getElementsByTagName(); //根据标签名获取元素

  2、应用类型选择“其他”

比如:

childNodes //获取元素下面的子节点,返回数组

  3、应用名称填“phpsso”

?php$randnum=10; //随机数量$randids='';$randdh='';for($i=1;$i=$randnum;$i++){ $randids.=$randdh.rand(1,100000); //1为最小ID,100000为最大ID $randdh=',';}?[e:loop={栏目ID,显示条数,操作类型,只显示有标题图片,id in ($randids)}]模板代码内容[/e:loop]

nodeValue //获取节点的文本值

  4、应用的主 URL,
即phpsso_server的路径,视实际情况而定,注意最后不要带斜杠。如本教程填写为

问题,如何获取html中的form标签元素

  5、通信密钥,任意填写64字节以内的英文字母及数字,不过要记住,因为phpcms
的通信密钥必须与此设置保持一致,否则 phpsso 将无法与 UCenter
正常通信。如本教程设置通信密钥为:chinaz

答:document.getElementsByTagName(‘form’)[0];

  6、应用IP、应用的物理路径、查看个人资料页面地址默认留空即可,而应用接口文件名称默认uc.php即可。

//获取上面的xml结构的book

  7、标签单条显示模板、标签模板标记说明两项默认留空即可。

document.getElementsByTagName(‘book’)[1];

  8、是否开启同步登录:是。只有开启后,两款程序才能实现同步登录。

//获取第二本书的名称(盗墓笔记)

  9、完成后提交,将生成新的应用ID。(记住这个应用ID,在”第三步“中将用到它。)

document.getElementsByTagName(‘book’)[1].childNodes[0].childNodes[0].nodeValue;

  10、进入后台“站长”,“UCenter
设置”选项。”是否允许直接激活”一项,选择“是”。

注意一点:获取文本节点的时候需要在调用一次childNodes[0].nodeValue

  下面去Phpcms v9中配置phpsso。

2. 使用ajax获取php输出的xml结构文档

第三步:配置phpsso

服务端输出xml数据:

  登录Phpcms
v9后台,进入“phpsso”,点击“系统设置”,进入“UCenter配置”设置界面,设置如下:

澳门新葡萄京娱乐场 3

澳门新葡萄京娱乐场 4

console.log()或console.info()调试工具的使用:

  1、是否启用:是

澳门新葡萄京娱乐场 5

  2、Ucenter api
地址,即uc_server的路径,根据你的安装情况而定,注意最后不要带斜杠。如本教程填写为:

使用ajax来请求php输出的xml数据:

  3、Ucenter
数据库信息:根据自己情况填写数据库的信息。其中数据库表前缀的格式为“`数据库名`.数据库前缀”,注意数据库名的不是单引号。

澳门新葡萄京娱乐场 6

  4、应用id(APP ID),即第二步创建的 phpsso 应用时自动生成的应用ID。

澳门新葡萄京娱乐场 7

  5、Ucenter
通信密钥,即第二步中设置的“通信密钥”,这两个值一定要确保一致,否则会导致无法通信。

运行结果:

  第四步:查看通信状态

澳门新葡萄京娱乐场 8

  登录Discuz!
X3.0后台,进入“UCenter”,点击“应用管理”查看第二步中创建的 phpsso 应用与
UCenter
通信是否成功。如果通信失败,请检查“第二步”与“第三步”中的各项参数配置是否正确。

2. json(数据传输格式)

澳门新葡萄京娱乐场 9

1. 什么是json

  第五步:修改 Discuz!  X3.0会员登录相关。

什么是json?

  若不修改此处则在Phpcms v9登录后可以同步登录到Discuz! 
X3.0,但是在Discuz!  X3.0登录却无法同步登录到Phpcms v9。修改步骤如下:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

  1、找到discuz目录下 templatedefaultmemberlogin.htm,删除

JSON的优点:

onsubmit="{if $this->setting['pwdsafety']}pwmd5('password3_$loginhash');{/if}pwdclear = 1;ajaxpost('loginform_$loginhash', 'returnmessage_$loginhash', 'returnmessage_$loginhash', 'onerror');return false;"

1、Javascript原生支持,后台语言几乎全部支持;

  2、找到discuz目录下 templatedefaultmemberlogin_s imple.htm
,删除

2、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

onsubmit="{if $_G['setting']['pwdsafety']}pwmd5('ls_password');{/if}return lsSubmit();"

3、可读性较强,虽然比不上XML那么一目了然,但是xml组装生成麻烦,json易于解析和生成

  3、找到discuz目录下 /source/function/function_message.php ,查找

2.js中的json

$param['header'] = true;

例,用json描述一本书的信息

  替换为

var json={ ‘title’:’盗墓笔记’ , ‘price’:’100′ };

$param['header'] = false;



第六步:安装ecshop 版本v2.7.3 release 20121106
1.把discuz X3.0程序包里面的uc_client整个文件夹拷贝一份到ecshop根目录下面,不需要拷贝uc_server。
2.登录ec后台,点击会员管理栏目的会员整合,在显示的页面中点击ucenter后面的安装按钮
3.在显示的窗口中输入ucenter的URL以及创始人密码(温馨提示:ucenter的URL就是dz程序包里面uc_server文件夹的绝对地址,ucenter创始人密码是安装dz过程中自己设置的)
4.这也是最后一步,点击下一步选择强制转为同一用户;
5.同时清除discuz、ucenter、ecshop、phpcms四个系统的缓存

基本: json以”{“开始,”}”结束

解决 Ecshop 2.7.3 与 Discuz! X3.0 的同步退出问题

最近一个项目需要整合 Ecshop 和 Discuz。整合过程很简单,最新版的 Discuz! X2 已经自带了 uc_server 和 uc_client。由于主目录是 Ecshop,Discuz 放在 bbs 目录下,为了减少垃圾文件,我全局修改了 Ecshop 里关于 uc_client 的调用路径,改成了 discuz 里自带的,这样两个程序就共用一个 uc_client。

全部设置成接口调用方式后测试发现,两边登陆都可以同步登陆到另一程序上,但退出则无法实现同步登陆。顺着 Ecshop 的退出流程,顺藤摸瓜找到了 lib_common.php 文件中的 uc_call 这个方法。这个方法的第二个参数 $params 的默认值是 null。而 Ecshop 注销时只传了调用 uc_client 中同步退出方法名做为一个参数的值,第二个参数使用的是默认值。而这个方法中通过 call_user_func_array($func, $params); 来调用对应的方法,问题就在这,第二个 $params 参数如果是 null 则 call_user_func_array 执行失败。解决办法很简单,修改 Ecshop 里 lib_common.php 中 function uc_call($func, $params=null) 这一行改成 function uc_call($func, $params=array()) 即可。

整合完成

 

键值对以逗号”,”隔开

键和值之间以冒号”:”隔开

代码示例:

澳门新葡萄京娱乐场 10

3. php中的json

json_encode(数组/对象);

澳门新葡萄京娱乐场 11

json_encode(“索引数组”);============>js数组字符串

json_encode(“关联数组”);============>json字符串

json_encode(“索引关联数组”);============>json字符串

json_encode(“对象”);============>json字符串

代码示例:

澳门新葡萄京娱乐场 12

输出结果:

澳门新葡萄京娱乐场 13

json_decode();

json_decode(“json字符串”,true)重点掌握 =============>返回数组

json_decode(“json字符串”) =============>返回对象

澳门新葡萄京娱乐场 14

澳门新葡萄京娱乐场 15

澳门新葡萄京娱乐场 16

三.使用ajax+json实现多级联动

category表结构:

澳门新葡萄京娱乐场 17

找游戏的子分类;

sql: select * from category where pid=游戏的ID

找食品的子分类;

sql: select * from category where pid=食品的ID

在js中通过JSON.parse()可以把json字符串变成json对象

澳门新葡萄京娱乐场 18

完整代码:

php输出json数据:

澳门新葡萄京娱乐场 19

ajax请求json数据:

澳门新葡萄京娱乐场 20

澳门新葡萄京娱乐场 21

结果:

澳门新葡萄京娱乐场 22

app接口开发:

app接口开发就是我们后台程序员提供一个url地址供app开发者(android和ios)来调用,我们根据接口的参数不同做不同的业务逻辑处理,最后把处理的数据以json的格式输出给我们的app调用者

4. 使用ajax做无刷新分页的案例

1.无刷新的必要性

澳门新葡萄京娱乐场 23

如果我们通过”传统方式”实现上图的商品评论分页效果,每次分页的时候就会使得头部、左侧、底部等已经显示的信息重新从服务器获得出来,这样对带宽、服务器资源、用户等待时间都有额外的损耗。如果使用ajax无刷新分页,每次就只从服务器获得”商品评论区域”信息即可,对各方面资源的使用就有相应节省。因此ajax无刷新分页效果有其存在必要性。

2. 回顾传统分页

商品总记录条数($count)、每页显示多少条($pagesize)

mysql数据库关键字limit。

limit 偏移量,长度。

偏移量:(当前页码($page)-1)*每页显示条数。

第一页: limit 0,7

第二页: limit 7,7

第三页: limit 14,7

ajax无刷新分页是对传统分页效果的封装:

ajax对象.open(‘get’,’./data.php?page=2′);

以上是ajax通过无刷新方式获得第2页数据

传统分页实现代码:

澳门新葡萄京娱乐场 24

澳门新葡萄京娱乐场 25

效果:

澳门新葡萄京娱乐场 26

三,使用ajax做无刷新分页

无刷新分页的核心关键点:把a连接的href属性用js函数操作ajax来获取分页的数据

澳门新葡萄京娱乐场 27

修改分页类分页列表的a连接的href属性,改为js函数调用:

澳门新葡萄京娱乐场 28

注意:可以在a链接的href属性中调用js代码 如: <a
href=”javascript:getData()”> 点我查看 </a>

ajax获取分页的数据代码:

澳门新葡萄京娱乐场 29

运行效果:

澳门新葡萄京娱乐场 30

for in 调试对象的属性:

澳门新葡萄京娱乐场 31

结果:

澳门新葡萄京娱乐场 32

4. 天气预报(掌握ajax跨域)

1.Ajax跨域请求天气预报接口

请求代码:

澳门新葡萄京娱乐场 33

运行结果:

提示跨域请求,请求不到数据:

澳门新葡萄京娱乐场 34

2.如何才算跨域

一个url地址如下:

分成四个部分

黄色请求的协议: http,https

红色:二级域名

浅蓝色:一级域名

绿色:请求的端口号(默认端口是80端口)

只要以上四个部分有不同的地方都算做跨域请求

解决跨域的办法:用php做代理请求,使用ajax直接请求php的代理文件

php获取接口地址(php是可以跨域请求的):

澳门新葡萄京娱乐场 35

输出结果:

澳门新葡萄京娱乐场 36

ajax调用php代理文件实现跨域:

澳门新葡萄京娱乐场 37

输出结果:

澳门新葡萄京娱乐场 38

在线解析json网站:

澳门新葡萄京娱乐场 39

3. 天气代码调用

利用标签的src属性进行跨域

接口网站:

澳门新葡萄京娱乐场 40

代码调用实例:

澳门新葡萄京娱乐场 41

注意script,iframe,img具有跨域能力,因为其元素都有一个src属性,此属性可以无跨域的限制

4. jsonp

JSONP(JSON with Padding) 是一种跨域请求方式。

主要原理是利用了script 标签可以跨域请求的特点,由其 src
属性发送请求到服务器,服务器返回 js
代码,网页端接受响应,然后就直接执行了,这和通过 script
标签引用外部文件的原理是一样的。

比如网页端创建一个 script 标签,并给其 src 赋值为

此时网页端就发起一个请求。服务端将要返回的数据拼好最为函数的参数传入,服务端返回的数据格式类似”echo
process({‘name’:’superfiresun’})”,网页端接收到了响应值,因为请求者是
script,所以相当于直接调用 process 方法,并且传入了一个参数。

代码示例:

php组装生成js方法输出:

澳门新葡萄京娱乐场 42

请求文件如下:

澳门新葡萄京娱乐场 43

5. jquery中的ajax使用

1.jquery中的ajax基本语法

jquery中的ajax已经做好了几乎所有的浏览器的兼容性

$.ajax({

});

传入一个json对象此方法的参数

$.ajax({

type:”post” , //请求方式 get,post

url:”test.php” , //请求地址

data:”name=lisi&age=24″
//请求参数,也可以为json格式数据{‘name’:’lisi’,’age’:24}

cache:false, //防止缓存

async: true , //异步请求

dataType:json, //返回的数据类型text,json

beforeSend :function(){ //发送请求之前调用
相当于ajax状态不等于4的时候触发

} ,

success:function(msg){ //请求成功时候触发的函数 ajax状态等于4的时候触发

} ,

complete:function(){ //请求完成时候触发的函数

} ,

});

1. 使用jquery中的ajax做一个加减乘除的运算

php输出json数据:

澳门新葡萄京娱乐场 44

请求代码:

澳门新葡萄京娱乐场 45

澳门新葡萄京娱乐场 46

请求结果:

澳门新葡萄京娱乐场 47

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注