查看 Web应用 栏目文章
一月
4

PayDollar支付通道开发介绍及ECShop开发PayDollar注意事项

Author Dominic    Category Web应用     Tags ,

前些时候帮助一个香港朋友开发了的支付插件,他们使用PayDollar支付网关。

www.paydollar.com联款通有限公司成立于2000年,是领先的世界级电子付款及移动付款解决方案与技术提供应商,亦是香港最大第三方支付平台之一。

「传款易支付网关」是一个完善、综合、安全及提供实时交易的平台,可供银行或支付处理服务机构架设一个可支持多种支付方式的收付款服务,帮助提高商户销量及生产力。

「传款易支付网关」能处理不同渠道的实时支付交易,如网络支付及移动设备支付。也能提供界面连接到各种支付系统主机作为支付授权和结算。

核心功能

  • 支持多语言和多支付模式,提供各类完整的报告
  • 支持多支付模式如:网上交易、离线交易、其他定制化的支付交易
  • 便捷架设及提供多商户连接界面
  • 灵活选择独立支付界面或后端连接界面,商户无须额外投资任何软件

支付方式

  • VISA / 万事达咭 / 大来信用证JCB 本地银行户口付款 (如PPS)

交易功能

  • 通过网络及移动设备进行电子商务、移动商务、邮购及电话购物
  • 实时撤销及处理退款要求
  • 手动、自动或整批结算选择

电子邮件通知功能

  • 综合商户帐户让商户可以通过不同渠道进行交易管理
  • 完善的交易报告显示销售状况
  • 单笔交易或整批交易资料下载

控制功能

  • 多层式用户群控制管理,可供银行或商户使用
  • 提供安全管理网站给银行及商户
  • 指定商户每比、每日、每月的金额上限
  • 风险控制工具包括:阻挡负面IP及信用卡的交易、实时交易检查及风险警示功能

安全功能

  • 采用128位SSL加密装置
  • 资料库加密
  • 支持VISA验证、SecureCode认证JCB/Jsecure认证服务
  • PayAlert(实时交易风险检查)

其他增值功能

  • 循环支付设定及管理
  • 自建购物网站和购物交易管理

界面标准

  • 支持ISO 8583和SSL银行支付连接界面

 

总之,在香港它就是像支付宝、快钱这样的第三方支付平台,可对大陆客户提供中国银联网上支付平台、支付宝平台、财付通平台、快钱平台、PayPal平台支付以及Visa、MasterCar、JCB等信用卡直接扣帐支付的一个综合支付交易平台。应该是香港商家对大陆客户提供服务的可靠支付通道。

如果有碰到有朋友或者客户需要使用PayDollar支付平台可以参考一下内容:

一般香港商户在完成在香港的银行开户之后,可以接洽PayDollar,PayDollar之后会发送一个CheckList让香港商户去准备,要求做到以下几点:

  1. 一个商户自己的页面(一般有网站即可);
  2. 在页面底部放入PayDollar和相应需要支付平台的Logo(PayDollar必须放,其他Logo要看香港商户跟PayDollar的谈判,如果只有银联平台则只放PayDollar和银联的Logo);
  3. 提供一个包含交易货币的有关货物和服务的描述页面;
  4. 提供一个描述退换货、货物配送、使用条款的页面;
  5. 提供一个公司联系方式信息页面,至少包含公司地址、email地址和电话号码;
  6. 提供一个页面描述支付卡交易策略和安全保障措施(例如:SSL和数据加密,他们会给一个范例);
  7. 提供一个页面描述顾客数据隐私保护策略(例如:Cookies);
  8. 一个购物车

其中,很多条款他们都提供了参考页面,购物车可以实现也可以不实现,只要有购买页面即可。就是为了满足这个需要踩帮助香港的朋友使用了,谁知道并没有PayDollar支付插件,网上可以找到一些PayDollar的支付代码(ShopEx的插件代码),但是已经不能和PayDollar现在的支付网关适应了。

准备好之后,PayDollar会开通商户的支付功能,并提供一个商户号(Merchant Id),我们还需要发送邮件到service@paydollar.com,要求开通商户帐号的哈希码安全认证功能(为了确保支付安全还是开通了好)

