查看 Web应用 栏目文章
七月
26

[Hack]在XOOPS的article模组中显示完整文章标题

Author Dominic    Category XOOPS     Tags , , , ,

D.J.老大开发的article非常好用,其中有一个小缺陷:当我们获取文章列表时一般会对文章标题截取给定长度,但是当我们这样做之后,文章列表中文章标题是被截断了,但是对应A标签的title属性中也使用了截断之后的文字。这样导致的结果是当我们把鼠标移动到文章标题上面的时候,并不能看到完整的标题。

解决办法如下:

1、修改htdocs\modules\article\blocks\block.php和blocks.article.php文件,在162行附近加入如下行代码

     $_art["art_fulltitle"] = $_art["art_title"];//Modifyed By XuYong

修改之后完整代码为:

            $_art["art_fulltitle"] = $_art["art_title"];//Modifyed By XuYong
        if(!empty($options[3])){
            $_art["art_title"] = xoops_substr($_art["art_title"], 0, $options[3]);
        }

2、在对应的模板文件中使用art_fulltitle来显示超链接的title属性。可修改article_block_article.html文件如下:

<ul class="blkList">
  <{foreach item=article from=$block.articles name=art}>
  <li><span class="blkTime"><{$article.time}></span><a href="<{$xoops_url}>/modules/<{$block.dirname}>/view.article.php<{$smarty.const.URL_DELIMITER}><{$article.art_id}>/c<{$article.cat_id}>" target="_blank" title="<{$article.art_fulltitle}>"><{$article.art_title|smartTruncate:19}></a></li>
  <{/foreach}>
</ul>
七月
26

[Hack]让article模组中显示用户真实姓名

Author Dominic    Category XOOPS     Tags , , ,

目前XOOPS中article模组显示的都是文章发布者的登录名,有些时候显示真实姓名可能更恰当,特别是当提交者是单位的时候,这里提一个临时解决方案,最佳方案是放到配置项中由管理员配置显示。

修改htdocs\modules\article\class\article.php文件中的getAuthor函数如下即可:

function &getAuthor($retrieveUname = false)
    {
        $author["uid"] = $this->getVar("uid");
        if($retrieveUname){
            $author["name"] = XoopsUser::getUnameFromId($author["uid"],1) ;
        }
        return $author;
    }

配合XOOPS中修正获取真实用户名的Bug (Fixed) 效果更好。

七月
25

XOOPS开发工作可以告一段落了

Author Dominic    Category XOOPS     Tags ,

前段时间在家的时候帮朋友改版了网站——安徽车市http://www.ahcarmarket.com),用的是XOOPS 2.0.16的UTF-8版。2003年的时候做安徽大中专毕业生就业信息网的时候用了XOOPS,后来在给一个朋友弄他们公司网站的时候也用了XOOPS,个人感觉XOOPS还是非常强大的一个Portal(个人觉得比CMS更贴切)。安徽车市的开发工作将移交给一个小伙来完成,今后很长一段时间内应该不会从事XOOPS的开发了,XOOPS这么好的东西也开始没落了,社区人员越来越少,新版本的发布也越来越少了。

这次开发安徽车市采用了一下模组:
article文章模组作为 资讯中心,修正了UTF-8下pdf输出乱码的问题
auto汽车信息及报价 未开发完成
googlemaps地图,更改为中文地图,准备用于企业标注和电子地图
mediawiki维基,作为汽车百科
newbb论坛
Openads广告管理,自己集成Openads(原PHPAdsNews)
page页面布局模组,自己更改了一些东西,适用于UTF8环境和防止用户误操作和页面静态化。
protector保护模组
securityimage图片验证码
sitemap站点地图,有修改,主动生成sitemap.xml文件,
smartobject
smartprofile
system系统管理
tag标签,
tinycontent用于站点介绍
xcgal相册模组,用于汽车图库
xmmemberstats会员管理
准备用上addresses,后台也做了一些美化。

hack和优化了相当多的内容,有时间整理一下再发布吧。里面最为满意的模组就是article和tag模组集合使用,加上URL重写,可以产生大量的链接,这个网站做到了2500篇左右的文章(还没有大量使用tag)加上5000左右的汽车信息连接页面(这个没有集成transfer和tag,对于链接数没有什么贡献),在baidu上面拥有13800个链接,在google上面拥有15000多个链接,在yahoo上面有8000多个连接。

