如何在magento选择支付种类下二次设置和选择支付资料时的数据访问

正常magento后台可设置几种支付类型,但如果在选择某一个支付类型下,需要再填入或选择某种补充性的支付资料时,这些数据如何在后续的代码中传递和访问呢。
我以我在国内的支付宝插件的基础上修改的支付宝外卡的代码进行举例。

图示效果如上。
这时需要在前台的支付信息提示中增加如下代码

<?php $_code=$this->getMethodCode() ?>
	<div  id="payment_form_<?php echo $_code ?>" style="display:none">
                  <input type="radio" name="payment[cc_type]" value="boc-visa" onclick="document.getElementById('alipaymethod').value='YES';" /><img src="https://img.alipay.com/sys/wkpayment/card_logo_VC.png"  alt="Visa" /> 
                <input type="radio" name="payment[cc_type]" value="boc-master" onclick="document.getElementById('alipaymethod').value='YES';" /><img src="https://img.alipay.com/sys/wkpayment/card_logo_MC.png"  alt="MasterCard"  />
                <input type="radio" name="payment[cc_type]" value="boc-jcb" onclick="document.getElementById('alipaymethod').value='YES';" /><img src="https://img.alipay.com/sys/wkpayment/card_logo_JC.png"  alt="JCB"  />
		<input id="alipaymethod" type="hidden" class="required-entry" />
</div>

在支付代码的model\payment.php中
 $order->getPayment()->getData('cc_type');
这样的代码形式,就可以取到前台选择的数据了。(注意红色部份与上述代码的对应关系)

当时为了解决这个问题,特意找了国外的一些支付代码分析,才发现有这样的形式。
这里只是给大家做个示范,如果有更多的资料,可参照这个进行测试。

Magento以日元做基本货币时小数点格式解决方案

最近在建设日文版的magento,使用了它的日文语言包及ec-giken相应的插件,其他的一切功能都还很不错,不过在支付时,发现Magento有一个比较严重的问题“Magento日文货币格式竟然在小数点后有两位0”,比如价格是¥1,000,总是要显示成为¥1,000.00,日元的最小货币单位是元,且没有小数点,这个问题非常严重。在支付时,如果是用paypal,会出现货币金额错误的提示,而且两位数的差距价格。日本人看到这个价格要吓一大跳。

下面就稍微总结一下。
一是修改下列这个文件:

app\code\core\Mage\Core\Model\Store.php 找到roundPrice($price)这个函数,里面的round($price, 2),修改成为floor($price)。不过这个修改实际上对界面是没有影响的,仅仅是在计算的时候只取整数。

二是修改以下文件:

修改文件:code/core/Mage/Core/Model/Store.php 找到

public function formatPrice($price, $includeContainer = true)
{
if ($this->getCurrentCurrency()) {
return $this->getCurrentCurrency()->format($price, array(), $includeContainer);
}
return $price;
}

改成:

public function formatPrice($price, $includeContainer = true)
{
if ($this->getCurrentCurrency()) {
return $this->getCurrentCurrency()->format($price, array(‘precision’=>0), $includeContainer);
//
区别就是在这里,array(‘precision’=>0)就是去掉小数部分,array(‘precision’=>1) 的话就只保留1位小数。 具体需要多少位小数,就由你去自由设置了。
}
return $price;
}

再刷新页面,小数点消失,显示正常了。

另外还涉及

这里就要更改一下设置了:打开lib/Zend/Locale/Data/目录下的默认语言.xml 编辑:
Japanese Yen
¥
把¥换成日文元然后再找到  #,¤ ##0.00

 

当然这样的修改方法缺陷很大,就是在有多个StoreView的时候,没办法保证其他货币的正确显示。相信在后续的Magento版本里面,这个问题应该可以得到修正吧。

2011年Magento十大热门扩展插件!