在给开发PayDollar支付插件有以下几个问题树妖注意:

  1. PayDollar对于每一个币种都是单独的商户号也对应不同的哈希码安全认证;
  2. PayDollar现在支持哈希码安全认证功能,且哈希算法变成了SHA1,哈希码安全认证有效期两年;
  3. PayDollar的跳转商户页面和PayDollar返回支付成功信息页面是两个页面;
  4. PayDollar有关哈希码安全认证功能中各个参数有变化(相对网上可以搜索到的ShopEx的插件代码),连接字符串已经变成了竖线|而不是&符号;
  5. 提供给PayDollar的交易返回页面是需要在PayDollar管理系统中设置的,而不是在代码中指定的,PayDollar是通过Post方法来将数据提交到这个指定URL;
  6. 如果不是使用Client通过浏览器Post的方式支付,则需要自己实现支付页面(可自己实现信用卡信息填写页面,做3DS验证)。

在给开发插件过程中我给上面第三条和第五条搞败了,接收返回信息是通过/respond.文件再调用includes/modules/payment/paydollar.中的respond()方法的,开始的时候我并不知道这样,这样直接导致需要单独给一个文件给PayDollar来处理支付通知信息,respond()方法中只提供支付成败信息然后让respond.输出支付成败提示信息,respond.文件还一定得显示respond.dwt这个Smarty模板文件。为了偷懒,我在在respond()方法中通过判断回传参数来区分是PayDollar直接跳转的还是Post回传的。设置PayDollar系统中返回链接方式如下:

登录PayDollar之后,在“商家资料”页面,点击“支付选项”,进入设置页面,填入对应的链接地址,选中右侧的“可用”,点击“更新”按钮再在后续页面点击“确定”按钮即可,如下图:

paydollar_setting

这样就可以正常实现支付了。附件中是PayDollar集成开发的文档,仅供参考,文档主要有:

├─开源购物车插件 │ Magento PayDollar_v1.zip │ OpenCart PayDollar_v148b.zip │ oscommerce paydollar v2.3.zip │ PayDollar_开源购物车集成指南_v2.pdf │ VirtueMart_PayDollar.zip │ virtuemart_payment_extra_info.txt │ ZenCart paydollar_payment_module_1-0.zip │ ├─技术文档 │ 付款流程概述.pdf │ 传款易定时付款用户指南SchedulePay_V1.6.pdf │ 传款易批事务处理用户指南V1.0.pdf │ 传款易集成指南 _v3.7_.pdf │ ├─接口代码例子 │ asp_DirectClientPost.zip │ asp_SimpleClientPost.zip │ Csharp_DirectClientPost.zip │ Csharp_DirectServerSide.zip │ Csharp_SimpleClientPost.zip │ java_DirectClientPost.zip │ java_DirectServerSide.zip │ java_SimpleClientPost.zip │ php_DirectClientPost.zip │ php_DirectServerSide.zip │ php_SimpleClientPost.zip │ └─文件 Bank required checklist items.pdf FAQ_for_Alipay_By_PayDollar.pdf Logo使用说明.txt PayDollar_商户操作指南_v3-5.pdf PayDollar_操作指南.pdf 退款手续_v1.pdf

下载地址:PayDollar集成资料.rar

十一月
17

Drupal6中启用文章内容多语言支持的方法

Author Dominic    Category Drupal     Tags ,

这两天尝试Drupal6,想分析看一下Drupal6中对于多语言内容是如何支持的?参照了网上hsiao blog的一系列文章:
durpal建设多语言站点之一
drupal建立多语言站点之二:使用Localization client模块
durpal建立多语言站点之三:内容多语言
drupal建设多语言站点之四:不同语言的站点名称

但是他的文章主要描述了站点多语言的支持“durpal建立多语言站点之三:内容多语言”这篇文章却并没有讲解怎么开启内容多语言,第二幅图片中却有“Translate”的链接。相当奇怪!

6中包含了Content Translation模块,该模块允许网站内容翻译成不同语言,它和本地化模块 (Locale模块,负责管理多语言,并提供多语言网站翻译接口)协同工作,它是创建和维护多语言内容站点的关键。默认并没有开启该模块功能,要正确开启该模块功能,需要进行以下操作:

  1. 在站点构建中的模块管理中启用“Content translation”模块,如果安装列i18n模块,建议同时启用“Content type translation”模块;
  2. 在“权限”配置页面权限给适当的用户角色分配“翻译内容”权限;
  3. “语言”的配置页面中新增并启用的所需要的语言;
  4. 在管理->内容管理->内容类型页面中,点击要支持多语言功能的内容类型(例如:Page和Story)右侧的“编辑”按钮,然后在“流程设置”折叠框中的“多语言支持”选中“启用,与翻译一起”。