Page模组也非常好,完全可以实现主题、布局、区块、皮肤的应用。

其实这个网站还有一些开发工作没有开发完成,这个月上班之后就没有投入精力了,转交给别人之后,应该不会再从事XOOPS的开发工作了

六月
25

XOOPS的Page模组UTF-8字符编码下的使用方法

Author Dominic    Category PHP, XOOPS     Tags , , , , ,

文明猪汉化了非常好用的Page模组,其功能强大得过了头,充分体现了数据展现分离思想,将Xoops中原本主题、布局、区块的概念扩充到主题、布局、区块、皮肤,将原来相对固定的布局方式更改为随意布局的形式(如果可以直接拖动就更完美了),将然来局限于系统提供的区块提升到可以随意创建区块和随意利用区块的高度,但是目前Page模组仅仅只能使用GB2312编码上,如果网站采用UTF-8编码这不能利用这个Page模组。之前就找到了解决的办法,这次乘解决xajax中文显示的问题一并写出来吧。

其实这个bug是由xajax库引起的(参见我另外一篇文章:PHP中xajax库中文问题及提示返回XML文件无效的解决办法 ),解决办法是:

将page目录下所有文件全部采用UTF-8无BOM格式保存(当然语言文件不必要),至少server/page.server.php这个文件需要采用UTF-8无BOM格式保存(UltraEdit 操作方法:F12或另存为界面中格式下拉框选择‘UTF-8-无 BOM’),index.php这个也需要UTF-8无BOM格式保存,另外建立对应的UTF-8编码的语言文件。再将Framework目录下xajax目录下所有的php文件全部使用UTF-8无BOM格式保存。一般即可。

之前的一个项目中使用了UTF-8格式的Page模组,这个模组的UTF-8格式支持包还是让文明猪来发布吧,不过有需要的也可以联系我。

 

六月
25

PHP中xajax库中文问题及提示返回XML文件无效的解决办法

Author Dominic    Category PHP     Tags , , ,

xajax是PHP下一个非常好的ajax框架,虽然xajax自己说自己是一个库(Library),但是我觉得它更像一个框架(Framework)。xajax是一个开源的 PHP 类库 它能够让你黏合HTML、CSS、Javascript和PHP,并可以结合Smarty模板系统使用。

在运用Xoops的Page模组的时候,发现其不能和中文正常工作,特别是不能和UTF-8编码的页面一起工作,昨天在利用这个实现DataGrid的时候发现完全不能正常工作了,一直报“the XML response that was returned from the server is invalid”这个错误,Google了一下,发现不少人也有这个问题。结合之前解决Xoops的Page模组(感谢文明猪)的UTF-8使用问题的方法,终于发现了完美解决xajax库使用中文的方法。