Magento根据官方扩展中心Magento Connect里面扩展被下载次数的统计,列出了之前一年的十大最具人气扩展。具体如下:

  1. WYSIWYG Editor:为管理后台相关页面添加所见即所得编辑器.

  2. Blog Extension:为Magento提供全套博客功能.

  3. Flash Gallery ‘Flip’ and the new extension ‘CMS Content-Editor:兼容CMS编辑模式的FLASH相册.

  4. Enhanced Admin Products Grid:为产品陈列添加可自定义的“特色展区”.

  5. Free CMS/Block Frontend Features:动态block解决方案,允许用户在页面前台的任意位置添加HTML代码.

  6. Magento Absolute Theme:一款免费的专业Magento主题模板.

  7. FreePOP Theme:一款简洁的主题模板,特别适用于CD、DVD、音乐及影视类网店.

  8. Magento Easy Lightbox:易装易用的lightbox效果插件.

  9. Fooman Speedster:改变Magento加载JavaScript和CSS文件的方式,加速站点.

  10. Exploded Menu:将默认的标准单列弹出菜单替换为多列,支持两级子菜单.

安装APC组件为Magento加速方法和步骤

Centos系统的Lamp环境运行Magento,我们来看下如何使用APC为Magento加速。

网上安装APC的教程很多,我这里将我自己验证过的几个组件的安装命令列出来,大家参考下。如下

#yum install install
#yum install php-devel
#yum install php-pear
#yum install httpd-devel
#yum install pcre-devel

 

先安装如上几个模块,(使用yum就是很省心)。运行如下命令进行APC安装,安装过程中的问题,按照中括号中的建议值填写。
#pecl install apc

 

安装结束后有如下的提示:

# configuration option "php_ini" is not set to php.ini location
# You should add "extension=apc.so" to php.ini

意思是说,让我们在php.ihi文件中,声明加载APC这个扩展。

我的php.ini路径是 /etc/php.ini

在里面的扩展声明部分,加上如下内容即可

extension=apc.so
[APC]
apc.enabled =1
apc.shm_size=256
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
apc.stat=1

 

 

在上面php.ini中[APC]后面的内容是对APC参数进行的设置,你可以根据你的情况来自己修改。

APC优化设置可以参考:http://blog.nexcess.net/2011/03/25/optimizing-apc-cache-settings-for-magento/

重启我们的apache服务器,我们的APC安装就结束了,下面进入Magento的配置环节。

我们去修改Magento的配置文件,文件路径 Magento根目录/app/etc/local.xml

修改后为:

<config>
    <global>
        <install>
            <date><![CDATA[Thu, 12 May 2011 05:06:06 +0000]]></date>
        </install>
        <crypt>
            <key><![CDATA[295888775466d0eb721707c95763b0be]]></key>
        </crypt>
        <disable_local_modules>false</disable_local_modules>
        <resources>
            <db>
                <table_prefix><![CDATA[]]></table_prefix>
            </db>
            <default_setup>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[root]]></username>
                    <password><![CDATA[123456789]]></password>
                    <dbname><![CDATA[shop]]></dbname>
                    <active>1</active>
                </connection>
            </default_setup>
        </resources>
        <session_save><![CDATA[files]]></session_save>
        <cache>
          <backend>apc</backend>
          <prefix>MAGE_</prefix>
        </cache>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[thisisadmin]]></frontName>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>
 

注意,增加的代码是如下(可能因为版本变动,此设置有变化,注意自己google最新Magento文章,参考设置)

<cache>
    <backend>apc</backend>
    <prefix>MAGE_</prefix>
</cache>
 

注意,此处的’MAGE_’ 是唯一值,如果你运行了多个Magento,要给每一个写上不同的<prefix>。

最后一步,刷新Magento缓存。

这样 整个的安装配置过程就结束了。最后我们可以使用APC安装包中的apc.php文件看下我们APC运行的状态。将此文件放在你的magento网站根目录,通过  网址/apc.php 访问,会显示APC的运行信息,也可以看到我们刚才已经设置的参数信息。可以以此图来进行优化配置。

关于zen-cart前台如何判断手机浏览器自动切换模板的思路

