[转]设计和布局之间的思考

矛盾出来了,像我们这些小作坊,基本都是设计布局一人搞定。甚至还有加后台程序的。假设设计的时候考虑布局了,我们都有这个能力进行调整。但像大公司,分工严格的情况下,如果设计师不懂css不会布局。或者理解有误,那么设计稿就会让布局人员耗费大量的时间和精力。因为浏览器太多!

经常看到有网友抱怨设计师给的稿子无法还原。因为他们对浏览器和屏幕的理解不一样。也有的是因为效果太绚,颜色太多。更有甚者是使用flash制作嫌浪费,而html又鸡肋…..好吧,我们抛开这最后一种情况,只谈对屏幕和效果以及设计布局的理解。

先谈屏幕

屏幕分辨率,还是以1024×768为主。而满屏的定义则无从谈起。为什么?请看一下原因:

  1. 你不能确定用户装了几个插件!插件越多,浏览器显示高度越低!
  2. 你不能确定用户的显示器是否设置正确(歪一边了,弧形的,截断的,缩小的放大的)
  3. 你不能确定用户显示器的分辨率是否为最佳分辨率。其典型在于某些宽屏或高屏显示器,有的是等比例缩小后留白。而更有甚者则是满屏拉伸。比例就不对了!

要使得网页满屏。很多人说宽度1003,也有人说是1004。而我则不这样认为。 继续阅读

删除 MySQL 数据库中特定前缀的表

打开我的另一个网站的mysql数据库看了一下,一个库里竟然有750多张表格,关键是有很多是没有用的空表格。其实也没有太大的关系,主要就是管理起来不太方便。700多个表格不是一下子就可以打开phpMyAdmin管理的,会很慢甚至打不开。

于是找来下面的代码,删除特定前缀的表。

<?php
/*xuanfunction 删除数据库中有特定前缀的表
*$dbname 数据库名
*$tableflag 表前缀,这里标志出是哪一个用户,如表s00002_goods前缀为s00002
*/
function deldata($dbname,$tableflag){
$db_host   = 'localhost';
$db_port    = '3306';
$db_user    = 'user';
$db_pass    = 'pass';
$connect =mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($dbname);
$result = mysql_query("show table status from $dbname",$connect);
$data=mysql_fetch_array($result);
while($data=mysql_fetch_array($result)) {
$table=mysubstr($data[Name],"_");//截取当前表的下划线以前的字符串得到表前缀
if($table==$tableflag){ //判断截取的前缀是否等于自己需要的前缀$tableflag,如果是就删除该表
//测试之用
/*echo $data[Name];
echo "<br>";
echo $table;
echo "<br>";*/
mysql_query("drop table $data[Name]");
}
}
return true;
}
/*截取某个特定字符前的所有字符函数
*$str 为待截取字符串
*$flag 特定字符如“_”
*/
function mysubstr($str,$flag){
$pos=strpos($str,$flag);
return substr($str,0,$pos);
}
?>
<?php //test
$dbname="dbg0001";//数据库名
$tableflag="s000002";//要删除的表的前缀,有这个前缀的表才删除,标志出是哪一个用户
deldata($dbname,$tableflag);
//$test=mysubstr("s000002_account_log","_");
//echo $test;
?>

XMLHttp组件的检测

XMLHttp组件在很多场合可以用到,Z-Blog提供的在线安装主题和插件,便是通过这个实现的。还有,诸如小偷程序,在线采集等等都是通过这个实现的。

Response.Write "<h3>服务器XmlHttp组件支持情况:</h3>"
oxml=array("Msxml2.ServerXMLHTTP.6.0","Msxml2.ServerXMLHTTP.5.0","Msxml2.ServerXMLHTTP.4.0","Msxml2.ServerXMLHTTP.3.0","Msxml2.ServerXMLHTTP","Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP")
for i=0 to ubound(oxml)
Set getxmlhttp = Server.CreateObject(oxml(i))
If Err Then
Err.Clear
Response.Write oxml(i)"不支持<br/>"
else
Response.Write oxml(i)" 支持<br/>"
end if
next

