ecshop添加新功能我感覺無外乎就是兩個地方的修改,顯示的要修改模板,為了方便下次升級,最好都做成lbi,下次升級了直接把lbi拷進去, 然后稍微修改一下dwt的模板就行了。而對于程序部分的修改,我建議做一個自己的目錄,比如dev,然后把自己加的每個功能做成一個php文件放到 dev目錄里面,在需要的時候在原來的ecshop的php里面include或者require進來就行了。這樣下次系統升級目錄一拷,然后在該 include的地方include 一下就ok了,省時省心。當然,我個人建議你維護一個表,用來保存你都在哪些地方做過哪些修改,以方便下次升級的使用。下面我從模板和程序兩個 方面說一下需要修改什么地方。
一、程序層面修改
我們想要顯示的無非就是什么人在什么時間購買了什么東西,這樣分析下來我們需要去從數據庫讀取出來這來信息。從網上找到ecshop的數據字典,看了看 和咱們相關的表有三個ecs_order_info,ecs_order_goods,ecs_users,分別存儲了訂單信息,訂單對應的商品信息和購買商品的用戶信息。這三個表同 user_id,order_id和goods_id三個key來聯系,下面我們要寫出sql語句從中取出我們需要的那些信息,sql語句如下:
SELECT ecs_users.user_name, ecs_order_goods.goods_id, |
上面語句的意思從ecs_order_info里面提取前20個交易,然后根據order_id,goods_id和user_id的關聯來獲取用戶名、商品名、商品id和訂單時間。搞定了sql語句, 下面我們就要按照ecshop的模式來寫個函數,這個函數從通過數據庫獲取sql語句的內容,然后把這個sql的record封裝到一個array里面,傳給smarty模板來使用。 下面給出代碼,大家參考一下:
|
上面代碼使用了$GLOBALS['db']->getAll($sql);來獲取數據庫里面記錄,這個db是在init.php里面系統初始化加載好的全局變量,他負責和數據庫交互,獲取 數據等功能。有時間我寫幾篇ecshop代碼分析的文章,詳細講解一下ecshop的初始化過程,大家就可以了解ecshop高質量的代碼了。下面的那個 foreach做的而 工作其實就是把數據封裝到array,smarty在模板處理時數組友好的。上面只是獲取了array,下面的語句是賦值array到smarty模板”
|
把這句話加到index.php的類似的地方就可以,基本上在80多行,ecshop集中模板賦值的地方。在面我們來看看賦過去的值smarty模板是怎么用的。
二、模板層面的修改
我們建立一個BusinessActivities.lbi來放我們的smarty模板內容。下面是代碼,看完代碼我來分析:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!--{if $invoice_list}--> <style type="text/css"> .boxCenterList form{display:inline;} .boxCenterList form a{color:#404040; text-decoration:underline;} </style> <div class="box"> <div class="box_1"> <h3><span>{$lang.sale_activities}</span></h3> <div class="boxCenterList"> <MARQUEE onmouseover=this.stop() onmouseout=this.start() scrollAmount=1 direction=up height=155px> <!-- 發貨單查詢{foreach from=$recent_buys item=buy_info} --> <image src='images/speaker.gif'> {$buy_info.username} 在 {$buy_info.add_time} 買了 <a href='goods.php?id={$buy_info.goodID}'> {$buy_info.goodName}</a><br> <div class="blank"></div> <!-- 結束發貨單查詢{/foreach}--> </MARQUEE> </div> </div> </div> <div class="blank5"></div> <!-- {/if} --> |
新聞熱點
疑難解答