2011/12/20

被遺忘的 toFixed()

javascript 的 toFixed(n) 可以將數字round up 到小數點後n 個位

var num = 0;

num = new Number(21);
num.toFixed(1) --> 21.0

num = new Number(21.3456);
num.toFixed(0) --> 21
num.toFixed(2) --> 21.35
num.toFixed(4) --> 21.3456

2011/12/14

java replaceAll with $

as $ is one of the symbol used in regular expression
it will fail at replpace all


solution

replace all $ to \\$
String a = "$38 Apple";
a = a.replaceAll("\\$", "\\\\\\$");

replace
String b = "testing testing REPLACE_ME testing testing";
String finalStr= start.replaceAll("REPLACE_ME", a);

2011/12/09

Ebay API SDK Add Item

從今天起,進入api開發的code階段。 這個階段預計有三部分,上傳產品,更新產品,刪除產品。每個部分都以固定價格的產品為例,其他如訂單管理,可變價格產品的管理等,需要讀者自己延伸。 因為每個人編碼習慣不同,所以編寫code的方式也不盡相同,但是為了便於大家更好的理解,這裡的例子都會盡量簡單一些。 對於不同種類的產品,參數可能會大致不相同,但基本的設置無外乎就這些。對於Variation的產品,比如一雙鞋,有43,42,44等尺寸這些產品,一定要仔細參照上邊的code是如何設置的,即便如此,也不能保證一次上傳就能成功,最好就是把返回信息$res保存起來,針對不同error,逐個解決。



class uploadProductToEbay {

 protected $_session = null;
 protected $_cs = null;
 protected $_logger = null;
 protected $_basedir = '';

