ecshop 會員卡的添加說明

最近工作需要,開始研究ecshop。根據我們需求情況,需要對用戶添加會員卡字段,用來保存分發給用戶的會員卡卡號,於是看了網上很多文章,覺得他們對用戶的拓展字段的添加不是很好,大多都是說的模糊又不規範,或者使用直接修改現有數據結構的方式,個人認爲不是特別好的做法,於是自己試着按照拓展的方法進行修改,以下便是我的修改過程,如有不當我們可以互相學習一起進步。

首先登陸後臺,打開系統設置》會員註冊項設置,然後添加一個新的註冊項名稱,例如“會員卡”,按需要選擇下面的配置選項,然後確定提交。此時你在前臺註冊頁面會發現註冊字段中最下面多了一個“會員卡”註冊文本框,他的排列順序可以再後臺修改。現在會員卡字段是添加了,但是卻還沒有驗證該字段,這樣用戶可以輸入任何正規字符,顯然這不是我們所需要的。

接着我們找到“/js/user.js”文件,找到“function register()”函數,該函數是處理註冊用戶時觸發的,在該函數頭部聲明變量的地方(如:“var sel_question =  frm.elements['sel_question'] ? Utils.trim(frm.elements['sel_question'].value) : '';”)下面添加新的一行,加入代碼:“var membercard = frm.elements['extend_field100'] ? Utils.trim(frm.elements['extend_field100'].value) : '';    // 會員卡”,此時定義了一個名爲membercard的會員卡變量,用來獲取表單中的會員卡文本,其中“extend_field100”是該會員卡字段的name屬性(注:該name是系統自動生成的,發現與添加時候的排序值有關。可以使用firefox+firebug快速查看該屬性值)。接着在下面一大串if語句的下面,不過要在提交表單之前加入驗證代碼:
// 會員卡驗證
if (membercard.length>0){
    var reg = /^\d{12,18}$/;
    if (!reg.test(membercard) || membercard.length > 18){
        msg += '- 會員卡必須由 12-18 位數字組成!' + '\n';
    }
}

我這裏的驗證只是我需要的,是使用正則表達式匹配一個12到18位的數字字符串,並且總不能大於18,大家應該修改爲自己需要的驗證方式。

到這裏,基本的添加已經完成了,但是我發現ecshop的驗證並不完善,對於用戶登陸後修改會員信息時,基本沒有進行驗證,所以請將註冊時的驗證代碼正確地加入到“/js/user.js”文件的“function userEdit()”函數中意保持信息驗證一致,這裏就不細細說明了。

原本到這裏已經可以結束該話題了,但是可能有很多朋友會問:那我該如何獲取該信息呢?其實也不是很難,只需要在需要的地方使用一條聯合查詢語句就可以了。一下就針對在後臺用戶列表中添加一列顯示用戶會員卡號碼爲例子作爲說明。

剛開始我打開“/admin/users.php”文件,找到用戶賬戶列表處,發現獲取用戶信息代碼並不在此處,原來是使用“user_list()”函數進行調用的,該函數在這個文件的下面,大概673行左右。然後下拉看到“$filter = page_and_size($filter);”改行,下面是一個sql查詢語句,我們將要在這裏加入拓展字段,修改如下:

原查詢語句:
        $sql = "SELECT user_id, user_name, email, is_validated, user_money, frozen_money, rank_points, pay_points, reg_time ".
                " FROM " . $GLOBALS['ecs']->table('users') . $ex_where .
                " ORDER by " . $filter['sort_by'] . ' ' . $filter['sort_order'] .
                " LIMIT " . $filter['start'] . ',' . $filter['page_size'];

修改後的查詢語句:
        $sql = "SELECT u.user_id, user_name, email, is_validated, user_money, frozen_money, rank_points, pay_points, reg_time, content as membercard ".
                " FROM " . $GLOBALS['ecs']->table('users') . " AS u LEFT OUTER JOIN " . $GLOBALS['ecs']->table('reg_extend_info')." AS re ".
                "ON u.user_id = re.user_id" . $ex_where .
                " ORDER by " . $filter['sort_by'] . ' ' . $filter['sort_order'] .
                " LIMIT " . $filter['start'] . ',' . $filter['page_size'];

這裏大概解釋下,使用LEFT OUTER JOIN左聯接,因爲這裏我把用戶表幫左邊,請根據需要自行修改。還需要修改統計查詢語句,在該sql的上面幾行,看到如下代碼:
       $filter['record_count'] = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('users') . $ex_where);
將他們修改爲:
       $sqlcount = "SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('users') . " AS u LEFT OUTER JOIN " . $GLOBALS['ecs']->table('reg_extend_info')." AS re ON u.user_id = re.user_id" . $ex_where;
       $filter['record_count'] = $GLOBALS['db']->getOne($sqlcount);

現在還差一步:添加查詢條件,在
        if ($filter['pay_points_lt'])
        {
            $ex_where .=" AND pay_points < '$filter[pay_points_lt]' ";
        }
下面加入如下代碼:
        $ex_where .= " AND (re.reg_field_id =7 OR ISNULL( re.reg_field_id ))";
現在後臺的函數庫已經更新了,還差最後一步,就是在頁面中顯示出來。

找到“/admin/templates/users_list.htm”該後臺模版文件,在“<th><a href="javascript:listTable.sort('email'); ">{$lang.email}</a>{$sort_email}</th>”下面添加“<th>會員卡</th>”代碼(住:如果需要多語言包,請在/languages中修改和添加字段),在“<td><span οnclick="listTable.edit(this, 'edit_email', {$user.user_id})">{$user.email}</span></td>”下面添加“<td>{$user.membercard}</td>”,至此,就修改完成了。

總結:添加拓展字段主要是sql語句比較麻煩,需要使用到聯合查詢和正確地條件語句。相信大家如果瞭解了以上內容,即可添加更多的拓展字段,而不用去修改數據庫和原有字段,並且這樣可以保留原有,不需要顯示只需隱藏而已,我想這應該是比較好的做法!

文章出自http://www.lonery.com/view_article.php?aid=37
發佈了3 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章