ASP 判断浏览器类型显示不同网页

这个很简单,就是利用asp内建的ServerVariables集合判断浏览器类型。事实上,不只浏览器类型可以判断,甚至版本也可以,其中ie的版本就比较多。

<%
Dim BrowserString
BrowserString = Request.ServerVariables("HTTP_USER_AGENT")
BrowserString = Lcase(BrowserString)
Dim broFirefox,broMSIE,broOpera,broWap
broFirefox = "firefox"
broMSIE = "msie"
broOpera = "opera"
broWap = "wap"
'如果是Firefox
if Instr(BrowserString, broFirefox) <> 0 then
Response.Redirect(broFirefox & ".asp")
end if
'如果是MSIE
if Instr(BrowserString, broMSIE) <> 0 then
Response.Redirect(broMSIE & ".asp")
end if
'如果是Opera
if Instr(BrowserString, broOpera) <> 0 then
Response.Redirect(broOpera & ".asp")
end if
'如果是Wap
if Instr(BrowserString, broWap) <> 0 then
Response.Redirect(broWap & ".asp")
end if
%>

鲜果 Digg 1.0 for Z-Blog 1.8

一、插件简介

鲜果提供的 Digg 服务,个人觉得挺不错的,以前是直接修改代码的,今天花点时间做成插件。如果你也在使用鲜果的话,那么可以尝试一下。更多鲜果 Digg:http://xianguo.com/tools/digg_button

二、插件说明

  1. 提供后台进行相关配色处理,并且可以预览
  2. 可以设置插件插入代码的位置(文章顶部/底部)
  3. 安装插件时会在当前主题样式的css中增加
.XianguoDigg{
float:rightright;
padding:10px;
}

以上css代码为控制左右位置,默认为右侧,可以自己修改主题样式。 继续阅读

Discuz!通行证(Discuz! Passport)错误提示详解

今天不知道为什么我的Discuz!和PHPCMS整合出现了一些问题,经过反复查验问题出在Discuz!上面,具体原因尚未查明,问题还未解决。找来下面的错误解释,留作备用,可能对跟我同样需要的朋友会有用。

1、Illegal request

非法请求,当验证字串 verify 不匹配时会产生此提示。可能是应用程序与 Discuz! 配置的私有密匙不同,或是通过 URL 传递前,未将必要的参数(如 auth、forward 等)进行 URL 编码,也有可能是使用了经过 URL 编码的参数值用来计算 verify 的 md5 值造成。以 PHP 语言为例,正确的代码应当是类似于的如下的格式:

PHP代码
  1. $action = ‘login’;  
  2. $auth = passport_encrypt(passport_encode($autharray), $passport_key);  
  3. $forward = ‘http://www.discuz.net/index.php’;  
  4. $verify = md5($action.$auth.$forward.$passport_key);  
  5.   
  6. header(”Location: http://www.discuz.net/api/passport.php“.  
  7. “?action=$action”.  
  8. “&auth=”.rawurlencode($auth).  
  9. “&forward=”.rawurlencode($forward).  
  10. “&verify=$verify”);  

2、Lack of required parameters

auth 内容解密后,缺少必要的信息 time、username、password、email。

3、Request expired

请求过期。当前服务器时间与应用程序提交过来的 time 之差大于 Discuz! Passport 中设置的请求有效期。可能是使用以往的代码非法尝试,也可能是由于应用程序和 Discuz! 论坛所在的两台服务器,时间设置有误造成。

4、Invalid action

没有指定 Passport 所执行的 action。

[转]PHP的未来 – Zeev Suraski访谈录

问:2007年九月发布的Eclipse PHP开发工具(PDT),谁在背后和做了那些工作?
Zeev: PDT 是Eclipse的项目,但Zend起了主导的作用。

问:这和Zend Studio的关系如何?

