彻底解决zend studio 下 assignment in condition警告

2012年4月10日 没有评论

最近在mac系统下安装zend studio作为php开发工具,把以前的代码导入,发现项目中有很多 “assignment in condition”的警告,造成原因是在条件判断的if、while中使用了如下类似的做法:

if ($res = $other)

while (($row = $res->fetchRow(DB_FETCHMODE_OBJECT))) 

想去掉这个警告有多种方法,这里列出两种,第一种是从代码的角度,把代码写的更健壮,例如:

if (($res = $other) != FALSE)

while (($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) != FALSE) 

但是往往项目中会使用到第三方php代码,第三方代码可能会有大量这种警告,如果自己逐个修改,那还是一件比较麻烦的事,这里提供的第二种方法是通过修改zend studio设置,彻底忽略这类警告提示信息。

具体设置为,依次打开 偏好设置 –> PHP –> Semantic Analysis Properties,展开右边Potential Programmer Problems,在其下面可以找到“Assignment in condition(e.g. ‘if(a=b)’),把Warning修改Ignore,保存设置就彻底去掉这个警告提示了。

修改open free chart bar图的宽度

2012年3月18日 没有评论

用open free chart来显示bar(柱状)图时,bar的宽度是x轴的长度以及x轴元素个数有关,默认的宽度是:x轴的长度除以元素个数乘以0.8,当x轴的原始个数比较少,那么bar的宽度就比较宽,可能显示的图不美观。

可以通过修改源代码重新编译来改变bar的默认宽度,关于如果编译open free chart,可以参考:自己动手编译Open Flash Chart

修改文件位于根目录下的ScreenCoords.as文件中,在public function get_bar_coords( index:Number, group:Number ):Object 函数中 默认设置为:

var bar_set_width:Number = item_width*0.8;

可以自己根据需要设置,可以设置固定值,也可以调整比例,例如把0.8调整至0.5,修改后重新编译就可以。

分类: web前端 标签:

Open Flash Chart X坐标显示中文

2012年3月12日 2 条评论

从官网上下载的已编译好ofc的swf文件,x坐标是无法显示中文的,对于中文系统的用户,似乎有点不够友好,好在作者提供了源代码,我们只需要简单的修改就可以实现显示中文的功能。关于如何编译,可以查看文章:自己动手编译Open Flash Chart

需要说明的是,由于x坐标上的文本支持旋转,所以必须需要在swf中内嵌字体,作者也给出了这样的注释:Ugh, ugly code so we can rotate the text。作者内嵌的字体是Arial,该字库不支持中文,我们可以使用SimSun字体代替,它也是window操作系统是默认字体,但是体积比英文字体Arial大很多,所以最后编译出来的swf也比较大,我编译出来的大小是6.8M。

通过FlashDevelop打开项目,在open-flash-chart/elements/axis 下找到XAxisLabels.as文件并打开它,按如下提示修改:

修改 1:
注释下面内容,大概在25行
[Embed(systemFont = 'Arial', fontName = 'spArial', mimeType = 'application/x-font')]

在下面增加如下内容,如果系统没有安装SimSun,需要先安装
[Embed(systemFont = 'SimSun', fontName = 'spSimSun', mimeType = 'application/x-font')]

修改 2:
大概在226行有如下代码
fmt.font = "spArial";
把spArial替换成上述fontName指定的值,即
fmt.font = "spSimSun";

代码修改完后,重新编译,应该会在当前目录下重新生成一个新的swf,此swf就能让x坐标显示中文了。

上述编译好的新swf虽说能正常在x坐标上显示中文,但是由于体积庞大,用户体验应该不会太好。目前我的解决办法是,同时让原始swf和先编译好的swf一起加载,原始swf体积小,会在第一时间呈现给用户,体积大flash让其要一个隐藏的div中慢慢加载,当它加载完成时,隐藏先前显示的swf,用能显示中文的swf替换,这样效果还不错,另外浏览器有缓存功能,所以一旦某次成功加载过显示中文的swf,以后显示的速度还是蛮快的。改天有空做一个demo看看。

分类: web前端 标签:

自己动手编译Open Flash Chart

2012年3月11日 没有评论