    public function __construct()
    {
         require_once 'ebay/EbatNs_1_0_679/EbatNs_ServiceProxy.php';
  require_once 'ebay/EbatNs_1_0_679/EbatNs_Logger.php';
  require_once 'ebay/EbatNs_1_0_679/AddFixedPriceItemRequestType.php';
  require_once 'ebay/EbatNs_1_0_679/AddFixedPriceItemResponseType.php';

 
  $this->_basedir = Mage::getBaseDir();
  $this->_session = new EbatNs_Session(Mage::getBaseDir().'yourpath/ebay.config.php');
  $this->_cs      = new EbatNs_ServiceProxy($this->_session);
  $this->_logger  = new EbatNs_Logger();
    }
    public function addEbayProduct($product_data){//$product_data是从db里取得数据,比如产品title,只需在db里更改就可以了

                $req = new AddFixedPriceItemRequestType();
  $item = new ItemType();

  $item->SKU = $product_data['customlabel'];// 产品编号
  $item->Country = 'US';//国家
  $item->AutoPay = true;//paypal支付的话,如果你不想有损失,就老老实实设为true
  $item->Description = trim($product_data['*description']);//描述,不能有ebay规定的敏感字符
  $item->ListingDuration = $product_data['*duration'];
  $item->Title = $product_data['title'];//需少于80字符,不能有ebay规定的敏感字符
  $item->Currency = 'USD';//币种
  $item->ListingType = 'FixedPriceItem';//固定价格产品
  $item->SubTitle = $product_data['subtitle'];
  $item->StartPrice = $product_data['*startprice'];
  $item->ConditionID = $product_data['conditionid'];
  $item->Quantity = round($product_data['*quantity']) ;
  $item->Location = $product_data['*location'];//卖家邮编
 
  $item->DispatchTimeMax = $product_data['*dipatch_time_max'];//最大耗费时间
  $item->PaymentMethods = 'PayPal';//支付方式
  $item->PayPalEmailAddress = $product_data['paypal_email_address'];//paypal账号
 
  $pdts  = new PictureDetailsType();//产品图片部分
  $pdts->GalleryType = $product_data['gallery_type'];
  if(preg_match('/https/',$product_data['picurl']))
   $product_data['picurl'] = str_replace('https','http',$product_data['picurl']);
  $pdts->PictureURL = $product_data['picurl'];
  $item->PictureDetails = $pdts;
 
  $item->PrimaryCategory = new CategoryType();
  $item->PrimaryCategory->CategoryID = $product_data['category'];//分类id
  $item->Site = 'US';
 
  $sdt  = new ShippingDetailsType();
  $ssot = new ShippingServiceOptionsType();
  $issot = new InternationalShippingServiceOptionsType();
  $stt  = new SalesTaxType();
 
  $sdt->ShippingType = 'Flat';
  $sdt->PromotionalShippingDiscount = $product_data['promotional_shipping_discount'];
  $sdt->InternationalPromotionalShippingDiscount = $product_data['intl_promotional_shipping_discount'];
  $sdt->ShippingDiscountProfileID = $product_data['shipping_discount_profile_id'];
  $sdt->InternationalShippingDiscountProfileID = $product_data['intl_shipping_discount_profile_id'];
  $stt->SalesTaxState = $product_data['SalesTaxState'];
  $stt->SalesTaxPercent = $product_data['SalesTaxPercent'];
  $sdt->SalesTax = $stt;
 
  //第一种shipping设置
  $ssot->ShippingServicePriority = round($product_data['shipping1_priority']);
  $ssot->ShippingService = $product_data['shipping1_option'];
  $ssot->ShippingServiceCost = $product_data['shipping1_cost'];
  $sdt->ShippingServiceOptions[] = $ssot ;
 
  //第二种shipping设置,还可以有更多种
  $ssot2 = new ShippingServiceOptionsType();
  $ssot2->ShippingServicePriority = round($product_data['shipping2_priority']);
  $ssot2->ShippingService = $product_data['shipping2_option'];
  $ssot2->ShippingServiceCost = $product_data['shipping2_cost'];
  $sdt->ShippingServiceOptions[] = $ssot2 ;

  //第一种国际的shipping设置,主要针对美国以外的国家
  $issot->ShippingServicePriority = round($product_data['intlshipping1_priority']);
  $issot->ShippingService = $product_data['intlshipping1_option'];
  $issot->ShippingServiceCost = $product_data['intlshipping1_cost'];
  $issot->ShippingServiceAdditionalCost = $product_data['intlshipping1_addition'];
  $issot->ShipToLocation = $product_data['intlshipping1_location'];
  $sdt->InternationalShippingServiceOption[] = $issot ;
 
  //第二种国际的shipping设置,还可以有更多种
  $issot2 = new InternationalShippingServiceOptionsType();
  $issot2->ShippingServicePriority = round($product_data['intlshipping2_priority']);
  $issot2->ShippingService = $product_data['intlshipping2_option'];
  $issot2->ShippingServiceCost = $product_data['intlshipping2_cost'];
  $issot2->ShippingServiceAdditionalCost = $product_data['intlshipping2_addition'];
  $issot2->ShipToLocation = $product_data['intlshipping2_location'];
  $sdt->InternationalShippingServiceOption[] = $issot2 ;
 
  $item->ShippingDetails = $sdt;
 
  //退换货设置
  $rpt  = new ReturnPolicyType();
  $rpt->ReturnsAcceptedOption = $product_data['*return_accepted_option'];//如ReturnsAccepted 表示接受退换货
  $rpt->RefundOption = $product_data['refund_option'];//如MoneyBack 以现金方式返还
  $rpt->ReturnsWithinOption = $product_data['returns_with_option'];//如Days_30 30天内有效
  $rpt->Description = $product_data['additional_details'];//一些备注
  $rpt->ShippingCostPaidByOption = $product_data['shipping_cost_paid_by'];//如Buyer 购买者承担退货运费
  $item->ReturnPolicy = $rpt;
 
  $lcrpt = new ListingCheckoutRedirectPreferenceType();
  $lcrpt->SellerThirdPartyUsername = $product_data['seller_third_party_username'];
  $item->ListingCheckoutRedirectPreference = $lcrpt;
 
  $item->ShipToLocations = $product_data['ShipToLocations'];//如Worldwide,可送往世界各国
 

  //一些产品属性,如适合对象:男士,质地:棉  等等
  $nvlat_si = new NameValueListArrayType();
  $specific = unserialize($product_data['specific']);
  foreach ($specific as $k=>$v){
   $nvlt_si  = new NameValueListType();
   $nvlt_si->Name = $k;
   $nvlt_si->setValue($v);
   $nvlat_si->NameValueList[] = $nvlt_si;
  }
  $item->ItemSpecifics = $nvlat_si;
 
  /* *
  *
  *处理关联产品
  *
  */
  if($product_data['relationship'] == "Variation"){
 
   $vt    = new VariationsType();
   //$v     = new VariationType();
   $nvlat = new NameValueListArrayType();
   $nvlt  = new NameValueListType();
 
   $nvlt->Name = $product_data['Specification'];//如 Bracelet Length

   //$size_array如array('6.25 inches','6.50 inches','6.75 inches')
   $size_array = explode(';',$product_data['relationship_detail']);
   $i=1;
   foreach ($size_array as $size){
    $nvlt->setValue($size,$i++);
   }
   $nvlat->NameValueList = $nvlt;
   $vt->VariationSpecificsSet = $nvlat;
 
   //不同尺码的产品信息
   $relation = unserialize($product_data['relation']);
   foreach ($relation as $pd){
    $v     = new VariationType();
    $nvlat = new NameValueListArrayType();
    $nvlt  = new NameValueListType();
   
    $v->SKU = $pd['sku'];//产品编号
    $v->Quantity = $pd['qty'];//库存
    $v->StartPrice = $pd['price'];
    $nvlt->Name = $product_data['Specification'];
    $nvlt->setValue($pd['size']);//产品尺寸,颜色等属性
    $nvlat->setNameValueList($nvlt);
    $v->VariationSpecifics = $nvlat;
    $vt->Variation[] = $v;

   }
  }

  $item->Variations = $vt;
  $req->Item = $item;
  $res = $this->_cs->AddFixedPriceItem($req);//$res为返回信息,成功,失败,失败原因等


  return $res->ItemID;
    }
}