这样在创建或者编辑文章的时候会出现一个语言下拉框和翻译链接,如下图:

image

点击“翻译”链接进入翻译查看页面可以看到如下页面:

image

点击旁边“添加翻译”链接或者“编辑”页面就可以进入其他语言内容编辑页面了。

三月
28

Xoops中获取模块配置参数的方法。

Author Dominic    Category XOOPS     Tags ,

群(53219504,17380705)中有人询问在开发的时候,怎样获取在xoops_version.中添加的参数值。其实中统一管理模块的参数是非常好的一种做法(将在下一个平台性项目中借鉴这个做法),获取的方法也非常简单,针对不同的情况可以分别实现如下:

1、更改现有模块代码,且现有模块代码中包含了全局性变量$xoopsModuleConfig的情况

这种情况比较简单:

global $xoopsModuleConfig;
$configvalue=$xoopsModuleConfig["xxxx"];
//xxxx为xoops_vesion.中定义的参数对应名称

2、现有模块代码中不包含$xoopsModuleConfig或者自行开发简单模块且不使用Framework

$module_handler = &xoops_gethandler('module');//获取module句柄$module_handler
$module = $module_handler->getByDirname("xxx");//xxx为模块目录名称,获取特定module操作句柄$module
$config_handler = &xoops_gethandler('config');//获取config的句柄$config_handler
$criteria = new CriteriaCompo(new Criteria('conf_modid', $module->getVar('mid')));// 根据上述module的id构建查询参数$criteria
$configs =& $config_handler->getConfigs($criteria);//用config句柄获得特定module的参数配置结果集

foreach(array_keys($configs) as $i)
{
$moduleConfig[$configs[$i]->getVar('conf_name')] = $configs[$i]->getConfValueForOutput();//转化成数组
}
unset($configs);

之后直接使用$moduleConfig['xxxx']就可以访问了,也可以把$moduleConfig设置为全局变量。

3、使用Framework的模块

load_functions("config");
$moduleConfig = mod_loadConfg("moduledirname");

使用Framework的情况可以参考article中代码。

十二月
27

[Hack]Xoops中article模块分类显示页面同时显示子分类文章的方法

Author Dominic    Category XOOPS     Tags , ,

D.J.老大的article模组确实好用,但是在分类文章列表显示页面view.category.这个文件中却只显示给定栏目ID的文章和子分类列表及子分类文章数。虽然个人比较喜欢这种方式,但这种方式并不适合目前国内流行文章管理系统在显示栏目的文章方式,一般的网站在现实栏目时需要将分类的子分类文章也同时显示出来。

针对目前大多数都是采用两级分类的方式,我对view.category.做了一些Hack:

1、在view.category. 97行附近修改如下:

$counts_category =& $category_handler->getCategoryCounts(array_keys($categories), "access");
    //Add By XuYong 获取子栏目下给定篇数文章

    $articles_perpage = (empty($start) && empty($list)) ? $xoopsModuleConfig["articles_category"] : $xoopsModuleConfig["articles_perpage"];
    //End Add