如果页面采用GB2312或GBK作为编码或字符集,一般网络上面提到的方法可以解决:需要注意的是common.php、server.php及server.php用到的php文件(特别是生成数据的文件)全部不要使用UTF-8编码格式保存而使用ASCII格式保存。同时server.php输出的数据内容最好也采用gb2312编码。
在common.php前面定义
define(‘XAJAX_DEFAULT_CHAR_ENCODING’,'GB2312′);
再在调用时使用:
$xajax = new xajax();
$xajax->decodeUTF8InputOn();
或者
$xajax = new xajax(‘gb2312′);
$xajax->setCharEncoding();
$xajax->decodeUTF8InputOn();
$objResponse = new xajaxResponse(‘gb2312′);

如果页面采用UTF-8字符集的话,网上一些人说使用UTF-8格式编码就可以了,实际上即使全部使用UTF-8编码也不能正常工作,还是会报错:“the XML response that was returned from the server is invalid”。联想到之前在IE下碰到UTF-8 BOM Bug(文章:IE下页面无端端空出一行及utf8页面无法显示的解决方法 ),会不会这个地方服务器传回的XML文件中也包含多个UTF-8 BOM内容呢?通过ethereal截获数据包发现,服务器返回的内容中还真是包含了多个UTF-8 BOM,可能还是IE使用的Microsoft XML Parser的UTF-8 BOM Bug吧。这样解决办法就出来了:所有页面全部采用UTF8编码并使用无UTF-8 BOM保存(UltraEdit 操作方法:F12或另存为界面中格式下拉框选择‘UTF-8-无 BOM’),页面包括xajax库文件、common.php文件、server.php文件。供访问的页面也可以使用无UTF-8 BOM保存。

有时候返回的参数(特别是中文部分)被url编码了,这个时候需要我们将返回的数据使用Urldecode进行处理,以便能够正常完成后面的数据库操作。

最新xajax 0.25下载地址:http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download

xajax中文手册(HonestQiao第一版,FlyingHail修改版) http://www.flyinghail.net/?p=44

UTF-8 BOM解释:”EF BB BF” 这三个字节就叫BOM,BOM的全称叫做”Byte Order Mard”。在UTF-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在UTF-16中用来表示高低字节序列的。

另外,PHP网站上说使用–enable-zend-multibyte可以解决这类问题,不过没有尝试,并且预计在PHP 6.0中会对Unicode做完美的支持。

六月
25

《CSS禅意花园》一书中提及的有用链接

整理《CSS禅意花园》一书中提及一些有用链接,主要是从Note和Tips以及附录中摘要出来。

CSS一些资料参考页面:

CSS设计类站点:

六月
20

Tag(标签)的选取方法

Author Dominic    Category Web应用     Tags , , ,

Tag即标签,是目前web2.0中应用比较多的一种应用,通常可以理解为文章分类和关键词。Tag数量没有太多的限制,使用Tag对于在搜索引擎搜索结果上将非常有好处,一般可以增加搜索结果数量和质量。
Tag的选取方法:
1、 Tag词语不要太宽泛,选择的词语应该比较具体,有针对性。例如:汽车这个关键词就不是很好。
2、 Tag词语也不适于太长太特殊,2-4汉字为佳。
3、 文章中出现次数较多的作为第一个。
4、 兄弟栏目如果关系非常紧密,其常用Tag词语也可以作为Tag词语。例如:某汽车网站违章查询栏目,合肥的违章查询Tag为交通违法,淮南的违章查询Tag为电子警察,那么其它违章查询栏目也可以加入这两个Tag词语。
5、 挖掘热门关键词,可以根据搜索引擎结果来看。例如交通违章、违章查询这是某汽车网站违章查询栏目查询次数最多的关键词,那么我们就需要将这两个作为这个栏目所有文章的关键词。

六月
6

用Meta标签让网页产生渐变效果

Author Dominic    Category Web应用     Tags , ,

今天才发现标签有动态滤镜的功能。在页面的HTML代码的Head头中加入以下两行,再看看效果就知道了。

< http-equiv=”Page-Enter” Content=”blendTrans(Duration=0.5)”>
< http-equiv=”Page-Exit” Content=”blendTrans(Duration=0.5)”> 

http-equiv可以取值:”Site-Enter” , “Site-Exit” , “Page-Exit” , “Page-Enter”。

这里的blendTrans其实就是一种动态滤镜效果,当然还有其他的方法也可以产生这种动态滤镜效果:

< http-equiv=”Page-Enter” Content=”revealTrans(Duration=x, Transition=y)”>
< http-equiv=”Page-Exit” Content=”revealTrans(Duration=x, Transition=y)”> 

Duration  表示滤镜特效的持续时间(单位:秒) ,Transition 滤镜类型。表示使用哪种特效,取值为0-23。表示的意思如下:

0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23 以上22种随机选择一种
五月
16

修改WordPress的百度新闻插件(更符合百度新闻协议标准)

使用了hongxiaowan开发的百度新闻插件,但是在浏览最后的生成结果时发现ie中XML文件不能正常显示,即XML文件不能成功解析。仔细查阅hongxiaowan的代码发现,他发布的代码并没有完全遵守百度新闻协议,在百度新闻协议中text标签中是不能包含html代码的。所以需要用strip_tags函数去掉html代码。另外关于他对于category标签和keywords标签均支持不对,当使用了ultimate tag warrior插件时,category标签将文章的tag也加入其中了。

我修改了baidunews函数加入strip_tags,并修改了wp-baidunews.php中关于category标签和keywords标签的生成方法。

hongxiaowan网站关于百度新闻插件网址:http://www.hongxiaowan.com/2006/11/14/the-wordpress-plug-in-of-baidu-news-protocol/

如果需要手工修改,请我提供的代码按照hongxiaowan的页面手工修改。

下载地址:WordPress百度新闻插件(Dominic.Xu 完善版)

BTW: 百度新闻协议站点提交地址:http://news.baidu.com/newsop.html#ks5,上面说不收录博客。试试看吧。提交百度新闻url为http://yoursite/?feed=baidunews或者http://yoursite/wp-baidunews.php,查询XML文件状态URL:http://news.baidu.com/newsop.html#ks6

五月
9

Delphi For PHP

Author Dominic    Category PHP, 软件应用     Tags , , , ,

周一的International PHP Magazine有一篇文章“Overview of Delphi for PHP”,初看以为是用Delphi来做PHP项目,仔细一看原来是用Delphi的来开发PHP。

Delphi for PHP是Borland公司在出售其开发部门未果之后下了个蛋:CodeGear的产品,以前一直很喜欢Delphi 7的开发环境赶紧上0day上下了.Delphi.for.PHP.v1.0.1.414,装上之后感觉非常happy。PHP的用了很多种,几乎用遍了可以下载到的PHP开发工具,甚至尝试过VS.PHP, 就是为了寻找一个能够自动实现MVC的,可以用拖拽的方式实现Delphi那种开发快感,但是上下寻觅不可得,只好用最顺手的UltraEdit开完成开发工作,辅以Zend Studio 5.2 来调试。看了Delphi for PHP之后我觉得可以卸载掉所有的其它的PHP开发工具了,PHP终于可以像JSP、ASP.Net那样用拖拽的方式实现变成,可以完全基于面向对象(以前好痛苦呀,一直手写PHP Class代码)和基于事件机制来开发PHP应用了。

Delphi for PHP 的启动画面,非常漂亮也很具有Web2.0气息:

启动画面

Delphi for PHP 的运行界面,非常类似Delphi 2006。左侧上方是代码浏览区,左侧下方是对象查看器。右侧是数据库设置区及控件面板。中间工作区是代码和设计界面。

完全支持现有PHP项目。手头的PHP5项目用Delphi for PHP打开,即可Run了,Delphi for PHP也内建了一个Apache。支持Smarty模板引擎、对CSS和Ajax都有很好的支持等技术。代码编辑器理所当然的支持CodeInsight功能了,调试功能可以和Zend Stuio和VS 2005 媲美了。将Delphi中的VCL、Object、Controls、Components和Packages概念全部带到Delphi for PHP中了,而且Delphi for PHP 本身Vcl组件是开源的,源代码可以手工更新(鄙视国内某些看似很好,代码质量糟糕还用盗版Zend Guard加密的软件),目前Delphi for PHP有50多个控件,这些组件都可以像Delphi 7中和VS 2003/2005开发ASP.Net那样直接拖放使用,最好的是可以自行开发Components和Packages扩充组件库。在ASP.Net中有很多很适用控件都实现了(不在需要去手工用div+css+javascript实现复杂的效果了)。我用Google Map VCL组件做了一个Demo,没有写一句代码就实现了Google Map所有功能,改动一下Google Map VCL组件就实现了Google Map中文版的功能。没用过Delphi 7和VS这样的优良的的PHPer还用了“对web技术前所未有的震撼”来评价它。

现在动态语言的风生水起,或许Delphi for PHP(Delphi for Ruby什么时候面世哦)可能挽救Borland公司,或许能够让PHP从JSP、ASP.Net夺回部分市场份额。不知道有没有人在着手写Delphi for PHP的中文技术文章了,有时间可以写点。

相关文章:

动态语言崛起Delphi For PHP横空出世

Delphi for PHP 测试手记 (有不少截图)

专题推荐

标签

apache article CSS dotNet fckeditor Hack iOS iTouch javascript PayPal PHP rar ubuntu utf8 VMware VMware Tools weblinks Win2008 Windows Server 2008 Wordpress xajax XOOPS 上传 个人 中文 中文习惯 关键词 分享 合肥 域名 安全 工作 插件 文章管理 时区 未分类 模块 模板 模组 电子地图 界面友好 禅意花园 网速 腾讯 配置管理

分类目录

新浪微博

存档

最近文章

近期评论

友情链接

分享按钮