zen-cart不支持同一语言下的多模板前台切换,如何想根据不同的浏览器或不同的需要在前台切换模板,就比较为难,查到不官方资料.
我自己找了一下zen-cart的模板数据库中模板路径字段是 template_dir,找到引用这个字段的代码分别在
/includes/init_includes/init_templates.php
/includes/modules/payment/paypal/ipn_application_top.php
代码结构是
 $template_dir = "";
  $sql = "select template_dir
            from " . TABLE_TEMPLATE_SELECT . "
            where template_language = 0";
  $template_query = $db->Execute($sql);
  $template_dir = $template_query->fields['template_dir'];

  $sql = "select template_dir
            from " . TABLE_TEMPLATE_SELECT . "
            where template_language = '" . $_SESSION['languages_id'] . "'";
  $template_query = $db->Execute($sql);
  if ($template_query->RecordCount() > 0) {
    $template_dir = $template_query->fields['template_dir'];
  }

如果在这里增加一个判断手机浏览器或要求切换浏览器的代码,即可更换$template_dir中关于模板的变量,即可实现模板的动态更换.
那如何判断目前的浏览器是手机呢,以下给出示范代码.
function checkmobile(){
    if(isset($_SERVER["HTTP_X_WAP_PROFILE"])) return true;
    if(preg_match("/wap\.|\.wap/i",$_SERVER["HTTP_ACCEPT"])) return true;
    if(isset($_SERVER["HTTP_USER_AGENT"])){
        if(preg_match("/Creative\ AutoUpdate/i",$_SERVER["HTTP_USER_AGENT"])) return false;
       
        $uamatches = array("midp", "j2me", "avantg", "docomo", "novarra", "palmos", "palmsource", "240×320", "opwv", "chtml", "pda", "windows\ ce", "mmp\/", "blackberry", "mib\/", "symbian", "wireless", "nokia", "hand", "mobi", "phone", "cdm", "up\.b", "audio", "SIE\-", "SEC\-", "samsung", "HTC", "mot\-", "mitsu", "sagem", "sony", "alcatel", "lg", "erics", "vx", "NEC", "philips", "mmm", "xx", "panasonic", "sharp", "wap", "sch", "rover", "pocket", "benq", "java", "pt", "pg", "vox", "amoi", "bird", "compal", "kg", "voda", "sany", "kdd", "dbt", "sendo", "sgh", "gradi", "jb", "\d\d\di", "moto");
       
        foreach($uamatches as $uastring){
            if(preg_match("/".$uastring."/i",$_SERVER["HTTP_USER_AGENT"])) return true;
        }
       
    }
    return false;

大家可以试试!

在Magento Zencart中添加静态的自定义标签TAB切换效果代码

一直对的标签TAB切换效果很感兴趣,一起自己折腾一个,偶然在网上看到别人写的一段代码,虽说是独立的,用于哪种php的系统都可以如magento zencart,但还是记录一下,想想什么时候转成magento后台定义的.

兼容IE6,7,FF等.

<script type="text/javascript" language="javascript">
//<!CDATA[
function g(o){return document.getElementById(o);}
function HoverLi(n){
//如果有N个标签,就将i<=N;
    for(var i=1;i<=3;i++ )
    {
        g('tb_ '+i).className='tm2';
        g('tbc_0 '+i).style.display='none';
    }
    g('tbc_0 '+n).style.display='block';
    g('tb_ '+n).className='tm1';
}
</script>

<style type="text/css">
#MenuUl li{ float:left; margin-right:8px;
    }
#toptab{ background-image:url(images/tab_bg.jpg);}

.tm2 {
    background-image:url(../images/t2.jpg);
    width:100px;
    height:24px;
    padding-top:3px;
    cursor:hand;
}
.tm1 {
    cursor:hand;
    color:#015071;
    background-image:url(../images/t1.jpg);
    width:100px;
    height:24px;
    padding-top:3px;
} 

</style>

<div id="ind_container">
  <div id="ind_main_index">
    <div id="ind_news">
   <div style="</div>">
    <div onMouseOver ="x:HoverLi(1);" id="tb_1" class="tm1"><strong>新闻动态</strong></div>
    <div onMouseOver ="x:HoverLi(2);" id="tb_2" class="tm2" style="margin-left: 4px;"><strong>业内新闻</strong></div>
      <div onMouseOver ="x:HoverLi(3);" id="tb_3" class="tm2" style="margin-left: 4px;"><strong>业内新闻</strong></div>
    </div>
    <div id="tbc_01" style="display: block;">
     2222222222222222222
          </div>
          <div style="display: none;" id="tbc_02">
 11111111111111111111
          </div>
              <div style="display: none;" id="tbc_03">
