森林之原
五月 24, 2012, 04:12:13 am *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.

請輸入帳號, 密碼以及預計登入時間
新聞: 官方釋出 SMF 2.0 beta。繁體中文已經完成。請到 SMF 的版面下載測試。如有問題請通知。
 
   首頁   說明 搜尋 日曆 登入 註冊  
頁: [1]   向下
  寄送主題  |  列印  
作者 主題: 如何改進客戶資料的檢查  (閱讀 5502 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
Owl
初學者
*
離線 離線

文章: 46


« 於: 十一月 18, 2005, 11:14:03 pm »

想改進 zencart 檢查客戶資料的功能,但是 zencart 裏,似乎每個網頁各自檢查,比如很多地方都有相同的程式碼檢查客戶的電話號碼,或是郵遞區號。
請問在哪裡下手比較好?
向版主檢舉   已記錄
seethrou
訪客
« 回覆文章 #1 於: 十一月 19, 2005, 03:12:14 am »

如果可以的,最好等一會兒,因為 v1.3 將會很快出現,最長可能也不會超過數星期之內,官網已經說有熱鬧的討論了,
就算沒公佈,已經觀察到一段時間,官網論壇的問題少了即時的回應(快的是數分鐘),極可能是推出新版的先兆,個人不科學的經驗。 smiley01_055

它應該會在程式碼上有改善,包括改良,統一,合理化和減少程式上的 Queries, 也極大可能包括程式碼上的說明文件。

向版主檢舉   已記錄
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #2 於: 六月 25, 2006, 08:36:40 am »

在 zencart 1.3 裏,我們可以利用 observer notification 把撿查客戶資料的程式,接

入 create_account page 的 header.php 裏,這一點沒問題,但是客戶資料有錯時卻不

能請 header.php 跳過下面的程式不執行,而直接回去讓客戶改正資料。看來看去,只有

改 header.php 了,它很短,動它應該是可以容忍的.下次升級時也不麻煩,真希望

zencart 多考慮一點如何容易的讓人本地化. 改過的 header.php 如下,只改兩行。  還在想,還在想.. smiley01_024
 
$notify_ok = false;
$zco_notifier->notify('NOTIFY_HEADER_START_CREATE_ACCOUNT');
require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
if ($notify_ok)
  include(DIR_WS_MODULES . zen_get_module_directory(FILENAME_CREATE_ACCOUNT));
$breadcrumb->add(NAVBAR_TITLE);
// This should be last line of the script:
$zco_notifier->notify('NOTIFY_HEADER_END_CREATE_ACCOUNT');
« 最後編輯時間: 六月 25, 2006, 08:47:14 am 由 Owl » 向版主檢舉   已記錄
Owl
初學者
*
離線 離線

文章: 46


« 回覆文章 #3 於: 七月 19, 2006, 04:39:56 am »

這樣可以檢查電話和郵遞區號仔細一點:

/include/auto_loaders/config.local.php   
<?php
if (!defined('IS_ADMIN_FLAG')) {
 die('Illegal Access');
}
/*
 * Breakpoint 200.
 *
 */
 $autoLoadConfig[200][] = array('autoType'=>'class',
                              'loadFile'=>'observers/class.create_account_obv.php');
 $autoLoadConfig[200][] = array('autoType'=>'classInstantiate',
                                'className'=>'create_account_obv',
                                'objectName'=>'create_account_obv',
                                );
?>


includes/classes/observers/class.create_account_obv.php
<?php

if (!defined('IS_ADMIN_FLAG')) {
  die('Illegal Access');
}


class create_account_obv extends base
{
   function create_account_obv()
   {
      global $zco_notifier;
      $zco_notifier->attach($this, array('NOTIFY_HEADER_START_CREATE_ACCOUNT'));   
   }
   
   
/**
   * Update Method
   *
   * Called by observed class when any of our notifiable events occur
   *
   * @param object $class
   * @param string $eventID
   */
   function update(&$class, $eventID)
   {
      global $messageStack;
      
      if ($_POST['firstname']=='') return;
      
      $GLOBALS['gender'] = $_POST['gender'];
      $GLOBALS['email_format'] = zen_db_prepare_input($_POST['email_format']);
      $GLOBALS['firstname'] = $_POST['firstname'];
      $GLOBALS['lastname'] = zen_db_prepare_input($_POST['lastname']);
      $GLOBALS['nick'] = zen_db_prepare_input($_POST['nick']);
      $GLOBALS['email_address'] = zen_db_prepare_input($_POST['email_address']);
      $GLOBALS['company'] = zen_db_prepare_input($_POST['company']);
      $GLOBALS['street_address'] = zen_db_prepare_input($_POST['street_address']);
      $GLOBALS['suburb'] = zen_db_prepare_input($_POST['suburb']);
      $GLOBALS['postcode'] = zen_db_prepare_input($_POST['postcode']);
      $GLOBALS['city'] = zen_db_prepare_input($_POST['city']);
      $GLOBALS['state'] = zen_db_prepare_input($_POST['state']);
      $GLOBALS['zone_id'] = zen_db_prepare_input($_POST['zone_id']);
      $GLOBALS['country'] = zen_db_prepare_input($_POST['country']);
      $GLOBALS['telephone'] = zen_db_prepare_input($_POST['telephone']);
      $GLOBALS['fax'] = zen_db_prepare_input($_POST['fax']);
      $GLOBALS['email_format'] = zen_db_prepare_input($_POST['email_format']);
      $GLOBALS['customers_referral'] = zen_db_prepare_input($_POST['customers_referral']);
      $GLOBALS['newsletter'] = zen_db_prepare_input($_POST['newsletter']);
      $GLOBALS['password'] = zen_db_prepare_input($_POST['password']);
      $GLOBALS['confirmation'] = zen_db_prepare_input($_POST['confirmation']);
      $GLOBALS['dob'] = zen_db_prepare_input($_POST['dob']);      

      
      
      $reformed = '';
      
      //----------------------------------
      // check Taiwan zip code
      //----------------------------------
      if ($this->tw_zip($GLOBALS['postcode'], $reformed))
         $GLOBALS['postcode'] = $reformed;
      else
      {
         $GLOBALS['notify_ok'] = false;
         $messageStack->add('create_account', ENTRY_POST_CODE_ERROR);
      }

      //----------------------------------
      // check Taiwan phone number
      //----------------------------------
      if ($this->check_phone_nbr($GLOBALS['telephone'], $reformed))
         $GLOBALS['telephone'] = $reformed;
      else
      {
         $GLOBALS['notify_ok'] = false;
         $messageStack->add('create_account', ENTRY_TELEPHONE_NUMBER_ERROR);
      }

      
    }
   
    function tw_zip($zip,&$reformed)
   {
      $targets = array("-"," ");
      $reformed = str_replace($targets,"",$zip);
      $cnt = preg_match_all ( "/^\d{3}($|\d{2}$)/",$reformed,$regs);
      return $cnt;
   }

   
    function check_phone_nbr($nbr,&$reformed)
   {
      $targets = array("-"," ","(",")");
      $reformed = str_replace($targets,"",$nbr);
      $cnt = preg_match_all ( "/^(0[3-9]\d{4,8}|02\d{8})$/",$reformed,$regs);
      return $cnt;
   }
   
   
}
?>


這是很簡單的試驗,也請大家一同看看其他幾欄如何改進?
« 最後編輯時間: 七月 19, 2006, 05:00:59 am 由 Owl » 向版主檢舉   已記錄
頁: [1]   向上
  寄送主題  |  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!