Open Flash Chart是一个优秀的报表图形工具,由ActionScript 3.0语言开发的。通过它可以很简单的实现线状图、柱状图(包括3D)、饼图等。同时它提供了基于PHP, Perl, Python, Ruby, .NET, Google Web Toolkit 以及 JAVA来生成数据的库文件。

项目的主页:http://teethgrinder.co.uk/open-flash-chart-2,可以在http://teethgrinder.co.uk/open-flash-chart-2/downloads.php下载到最新版本,本文下载的是版本是:Version 2 Lug Wyrm Charmer(似乎这个版本是2009年发布,以后就没有再更新了),作者提供了AS3的源代码,我们可以通过源代码重新编译生成新的swf。

需要下载的工具有FlashDevelop和Flex SDK

FlashDevelop 下载地址:http://www.flashdevelop.org/community/viewforum.php?f=11

Flex SDK 下载地址:http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3

下载安装上述软件后就可以动手编译了,本人是在windows下编译,FlashDevelop版本为3.0,Flex SDK版本为3.2。

Open Flash Chart的源代码位于压缩包(open-flash-chart-2-Lug-Wyrm-Charmer.zip)中的open-flash-chart文件夹里,解压下载的压缩包,进入open-flash-chart文件夹,点击open-flash-chart.as3proj,此时项目就通过FlashDevelop打开了,要编译前还需要指定一下Flex SDK位置,步骤为:Tools –> program settings,在出来的对话框左边的Plugins下面点击AS3Context,然后再右边的language下面可以看到Flex SDK Location,把它指定为本机安装的路径,我的是C:\Tools\Adobe\Flex Builder 3 Plug-in\sdks\3.2.0。至此,就可以自己重新编译Open Flash Chart了。

浏览器出现下载提示框的配置

2012年1月31日 没有评论

当访问某个链接时浏览器是直接把内容显示出来还是出现下载提示框,这个跟当前页面的content-type有关,例如文本、html、css、图片等会直接显示出来,rar、zip等会出现下载提示框。如果需要把文本、图片不直接显示在浏览器中,可以通过人为设置其content-type。tomcat中配置如下:

    <mime-mapping>
        <extension>txt</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>jpg</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>

对于如上配置,当访问扩展名txt或jpg的资源时就出现下载提示框,如果只需要对某些提到的资源让其出现下载提示框,上述配置就不行了,解决的方法是在资源的response头中设置content-type即可,例如:

php 中
header("Content-type:application/octet-stream");
header('Content-Disposition: attachment; filename="downloaded.txt"');

java 中
response.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition", "attachment;filename="downloaded.txt");

如果需要为下载设置一个保存的名字,可以用Content-Disposition属性来指定。

绑定window的onload事件不执行

2012年1月10日 没有评论

今天碰到一个奇怪的问题,在一个外部的js文件中给页面绑定了onload事件,在FF下能正确执行,IE6下却没有执行。最开始以为是绑定事件写的有问题,后来排除,经过多方调试,依然没有找到问题所在。最后还是香烟给我灵感,突然想到会不会是页面是不是已经页面load完了才执行绑定onload的事件?赶紧用测试一把,把window的onload换成document.body的click,点击页面后成功执行了。基本可以肯定是页面load完了才进行绑定操作的。由于是在页面加载的js中用动态加载的方式加载了另外一个js,在另外一个js中执行的绑定事件,也就是说这样操作在ie6下可能会造成问题。现在知道问题所在,那解决问题办法就是先用document.readyState(complete表示加载完成)查看页面是否已经load完成,如果已经完成就可以直接执行,否则就绑定onload事件。

兼容主流的浏览量的绑定事件通用方法,

function addEvent(obj, event, callback) {
	if (obj.addEventListener) {
		obj.addEventListener(event, callback, false);
	} else {
		obj.attachEvent("on" + event, callback);
	}
}
当然也可以用document.readyState来达到onload的效果,示例如下:
(function(){
	if (document.readyState && document.readyState == 'complete') {
		// doing
	} else {
		setTimeout(arguments.callee, 10);
	}
})();

			

使用jquery出现is not a function

2012年1月5日 1 条评论