3333333333333
          </div>

有了这个,以后方便多了

zen-cart产品导出出现空白的处理流程和办法

zen-cart产品导出出现空白,只好调试了
第一步
打开文件 \admin\includes\application_top.php,找到
error_reporting(E_ALL & ~E_NOTICE);
修改为
@ini_set(‘display_errors’, ‘1’);
error_reporting(E_ALL);
第二步
重新刷新链接
/admin/easypopulate.php?download=stream&dltype=full
看到错误
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 2101 bytes) in /home/romancearound/public_html/admin/easypopulate.php on line 932
发现可能是产品说明太大或者有一些特殊字符引起的
第三步
解决办法是
admin\easypopulate.php
第一行加入以下代码
@ini_set(“memory_limit”,-1);

再运行可以了!

用.net c#正式完成对magento zen-cart订单,客户资料混合同步到erp的功能

用.net c#正式完成对magento zen-cart订单,客户资料混合同步到erp的功能.
为什么叫混合同步呢?
zen-cart同步用的是对mysql中指定的数据库增量查询方式同步到本地的ms sql server中,然后到按指定格式进入勤哲excel的erp中.
magento主要用的是magento v2 soap webserver api的方式,将magento的相应数据按指定格式组织本地的ms sql server中,然后到按指定格式进入勤哲excel的erp中,同时也支持对magento使用的数据库按增量查询方式同步到本地.
同时用到两种同步渠道,对两种网店进行同步,所以说是混合同步.
既然能支持两种网店的同步,当然就有可能支持第三种,第四种.可惜我没那么多精力用这么网店,除了zen-cart,magento,其它就暂时不考虑了.不过其它网店只要用数据库增量查询方式同步就可以了.

zen-cart多语言提交Merchant Center或google base的注意事项

以日语为例,zencart的google base插件,会将产品说明,标题进行字符序列化,如果是英文就没事,还会给这些数据加上cdata标签,其实这些不是很必要,于是我自己该写了class\google_base.php的相应函数,如

function google_base_sanita($str, $rt=false) {
           	  $str = str_replace(array("\t" , "\n", "\r"), ' ', $str);
	  $str = strip_tags($str);
 $str = str_replace(array("\t" , "\n", "\r", "&nbsp;", "<li>", "</li>", "<p>", "</p>", "<br />", "<blockquote>", "</blockquote>", "<tr>", "</tr>"), ' ', $str);
$str = preg_replace('/\s\s+/', ' ', $str);
 $str = str_replace("&quot;", "\"", $str);
$str = str_replace(array("&amp;", "&"), "AMPERSAN", $str);
$str = preg_replace('/AMPERSAN[A-Za-z0-9#]{1,10};/', '', $str);
 $str = str_replace("AMPERSAN", "&", $str);

      $in = $out = array();
      $in[] = "&reg;"; $out[] = '(r)';
      $in[] = "&copy;"; $out[] = '(c)';
      $in[] = "&trade;"; $out[] = '(tm)';
      if($rt) {
        $str = str_replace(" ", "&nbsp;", $str);
        $str = str_replace("&nbsp;", "", $str);
      }
      $str = str_replace(array("&lt;", "&gt;"), array("<", ">"), $str);
      $str = trim($str);
      return $str;
    }

    // sanitizes code for XML
    function google_base_xml_sanitizer($str, $cdata = false) {
       $str = $this->google_base_sanita($str);

      $str = trim($str);
      return $str;
    }

这样生成的xml文件,就可以直接看到google base 或Merchant Center能接受的格式,并且我们直接看xml也能看到相应的文字信息
这里提醒一下,google base 或Merchant Center支持的国家多了几个,有日本和中国,还有其它一些。
这里还要提醒一下,google base 或Merchant Center上提交数据,最好是在有做这个网站广告的adwords的帐户上操作,不然google会提示因政策原因,提交失败。我搞了半天才知道这个“秘密”。
即使最终生成xml文件,里面依然会有很多问题,在向google base 或Merchant Center提交后,根据提示,逐个进行解决!
google base 或Merchant Center发布的最长有效期是30天,这个要注意,zencart上默认设置是365天,要改掉,不然会被google base 或Merchant Center提示有问题。