foreach( $categories as $id=>$cat){
    //Add By XuYong 获取子栏目下给定篇数文章
    $subcriteria = new CriteriaCompo(new Criteria("ac.ac_publish", 0, ">"));
    $subarticle_id =& $article_handler->getIdsByCategory($cat, $articles_perpage, 0, $subcriteria);
    if(count($subarticle_id)>0){
        $criteria = new Criteria("art_id", "(".implode(",",$subarticle_id).")", "IN");
        $tags = array("uid", "writer_id", "art_title", "art_summary", "art_image", "art_pages", "art_categories", "art_time_publish", "art_counter", "art_comments", "art_trackbacks");
        $subarticles_obj =& $article_handler->getAll($criteria, $tags);
    }else{
        $subarticles_obj = array();
    }

    $subcatarticles = array();
    foreach ($subarticle_id as $id) {
        $_article = array(
            "id"        => $id,
            "title"        => $subarticles_obj[$id]->getVar("art_title"),
            "time"        => $subarticles_obj[$id]->getTime($xoopsModuleConfig["timeformat"]),
            "image"        => $subarticles_obj[$id]->getImage(),
            "counter"    => $subarticles_obj[$id]->getVar("art_counter"),
            "comments"    => $subarticles_obj[$id]->getVar("art_comments"),
            "trackbacks"=> $subarticles_obj[$id]->getVar("art_trackbacks")
            );
        if(!empty($xoopsModuleConfig["display_summary"])){
            $_article["summary"] = $subarticles_obj[$id]->getSummary(true);
        }
        $subcatarticles[$id] = $_article;
        unset($_article);
    }

    //End Add
    $subcategories[] = array(
        "id"            => $cat->getVar("cat_id"),
        "title"            => $cat->getVar("cat_title"),
        "articles"        => @intval($counts_article[$cat->getVar("cat_id")]),
        "categories"    => @intval($counts_category[$cat->getVar("cat_id")]),
        "subcatart"  => $subcatarticles
        );
        //Add By XuYong 获取子栏目下给定篇数文章
        unset($subcatarticles);
        //End Add
}
unset($criteria);
$criteria = new CriteriaCompo(new Criteria("ac.ac_feature", 0, ">"));
$criteria->setSort("ac.ac_feature");

2、修改模板文件article_category.html文件,134行附近修改如下:

<{if count($categories) gt 0}>
<div id="category" class="article-category">

    <{foreachq item=cat name=cat from=$categories}>
    <div class="category-header tdbg4" stype="width:80%">
<span class="sizscolor"><b><a href="<{$xoops_url}>/modules/<{$xoops_dirname}>/view.category.<{$smarty.const.URL_DELIMITER}>c<{$cat.id}>/list"><{$cat.title}></a></b></span>
    </div>

        <{if count($cat.subcatart) gt 0}>
        <div id="article_<{$cat.id}>" class="article-article">
                    <table width="95%" border="0" align="center" cellspacing="0">
                        <{foreachq item=article from=$cat.subcatart}>
                      <tr class="tdlist">
                        <td  width="86%" height="24" class="tdlist">·<a href="<{$xoops_url}>/modules/<{$xoops_dirname}>/view.article.<{$smarty.const.URL_DELIMITER}><{$article.id}>"><{$article.title}></a>
                                        <{if $article.image}><img src="<{$xoops_url}>/modules/<{$xoops_dirname}>/images/image.gif" width="12px" alt="" /><{/if}>
                        </td>
                        <td width="14%" height="2" class="tdlist"><{$article.time|date_format:"%y-%d-%m"}></td>
                      </tr>
                      <{/foreach}>
                                </table>
        </div>
        <{/if}>
            <div class="article-section-title">
            <span class="subject"> </span>
            <span class="navigation"><a href="<{$xoops_url}>/modules/<{$xoops_dirname}>/view.category.<{$smarty.const.URL_DELIMITER}>c<{$cat.id}>/list"><{$smarty.const._MORE}></a>
            </span>
            </div>
            <div class="clear"></div>
    <{/foreach}>

</div>
<{/if}>

其中有些样式和一些修改是根据当前需要改的,需要根据自身情况调整。

效果demo;

view_category_hack_demo

 

Hack后的iview.category.和模板文件下载:

十二月
26

Xoops中weblinks模组1.13版简体中文UTF8字符集乱码解决及语言包

Author Dominic    Category XOOPS     Tags , ,

今天xoops.org.cn上有人说道weblinksV1.13版本在用UTF8字符集的时候碰到乱码和RSS、ATOM输出乱码的问题,发现手上的一个小东西也存在这样的问题,虽然模组现在http://ohwada.net推出了1.82.1版本的模组,但需要装他们的happy_linux模组,而且目前还没有一个简体中文语言包,也就不想升级到新的模组了。在培训的间隙,花了点时间分析了以下问题,然来是从简体中文gb2312字符集语言包转换成UTF8语言包时候,虽然可以使用了,但是缺少了关键的UTF8转换处理函数(UTF8是不需要再转换的),导致本身就是utf8的字符串被二次编码,就导致乱码了。

解决办法是在weblinks_language_convert.文件中加入utf8转换函数。需要清除cache目录中对应的缓存文件。

 

//Add By Xuyong
//utf8 字符集不需要转化
//End Add
function convert_from_utf8($text)
{
    return ($text);
}
function convert_to_utf8($text)
{
    return ($text);
}

