<script language="javascript">
//获取域名
host = window.location.host;
host2=document.domain;
//获取页面完整地址
url = window.location.href;
document.write("<br>host="+host)
document.write("<br>host2="+host2)
document.write("<br>url="+url)
</script>
<script language="javascript">
//获取域名
host = window.location.host;
host2=document.domain;
//获取页面完整地址
url = window.location.href;
document.write("<br>host="+host)
document.write("<br>host2="+host2)
document.write("<br>url="+url)
</script>
什么是jQuery对象?
—就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。
比如:
$("#test").html()
意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法
这段代码等同于用DOM实现代码:
document.getElementById("id").innerHTML;
虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错。比如:$("#test").innerHTML、document.getElementById("id").html()
之类的写法都是错误的。
还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById(“id”)得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。
既然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。在再两者转换前首先我们给一个约定:如果一个获取的是 jQuery对象,那么我们在变量前面加上$,如:var $variab = jQuery对象;如果获取的是DOM对象,则与习惯普通一样:var variab = DOM对象;这么约定只是便于讲解与区别,实际使用中并不规定。
jQuery对象转成DOM对象:
两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);
(1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。
如:var $v =$("#v") ; //jQuery对象
var v=$v[0]; //DOM对象
alert(v.checked) //检测这个checkbox是否被选中
(2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象
如:var $v=$("#v"); //jQuery对象
var v=$v.get(0); //DOM对象
alert(v.checked) //检测这个checkbox是否被选中 Continue reading
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<style type="text/css"> .test1{ width: 80%; min-height: 80px; text-align: center; line-height: 80px; color: White; font-size: 20px; filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='0'); background: -moz-linear-gradient(top, #00BFFF, #0000CD); background: -o-linear-gradient(top,#00BFFF, #0000CD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#00BFFF), to(#0000CD)); } .test2{ width: 80%; min-height: 80px; text-align: center; line-height: 80px; margin-bottom: 10px; color: White; font-size: 20px; filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='0'); background: -moz-linear-gradient(bottom, #00BFFF, #0000CD); background: -o-linear-gradient(bottom,#00BFFF, #0000CD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#00BFFF), to(#0000CD)); } .test3 { width: 45%; min-height: 80px; text-align: center; line-height: 80px; margin-bottom: 10px; color: White; font-size: 20px; filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='1'); background: -moz-linear-gradient(left, #00BFFF, #0000CD); background: -o-linear-gradient(left,#00BFFF, #0000CD); background: -webkit-gradient(linear, 0% 0%, 100% 0%, from(#00BFFF), to(#0000CD)); } .test4 { width: 45%; min-height: 80px; text-align: center; line-height: 80px; margin-bottom: 10px; color: White; font-size: 20px; filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='1'); background: -moz-linear-gradient(right, #00BFFF, #0000CD); background: -o-linear-gradient(right,#00BFFF, #0000CD); background: -webkit-gradient(linear, 0% 0%, 100% 0%, from(#00BFFF), to(#0000CD)); } </style> <div> <div class="test1">垂直渐变:上->下</div> <div class="test2">垂直渐变:下->上</div> </div> <div> <div class="test3" style="display: inline-block;">水平渐变:左->右</div> <div class="test4" style="display: inline-block;">水平渐变:右->左</div> </div> |
filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#00BFFF',endColorStr='#0000CD',gradientType='0');
参数:startColorStr起始颜色 endColorStr结束颜色 gradientType为0时代表垂直,为1时代表水平
background: -moz-linear-gradient(top, #00BFFF, #0000CD);
参数:top、bottom垂直,left、right水平 例如:top时从顶部由#00BFFF到#0000CD渐变,bottom时从底部由#00BFFF到#0000CD渐变
background: -o-linear-gradient(top,#00BFFF, #0000CD);
参数:top、bottom垂直,left、right水平 例如:top时从顶部由#00BFFF到#0000CD渐变,bottom时从底部由#00BFFF到#0000CD渐变
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#00BFFF), to(#0000CD));
参数:linear线性, x1 x2, x3 x4 x1与x3相同时垂直,x2与x4相同时水平 from起始颜色 to结束颜色
一、原生JS直接改变a标签链接与图片src链接(JS一定要在欲改变的源码之后加载)
0 1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <body> <img id="image" src="/i/tulip.jpg" /> <a id="test" href="http://www.baidu.com/" target="_blank">织梦先生</a> <script> document.getElementById("image").href="/myimg.jpg"; document.getElementById("test").href="http://mrdede.com/"; </script> </body> </html> |
原始图片是tulip.jpg,改变后的图片myimg.jpg。
a标签改变后的链接是http://mrdede.com/
二、引入jQuery方法改变a标签链接与图片src链接(应该是任意jQuery版本都可以,JS一定要在欲改变的源码之后加载)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<!DOCTYPE html> <html> <body> <script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <img id="image" src="/i/tulip.jpg" /> <a id="test" href="http://www.baidu.com/" target="_blank">织梦先生</a> <script type="text/javascript"> var w = $(document).width(); if(w < 768){ $('.image').attr('src','/myimg.com'); $('.test').attr('href','http://mrdede.com'); $(".test").text('百度'); } </script> </body> </html> |
原始图片是tulip.jpg,改变后的图片myimg.jpg
a标签改变后的链接是http://mrdede.com/
原始文本是“织梦先生”,改变后文本是“百度”
其中加了判断,当前可使用屏幕宽度小于768时,改变图片链接、a标签链接和文本内容。
织梦二次开发,一是让系统更适合自己,为我所用;二是没有绝对完美的东西,修改它的BUG。
织梦图集模型增加数据类型为“HTML文本”的自定义字段 发布着色内容出错,表面上看是这样的,但实现上是在打开修改图集内容页时的返回值出错,再准确一点说,是HTML文本在修改查看时被过滤了一次而出错(把原来的<span style…替换成了<span x=”">yle…)。
因为在发布完图集内容后,我查看数据表dede_addonimages数据内容,是正常并正确的。所以问题就不是出在发布的环节,也没必要研究/dede/album_add.php这个文件了(之前我走了弯路)。
(到这一步之前也走了一些弯路)那么现在就来研究/dede/album_edit.php这个文件,发现是$addRow=XSSClean($addRow);这句在作怪,注释掉,OK!
整个56行$arcRow=XSSClean($arcRow);$addRow=XSSClean($addRow);
都可以注释掉。之所以说这行都可以注释掉是因为在文章模型的修改文档文件(/dede/archives_edit.php)中就没有这各方法过滤,根本就没有出现XSSClean()方法。
其它,那个过滤规则最终是指向\include\helpers\filter.helper.php的RemoveXSS方法的,没去细研究。
天亮了,睡了……
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态、加速度等数据(另还有deviceOrientation事件提供了设备角度、朝向等信息)。
而通过DeviceMotion对设备运动状态的判断,则可以帮助我们在网页上就实现“摇一摇”的交互效果。
事件监听
演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo.html
把监听事件绑定给 deviceMotionHandler
0 1 2 3 4 |
if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', deviceMotionHandler, false); } else { alert('本设备不支持devicemotion事件'); } |
获取设备加速度信息 accelerationIncludingGravity
0 1 2 3 4 5 6 7 |
function deviceMotionHandler(eventData) { var acceleration = eventData.accelerationIncludingGravity, x, y, z; x = acceleration.x; y = acceleration.y; z = acceleration.z; document.getElementById("status").innerHTML = "x:"+x+"<br />y:"+y+"<br />z:"+z; } |
将加速度信息打印置页面,通过演示地址可以看到随着设备的移动,屏幕上数字的变化。
摇晃判断
演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo_1.html
“摇一摇”的动作既“一定时间内设备了一定距离”,因此通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,即可进行设备是否有进行晃动的判断。而为了防止正常移动的误判,需要给该变化率设置一个合适的临界值。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var SHAKE_THRESHOLD = 800; var last_update = 0; var x = y = z = last_x = last_y = last_z = 0; if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', deviceMotionHandler, false); } else { alert('本设备不支持devicemotion事件'); } function deviceMotionHandler(eventData) { var acceleration = eventData.accelerationIncludingGravity; var curTime = new Date().getTime(); if ((curTime - last_update) > 100) { var diffTime = curTime - last_update; last_update = curTime; x = acceleration.x; y = acceleration.y; z = acceleration.z; var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; var status = document.getElementById("status"); if (speed > SHAKE_THRESHOLD) { var text = "x:"+x+"<br />y:"+y+"<br />z:"+z+"<br />speed:"+speed; status.innerHTML = text; } last_x = x; last_y = y; last_z = z; } } |
100毫秒进行一次位置判断,若前后x, y, z间的差值的绝对值和时间比率超过了预设的阈值,则判断设备进行了摇晃操作。
然后通过上面2个演示,然后再增加点样式效果,即可模拟一个简单的微信摇一摇界面。
应用演示:简易模拟微信摇一摇
演示地址(手机浏览):http://mrdede.com/UploadFiles/demo/js/shake/demo_2.html
使用织梦内容管理系统建站,想在频道页或列表面显示文章顺序号、隔行变色、每五行一个小区块儿等等效果,这个功能就要大显伸手了。之前我也总结过一些关于织梦标签的调用方法手册,可以直接做为工具页来直接复制。
列表页使用方法:
0 1 2 3 |
{dede:arclist titlelen='26' row='10'} <li><a title="[field:title function='htmlspecialchars(@me)'/] " href="[field:arcurl /]">[field:title /]</a></li> [field:global name=autoindex runphp="yes"]if(@me%5==0)@me="<hr/>";else @me="";[/field:global] {/dede:arclist} |
织梦列表页隔行换色(可以通过写the和that两类的样式来实现不同背景色):
0 1 2 |
{dede:arclist titlelen='26' row='10'} <li class="[field:global name=autoindex runphp='yes']if(@me%2==0)@me='the';else @me='that';[/field:global]"><a title="[field:title function='htmlspecialchars(@me)'/] " href="[field:arcurl /]">[field:title /]</a></li> {/dede:arclist} |
可以使用在dede:arclist和dede:list下,使用的织梦列表页另一种方法(显示自然顺序标号):
0 1 2 3 4 5 6 7 |
{dede:list pagesize='12'} <li> [field:global name=autoindex runphp="yes"]@me=@me++;[/field:global] <a href="[field:arcurl/]" class="pic"><img src="[field:litpic/]" alt="[field:title function='html2text(@me)'/]"/></a> <a href="[field:arcurl/]" class="title">[field:title/]</a> <span class="date"><small>最后更新:</small>[field:pubdate function="GetDateMK(@me)"/]</span> </li> {/dede:list} |
频道页使用方法:
0 1 2 |
{dede:global name='itemindex'/} {dede:global name='itemindex' runphp='yes'}if(@me%5==0)@me="<hr/>";else @me="";{/dede:global} {dede:global name='itemindex' runphp='yes'}@me=@me+1;{/dede:global} |
大体意思就是这样,至于加在什么位置,就自己选吧!
织梦默认的搜索页不支持autoindex标签,需要修改核心文件增加支持:
找到文件:include/arc.searchview.class.php
第一处:
0 1 2 3 |
//找到代码 $this->dtp2->LoadSource($innertext); //增加代码如下 $GLOBALS['autoindex'] = 0; |
第二处:
0 1 2 3 4 5 |
//找到代码 if($row = $this->dsql->GetArray("al")) { //增加代码如下 $GLOBALS['autoindex']++; $ids[$row['id']] = $row['id']; |
dedecms二次开发中对数据库操作类的使用尤为重要,下面是对数据库操作类的一些简单说明和实例。
引入common.inc.php文件
0 |
require_once (dirname(__FILE__) . "/include/common.inc.php"); |
查询某表是否存在,存在返回TRUE,否则返回FALSE
0 1 2 3 4 5 6 |
if($dsql->IsTable("dede_addonarticle,#@__archives")){ //注意“#@__”,是两个下横杠 echo "表存在"; exit; }else{ echo "表不存在"; exit; } |
获取一条记录的内容
0 1 |
$row = $dsql->GetOne("Select * From dede_* where id = $aid"); echo $row['id']; |
将查询获取总数输出
0 1 |
$row = $dsql->GetOne("select count(*) as dd where typeid = $typeid"); echo $row['dd'];//输出总数 |
将查询的若干条记录输出
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
$sql = "Select * from dede_*"; $dsql->SetQuery($sql);//将SQL查询语句格式化 $dsql->Execute();//执行SQL操作 //通过循环输出执行查询中的结果 while($row = $dsql->GetArray()){ echo $row['id']; echo $row['title']; } //或者采取这种方式输出内容 while($row = $dsql->GetObject()){ echo $row->id; echo $row->Title; } |
将查询的若干条记录输出dedecms5
0 1 2 3 4 5 6 |
$dsql->SetQuery("Select id,typename From `#@__arctype` where reid=0 And channeltype=1 And ishidden=0 And ispart<>2 order by sortrank"); $dsql->Execute(); while($row=$dsql->GetObject()) { $channellist .= "<a href='wap.php?action=list&id={$row->id}'>{$row->typename}</a> "; echo $row->id; } |
插入一条记录
0 1 2 3 4 |
$sql = " INSERT INTO `dede_member_flink`(mid,title,url,linktype,imgurl,imgwidth,imgheight) VALUES(".$cfg_ml->M_ID.",'$title','$url','$linktype','$imgurl','$imgwidth','$imgheight');";//插入记录数据库 $dsql->SetQuery($sql);//格式化查询语句 $dsql->ExecNoneQuery();//执行SQL操作 |
经实践证明,上面的语句不能正常插入数据库,下面是正确的语句
0 1 2 3 4 |
$sql = " INSERT INTO `dede_member_flink`(mid,title,url,linktype,imgurl,imgwidth,imgheight) VALUES(".$cfg_ml->M_ID.",'$title','$url','$linktype','$imgurl','$imgwidth','$imgheight');";//插入记录数据库 $dsql->ExecuteNoneQuery($sql);//执行SQL操作 $gid = $dsql->GetLastID();//获取刚刚插入的id |
删除一条记录
0 1 2 3 4 |
$sql = "Delete From dede_member_flink where aid='$aid' And mid='".$cfg_ml->M_ID."';"; $dsql->SetQuery($sql); $dsql->ExecNoneQuery(); //或者使用简化模式 $dsql->ExecNoneQuery("Delete From dede_member_flink where aid='$aid' And mid='".$cfg_ml->M_ID."';"); |
更新一条记录
0 1 2 3 4 5 6 |
$upquery = " Update dede_member_flink set title='$title',url='$url',linktype='$linktype', imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight' where aid='$aid' And mid='".$cfg_ml->M_ID."'; "; $rs = $dsql->ExecuteNoneQuery($upquery); |
判断获取数据库内容的常用方法
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$row = $dsql->GetOne("Select * From dede_moneycard_type where tid={$pid}"); if(!is_array($row)){ echo "失败"; exit(); } ///////////////////////////// $upquery = " Update dede_member_flink set title='$title',url='$url',linktype='$linktype', imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight' where aid='$aid' And mid='".$cfg_ml->M_ID."'; "; $rs = $dsql->ExecuteNoneQuery($upquery); if($rs){ echo "成功"; }else{ echo "失败"; } |
获取总数
0 1 2 3 |
$dsql = new DedeSql(false); $dsql->SetQuery("Select * from `dede_admin` where userid='$userid' Or uname='$uname'"); $dsql->Execute(); $ns = $dsql->GetTotalRow(); |
关闭数据库
0 |
$dsql->Close(); |
错误提示信息:
install/remove of the service denied
#2002 无法登录 MySQL 服务器
错误1053 服务没有及时响应启动或控制请求
弄了一宿,真的很难很难呀!转着很大的圈儿,疯了疯了!
前些年一直在用wamp,操作简单,本地调试单个网站足够用了。从今年年初开始使用了phpStudy集成环境,PHP版本多,用着还不错。
最近帮人改一个asp源码样式,需要本地测试,结果安装上了IIS。可昨天闲着没事,实然想起这phpStudy也可以把IIS与PHP集成的功能,弄上了是一个问题接着一个问题,自己还不想放弃。
系统:wid7 IIS7.x 买好几年了,配置过时了但还不舍。
环境:phpStudy集成环境(2014版集合24种环境自由选择)
win7下安装IIS是傻瓜式安装,网上方法多的是,就不说了,我也没碰到问题;
手动配置cgi模式(php5.4/5.3)
1.创建并配置php.ini,同上2。
2.打开IIS7,在主面板中双击处理程序映射,然后在右侧菜单中点击“添加模块映射…”(之前我就添加错了,添加的脚本映射),设置如下:
请求路径:*.php;
模块:FastCgiModule;
可执行文件:php文件夹中的php-cgi.exe;
名称:php;
3.完成!
(还有其它方法,但我认为这是最方便的)
建立站点,在根目录新建info.php测试文件,内容为<?php phpinfo(); ?>,测试是否成功。
将MySQL 添加到服务中。
在C:\Windows\System32\文件夹下找到cmd.exe,右键单击cmd.exe, 选择“以管理员身份运行”(或“Run as administrator”),窗体左上角显示“管理员:C:\…”,进入路径(这是我的路径,你的路径我就不知道了,哈哈): d:\tool\phpStudy\mysql\bin>
输入 mysqld –install MySQL –defaults-file=”C:\Windows\my.ini”
如果提示:Service successfully installed.
说明MySQL服务已经添加系统服务成功。
如果提示:install/remove of the service denied
可能是你没有使用管理员身份运行cmd.exe
***************************************
2015 年11月,由于本人笔记本用得比较狠,前几天突然卡死(蓝屏),提示是硬盘出现问题,但是用DELL自身的硬件检测,并没有发现任何问题,可是由于数据很 重要,而且之前在使用中也时不时的出现“无响应”现象,所以果断决定换个固态硬盘太小的真的没意义呀,还不如多花点钱买个差不多的,所以在某宝上买了个镁 光480G的,不是最贵最好的,但是从各方面看,适合我,1000元、存储空间正好。
换了硬盘就得重做系统,硬盘来的时候是让老板给做得系统,windows10,还怕我电脑带不了呢,回来接上试用还可以,各方面都没有不兼容的现象发生,这点很满意。
新系统,我这配置本地测试环境得折腾个把月的,才能完全的配置好,并且适应在新环境下的工作。
使用集成环境相对的好配置一些,使用phpStudy很长时间了,直到刚才才知道phpStudy有集成的IIS+MySQL环境,但是晚了,而且想想,如果不用集成的IIS还是不用得好。
这次到了把MySQL服务配来系统服务这步卡住了(1067错误),合着是卡了有两天了。反正到现在是弄好了,具体是什么原因、怎么弄好的,我也说不清。
昨天安装完MySQL服务后不好使,我也再删再安了几次,都没有好。今天只是把昨天安装的windows功能给删除重新安了一次后,删除MySQL服务后,又安装MySQL服务,就好了。
还忘说了些事,也可能是很重要的,我今天把my.ini文件放到c:\windows\目录下了,所有有很多文章和方法,但是都没有说这一点,也不知道是用不着呀?还是都是照一个人抄的。切记切记!!!
还是以管理员身份打开cmd.exe,目录到d:\tool\phpStudy\mysql\bin>
删除MySQL到系统服务中的方法:mysqld -remove
安装MySQL到系统服务中的方法:mysqld -install
***************************************
cmd的一些命令(不区分大小写):
输入 d: 按回车,直接进入D盘;
输入 cd tool\phpStudy\mysql\bin 按回车,进入bin文件夹;
输入 cd\ 按回车,返回根目录,如D盘或C盘;
输入 cd.. 按回车,返回上一级目录;
输入 dir 按回车,显示当前文件夹内的文件夹和文件名。
(这些cmd命令够用了)
由 于phpStudy的IIS7/8+PHP5xx的phpMyAdmin的默认链接是http://localhost:8980/phpmyadmin /index.php,所以现在在IIS中建立站点,端口是8980,路径为D:\tool\phpStudy\WWW\。
要注意的是一定要把WWW做为些站点的根目录,phpmyadmin为站点的一级目录。
说到这里,如果正常的话,就已经配置成功了。
说说我的一些错误:
(这 里是错误的方法)由于phpStudy的phpMyAdmin是在网站内部的,我就想着这回可以在IIS中给他单独建立站点(端口设置8080)就可以访 问了,于是乎错误就此开始了,倒是可以访问到http://localhost:8080/index.php,登录不进去,提示“#2002 无法登录 MySQL 服务器”,想一想,后来到网上搜了搜,发现是没有启动MySQL服务。
在配置MySQL时,最初我是没有用管理员身份打开cmd.php,我是直接在运行中输入cmd后进入的cmd窗体,可能是这个原因。在启动MySQL时报错:错误1053 服务没有及时响应启动或控制请求。
转 回头使用链接http://localhost:8080/index.php,还是无法连接MySQL,又是一阵搜,没什么好的结果。就想着在 phpStudy的配置项中找找原因,无意间点了下“MySQL管理器”,发现他的链接是http://localhost:8980 /phpmyadmin/index.php,我都蒙了,以为是我在IIS中建立站点的端口号怎么给写成8980了呢,查看一下,是8080,又一想是不 是之前使用Apache时建立的根目录站点的端口号是8980,查看几个,发现在没有。这下放心了,我可以直接在IIS中改端口号和路径,理论上通过了, 实际一改,成功了!!!