Zeev: 我们现在同时在干三件事。第一,Zend Studio,我们正在售卖此产品;第二,PDT,面向广大的开源社区;第三,扩展PDT的功能,打造成商业版…

问:这就是说,PDT不会代替Zend Studio?

Zeev:目前不会。如果发现Eclipse上所有的变化,我们会满担心的…

问: Eclipse有什么优点?

Zeev:一个主要的优点是有很多接口,该有的几乎都有了。比如AJAX的和Javascrīpt的。用户还可自我开发。另一个优点是容易贯彻标准化… 继续阅读

Archiver 文章列表 1.4 for Z-Blog 1.8

Discuz! 、Supesite/Xspace 等一些程序都有Archiver,很简单的无图版或者文章列表,更方便阅读和搜索引擎收录,也可以说就是为了搜索引擎服务的。

这个插件可以根据文章点击量、时间以及分类排序,可以采用分页生成,也可以不用,还可以自定义模板,甚至使用系统模板。

其实就是以前那个列表插件改过来的,我叫习惯叫这种东西 Archiver,当然你也可以叫他 sitemap,跟 sitemap 还是不一样的。

功能介绍

生成静态的文章列表,可以自定义模板,使博客更容易被搜索引擎抓取和收录。
* 静态化列表页面,html结构简单
* 是博客的简洁版、无图版
* 是博客的站点地图,也是文章存档
* 优化view模版,防止重复收录 new

看过效果再说,非常舒服的排版。

插件下载

http://bbs.zblogcn.com/thread-23506-1-1.html

http://download.rainbowsoft.org/plugins/Archiver/

ASP 自动识别链接函数

找了很多地方,发现一个还不错的,不过多少有点问题,经过zx的指点,参照Z-Blog处理UBB的函数修改了一下,基本还算好用。

Function autoLink(str)
str=" "&str
Set re=new regExp     '建立正则表达式对象regular expression
re.IgnoreCase=true     '忽略大小写
re.Global=true            '搜索匹配字串针对全部文本
'查找带协议前缀的链接
re.Pattern="(http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?)"
str=re.replace(str,"<a href='$1' target='_blank'>$1</a>")
'查找不带协议前缀的链接
re.Pattern="([^(http:\/\/)])(www\.([\w-]+\.)+[\w]+(\/[\w-]+)*[\/]?([\w-]+\.[\w]+)?(\?[\w]+=[\w]+(&[\w]+=[\w]+)*)?)"
str=re.replace(str,"$1<a href='http://$2' target='_blank'>$2</a>")
'查找邮件链接
re.Pattern="(mailto:)?([\w]+@([\w-]+\.)+[\w]+)"
str=re.replace(str,"<a href='mailto:$2'>$1$2</a>")
Set re=nothing
autolink=trim(str)
End Function

主要是正则表达式的应用啊。

“ActivePlugin_插件ID名称”函数是必须的

Z-Blog 在1.8版中加入了类似WordPress的插件机制,可谓强大。抱着学习的态度,我也试着写了一些插件,小试牛刀。

不过在开发插件的过程中有个问题很让人不解,如果插件有include文件,这个文件可能导致排序在该插件后面插件的include.asp无效。所以,常常有人在论坛中发帖询问 htmldefault 、sitemaps 等插件无效的问题。其实很早以前就有发现这个问题,但是仔细检查过出错插件的include.asp,很可惜没有发现问题所在。

今天终于发现了一点端倪,如果include.asp中没有挂入接口的函数,便会导致以上问题。

ASP/Visual Basic代码
  1. Function ActivePlugin_插件ID名称()  
  2.   Call Add_Action_Plugin("目标接口","具体执行代码")  
  3. End Function  

Z-Wiki里有相关文档:http://wiki.rainbowsoft.org/doku.php?id=plugin:doc#%%8C

也就是说,“ActivePlugin_插件ID名称”函数是必须的,即使这个函数什么也不做,空在那里。