完整utf8语言包:

十二月
8

hibernate.cfg.xml位置及JDBC配置

项目需要构建一个Java环境,使用作为数据持久层,一兄弟按照网上的说法配置了,结果搞了几天都没搞好,总是报错“Could not find datasource”,最后还是我自己动手在自己机器上配个环境才引导他弄好。

要配好首先的弄清楚Java在寻找.cfg.xml这个文件的时候在哪些目录中寻找,Java将在以下目录中寻找.cfg.xml这个文件:
webappsname/WEB-INF/classes/
TOMCATHOME/
TOMCATHOME/lib

所以我们的.cfg.xml务必放在webapp的WEB-INF/classes/目录下了,放在其他目录下都不是很合适。

另外就是关于.cfg.xml中的jdbc配置了,网上的说法各异,其实最简单的就是在.cfg.xml中直接使用jdbc配置了,如下:
<?xml version=”1.0″  encoding=”utf-8″?>
<!DOCTYPE -configuration PUBLIC “-/// Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<-configuration>
    <session-factory>
        <property name=”.connection.driver_class”>com.mysql.jdbc.Driver</property>
        <property name=”.connection.url”>jdbc:mysql://localhost/test</property>
        <property name=”.connection.username”>root</property>
        <property name=”.connection.password” />
        <property name=”show_sql”>false</property>
        <property name=”dialect”>org..dialect.MySQLDialect</property>
        <mapping resource=”hb/Cat.hbm.xml” />
    </session-factory>
</-configuration>

更改其中的driverclass和connection.url、username、password和dialect,再添加一些mapping就可以了,需要注意的是property节点的name属性中最好在前面加上。有些文章说使用Tomcat的JNDI,不建议这么做。同时要注意的是在.cfg.xml不要同时使用datasource和连接字符串两种配置(那个兄弟非要使用两种配置结果来不成功),因为没有必要。

其实从部署的角度来看的话,就应该是这样的,首先在生产环境下,很多时候是没有办法拿到Tomcat的管理权限的是配不了JNDI的,而且要去配JNDI无形增加的部署的难度,在.cfg.xml中配置连接字符串就很方便部署(要是像.net中那样支持连接字符串加密就好了)。.cfg.xml存放的位置也是一样的,放在WEB-INF/classes/目录下,部署的时候只要拷贝webapp整个目录就可以完成部署了。

网上的文章用来做参考最好,很多东西还得靠自己领会,特别是碰到问题的时候,尽心书不如无书嘛(也别太相信我写的,说不定那天不管用了。^_^)。

附:使用Tomcat JNDI 数据源配置方法
<?xml version=”1.0″  encoding=”utf-8″ ?>
<!DOCTYPE -configuration PUBLIC “-/// Configuration DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<-configuration>
    <session-factory>
        <property name=”.connection.datasource”>java:comp/env/jdbc/odbcq</property>
        <property name=”show_sql”>false</property>
        <property name=”dialect”>org..dialect.MySQLDialect</property>
        <mapping resource=”hb/Cat.hbm.xml” />
    </session-factory>
</-configuration>

八月
27

用XOOPS构建专题门户社区网站——安徽车市网

Author Dominic    Category XOOPS, 网站管理     Tags

因合作原因,已经于2007年8月份退出了安徽车市网团队,其团队新开发人员可能是更喜欢phpcms,抛弃了,于2008年1月15日完成用phpcms替换。至此,安徽车市网和无关,和dominic无关。 

此文发表于CSDN:http://news.csdn.net/n/20070827/107973.html