轉自http://blog.csdn.net/shangxiaoxue/article/details/6949037

2011/11/17

php中require/include 包含相對路徑的解決辦法

在PHP中require,include一個文件時,大都是用相對路徑,是個很頭疼的問題。

問題:
在1.php中通過include("../B/2.php")來引入B目錄下的2.php文件;
在index.php中通過include("A/1.php")來引入A目錄下的1.php文件;
運行出來當然會出現問題,找不到../B/2.php文件。

這是因為:
1.php被編譯到index.php中執行,也就是相當於1.php同index.php一樣位於網站根目錄下,但是在1.php別忘記了一斷代碼include("../B/2 .php");

"../"意味著什麼?上一級目錄,現在1.php已經在根目錄下了,這時候再上一級,那就已經找不到2.php了,所以問題就出現在此。

很多人會想到include("/B/2.php"),這樣不就好了,同樣不行php不同於我們的jsp,在include中使用"/"並不是我們所想像的網站根目錄,它代表的的當前的目錄,因此還是不行。
既然不能用相對的,那我們可以改用絕對路徑的方式。只是在包含文件之前,先包含一個global.php文件。

這個文件的內容是:
chdir(dirname(__FILE__));
它的作用是將當前目錄切換到global.php所在的路徑。 將global.php放在根目時錄下,在這之後包含的所有文件就會以根目錄為基準了。

例如,在2.php中引用1.php,則,通過2步:

1.require(dirname(__FILE__).'/../global.php');//視具體的目錄情況,反正是要指回到根目錄下的global.php 
 2.require('A/1.php')//從根目錄開始定位


這樣的話,不管頁面在哪一級目錄,我都可以去引用,不用再擔心路徑問題了!