最近在使用jquery时候,通过firefox的错误控制看到$(function(){//mycode}) is not a function的错误提示,但是mycode代码块都成功执行了,页面的没有出现别的异常,不过看到这个错误提示还是不爽,如是觉得找到原因,网上一搜,发现有这个问题的还不少,最多的是由于jquery和别的框架冲突,例如prototype,还有的说是由于两次导入了jquery,我在我的项目中仔细的查看,不存在刚提到的两种情况,一度以为是由于文件的编码问题造成,试着用不同的文本工具来定义js文件,问题还是依旧,经过不断的各种方法尝试,终于知道问题出在什么地方,是因为在后面加了一对括号引起的。

$(function(){
	//my code
	// ...
})();

注意最后的一对括号。可能是因为最近使用闭包情况比较多,写的时候随手写上了,害我一顿好找。

flash覆盖div的解决办法

2012年1月1日 没有评论

当采用相对位置来定义div,如果该区域也存在flash对象,即使div的z-index的设的很大,默认情况下,flash对象会覆盖住div的,解决办法是通过设置加载flash的object的wmode参数,例如

<param  name= "wmode"  value= "transparent">
或
<param  name= "wmode"  value= "opaque">

上述第一个是flash背景透明,第二个则是背景不透明。

另外如果使用swfobject.js来加载swf,则可以使用如下方法:

swfobject.embedSWF(
	"happy_year.swf", 
	"div_container", 
	"350", 
	"350", 
	"9.0.0", 
	"install_flash_player.swf", 
	null, 
	opObjectParams
);

即在最后一个参数上添加wmode的值。

分类: web前端 标签:

jquery对象的position和offset方法理解

2011年12月9日 没有评论

jquery提供了两个方法来获取页面的位置信息,offset方法能够得到元素的绝对位置,position方法是取原始的相对信息,方法返回是一个map对象,key分别是left和top。例如,$(‘#test’).offset().left 得到是id为test的元素距页面左边的像素。

何为绝对位置,何为相对位置呢?不管相对还是绝对,都有一个参照点,对于绝对位置比较简单,它的参照点永远是页面的左上角(注意:body默认是margin值的,如果没有手工修改此值,参照点不是正左上角,会有几个像素的偏移);相对位置的参照点就比较麻烦,很多地方都说相对父元素左上角,那究竟哪个算父元素呢?这个父元素并不一定是该元素的直接父元素,有可能是父元素的父元素,甚至可能的参考点是页面的左上角,父元素的定义是它的所有上层元素中第一个(距离本元素最近)css style中设置了position属性的元素,如果所有上级元素都没有设置该属性,那么参照点就是页面的左上角,跟offset一致了。

例如代码:

<div style="padding: 10px;border:1px solid; position: relative;width:180px;">
	<div style="padding: 10px;position: relative;border:1px solid;">
		<div id="test" style="background-color: #000;width: 20px;height: 20px;"></div>
	</div>
</div>

这时id为test的div的相对位置的参照点就是他直接父元素,所以得到的left,top都为10,而下面的代码

<div style="padding: 10px;border:1px solid; position: relative;width:180px;">
	<div style="padding: 10px;border:1px solid;"><!-- 注意没有设置position -->
		<div id="test" style="background-color: #000;width: 20px;height: 20px;"></div>
	</div>
</div>

此时参照点就是最外层的div,因此left、top的值为21px,即10 + 1 + 10,10是padding,1是border的

解决firefox下输入框为只读时背景成灰色的问题

2011年12月8日 没有评论

firefox(版本3.6)下当input框或者textarea的属性设置为readonly,在html控件在页面显示中就有一个灰色的底色,如果不喜欢,可以通过css来解决它。例如定义一个readonly的class,input框设置class为readonly,即可。firefox查看效果,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>firefox输入框</title>
<style>
.readonly {
	background-color:#fff;
	border:1px solid #7f9db9;
	padding:1px;
}
</style>
</head>
<body>
	<div style="width:400px;margin: 50px auto">
		<input name="txt" readonly="readonly" value="默认情况" />
		<br /><br />
		<input name="txt" readonly="readonly" value="使用了自定义css" class="readonly"/>
	</div>
</body>
</html>

无觅相关文章插件,快速提升流量