2007年初“车行江淮网”决定改版,目标是“将原来小型网站转换成一个综合性汽车专题门户网站和本地汽车社区网站”。我们在进行技术分析时认为,要实现这个目标就需要一个包含内容管理可自由扩展的系统,一个拥有强大的用户管理、页面风格布局管理的系统,一个有基本的文章管理、百科(Wiki)、社区、论坛、图片管理的系统。在综合评估了ASP.Net、JSP、等语言平台下十多种系统之后,我们被的面向对象的可扩展智能建站思想吸引,在阅读了几个系统核心源代码之后,发现的核心在面向对象方面实现的最彻底,于是成为改版“车行江淮网”的不二选择。改版之后的网站命名为“安徽车市网”(http://www.ahcarmarket.com)

“安徽车市网”以符合中文习惯的Article文章管理模块为基础,利用Article模块向外提供了富有Web 2.0元素的汽车资讯服务,最大程度地面向搜索引擎优化,并通过MediaWiki模块提供专门的汽车百科服务。充分利用中强大的主题、风格、区块(局部)概念和功能,辅以Page模块自由布局功能和区块皮肤概念,完美实现各个页面的局部自定义显示而不需要太多额外工作量,中优良的缓存设计又很好的提供了页面显示速度。

利用优秀的可扩展性,“安徽车市网”被打造成一个集资讯、报价、汽车资料、汽车百科、论坛、博客、汽车图库、相册、广告服务、展览服务等多项服务为一身的汽车专题门户社区网站;利用优良的架构,“安徽车市网”将通过利用反向代理等技术实现廉价的快速网站访问。在不断完善、不断发展壮大,是构建多功能、多服务的门户网站或者社区网站的最佳选择!

八月
7

PHPMailer类发送中文邮件兼谈解决XOOPS中文发送邮件乱码

Author Dominic    Category PHP, XOOPS     Tags ,

.org.cn论坛上又有人问发送中文邮件乱码的问题。domecc给出了一个临时办法,还提供一个网址http://www.thedevlog.com/dev/log-29.html来对utf8编码系统做修正。

其实PHPMailer已经是非常成熟的类了(当然需要打上前一段时间出现的bug的补丁),对于邮件头和邮件体的编码处理已经非常好了,http://www.thedevlog.com/dev/log-29.html中提到修改EncodeHeader并编码,实际上EncodeHeader后面的代码就是完成将头部编码的功能,所以不需要修改该函数。

要成功实现发送中文邮件,设置phpmailer类两个值即可。

$mail = new PHPMailer();
$mail->CharSet = “UTF-8″; // 设置字符集编码,GB2312 GBK
$mail->Encoding = “base64″;//设置文本编码方式
……

这样保证了邮件标题和正文内容全部不会乱码,当然邮件内容的字符集需要和给定的CharSet内容一致。

回过头来看看中为什么邮件乱码,在中发送邮件首先我们使用了具体语言的xoopsmailerlocal.文件中XoopsMailerLocal类,而XoopsMailerLocal类继承自class\xoopsmailer.中的XoopsMailer类,而XoopsMailer类的multimailer成员指向自class\mail\xoopsmultimailer.中的XoopsMultiMailer类的实体,XoopsMultiMailer类是从PHPMailer派生的。

问题就出在XoopsMailer的构造函数上。在XoopsMultiMailer类的构造函数中(xoopsmultimailer.中177行)指定了CharSet值为strtolower( _CHARSET ),这样做本来在绝大多数邮件系统中均不会出现乱码,但在XoopsMailer类的sendMail方法(xoopsmailer.中378行)却重新指定了字符集和文本编码方式:

$this->multimailer->CharSet = $this->charSet;
        $this->multimailer->Encoding = $this->encoding;

这样导致前面在构造multimailer的时候指定了字符集为系统字符集strtolower( _CHARSET )(utf-8或者gb2312),到sendMail方法中却换成了XoopsMailer的成员charSet的值,而XoopsMailer的构造函数并没有让charSet随系统变化,而是取默认值:iso-8859-1。邮件客户端收到邮件按照iso-8859-1来显示邮件内容当然会乱码。所以我们只要正确的给XoopsMailer类实体赋给正确字符集(_CHARSET)即可。

解决办法是:

打开htdocs\class\xoopsmailer. ,137行附近
$this->multimailer = new XoopsMultiMailer();
$this->reset();
后面添加一行:
$this->charSet = strtolower( _CHARSET );
$this->encoding = ‘base64′;

更完美的解决办法是:

打开htdocs\language\schinese\xoopsmailerlocal.和htdocs\language\schinese_utf8\xoopsmailerlocal. 修改为:
<?
class XoopsMailerLocal extends XoopsMailer {

    function XoopsMailerLocal(){
        $this->XoopsMailer();
        $this->charSet = strtolower( _CHARSET );
        $this->encoding = ‘base64′;
    }
}
?>

实则是 中文版bug。

另外,为什么要指定encoding呢,这里涉及到email的原理,email产生的年代用7bit就足够表示所有ASCII字符可打印字符了,email发展到全世界之后,多字节语种的需要,需要使用8bit或者16bit或者更多bit来表示一个完整的字,但老式的网络设备和一些邮件系统并不能很好的处理不是7bit的内容或者并不能很好处理多字节的文本内容,这样就需要将文本做一个编码,base64和quoted-printable便是email中用来解决这个问题的最流行方法。email中附件都是用base64来编码具体内容的,用base64编码之后的邮件除非文本内容和指定字符集不一致或者本身就是乱码,否则不会出现乱码的。

当时给ceiea做Windows下邮件系统时候对email做了全面的分析,还是有些用处的。

[tags]PHPMailer,中文,邮件,[/tags]

八月
1

[Hack]将artile模组中的文章的关键词加入到HTML的Meta头中

Author Dominic    Category XOOPS     Tags , , ,

HTML页面的keywords Meta是非常重要的一个Meta,它提供给搜索引擎以指引,告诉当前页面的主要内容,虽然目前很多搜索引擎均不在把把keywords作为唯一标示,但其重要性还是显著的。中可以在后台设置Meta Keywords,通过Smarty变量xoops_meta_keywords写入HTML页面,但这种方式导致所有页面的这个Meta头都一样,影响了keywords Meta的效果,修改article模组的view.article.文件和主题模板文件即可达到即兼顾系统设置和页面个性化keywords Meta的目的,我们将发布文章的录入的tag显示在HTML Meta头中。

首先修改htdocs\modules\article\view.article.文件289行附近,

将原来的

if(@include_once XOOPS_ROOT_PATH.”/modules/tag/include/tagbar.”){
    $xoopsTpl->assign(‘tagbar’, tagBar($article_obj->getVar(“art_keywords”, “n”)));
}

修改成:

$extra_meta_keywords = $article_obj->getVar(“art_keywords”, “n”);//Modifyed By XuYong 添加tag到html的meta标签
if(@include_once XOOPS_ROOT_PATH.”/modules/tag/include/tagbar.”){
    $xoopsTpl->assign(‘tagbar’, tagBar($article_obj->getVar(“art_keywords”, “n”)));
    if(!empty($extra_meta_keywords))$extra_meta_keywords = str_replace(tag_get_delimiter(), “,”, $extra_meta_keywords);//Modifyed By XuYong 添加tag到html的meta标签
}
$xoopsTpl -> assign(“extra_meta_keywords”,$extra_meta_keywords);//Modifyed By XuYong 添加tag到html的meta标签

 即通过增加extra_meta_keywords Smarty变量达到个性化keywords Meta 的目的。

再修改站点所用到的主题模板文件theme.html,将原来的

<meta name=”keywords” content=”<{$xoops_meta_keywords}>” />

 修改成

<meta name=”keywords” content=”<{$extra_meta_keywords}>,<{$xoops_meta_keywords}>” />

八月
1

[Hack]让article模组显示的文章打印功能和RSS输出功能使用站点Logo

Author Dominic    Category XOOPS     Tags , ,

article模组中显示的文章的时候下面的工具箱中的打印功能输出页面头部会打印个图片,而这个图片却是article模组xoops_version.中配置的模块图片,打印出来实在是有些刺眼,RSS输出的地方也是这样。还是改成站点的Logo图片比较好

首先修改htdocs\modules\article\print.文件90行处,

将原来的

$print_data["image"] = XOOPS_URL . “/modules/” . $xoopsModule->getVar(“dirname”) . “/” . $xoopsModule->getInfo( ‘image’ );

 修改成:

$print_data["image"] = XOOPS_URL . “/images/logo.jpg”;//Modified By XuYong 采用站点Logo

再修改htdocs\modules\article\xml. 284行附近,

将原来的

“url”            => XOOPS_URL.”/modules/”.$GLOBALS["artdirname"].”/”.$xoopsModule->getInfo(“image”),

修改成:

“url”            => XOOPS_URL.”/images/logo.jpg”,

其中Logo的具体路径要根据实际情况调整。

专题推荐

标签

404错误 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 上传 个人 中文 中文习惯 关键词 合肥 域名 安全 工作 文件类型 文章管理 时区 未分类 模块 模板 模组 电子地图 界面友好 禅意花园 网速 腾讯 配置管理

分类目录

新浪微博

存档

最近文章

近期评论

友情链接

分享按钮