重新解第四題花了大概八九個小時,這次比較不趕時間,所以重新檢視一下題目的要求及改善解題方式,雖然PDO及自訂函式己經幫忙省了不少功夫,但是第四題有很多畫面需要刻,雖然第一題也很多畫面要刻,但大多可以用複製貼上來完成,第四題的畫面差異比較大,所以刻畫面的部份浪費了不少時間,這部份的工作也沒有什麼好的解決方式,所以最終要靠PHP的部份來省時間。
這次比較大的突破是在選單的部份,由於選單除了要呈現大分類和中分類之外,還要統計各類別的商品數,之前的做法是在秀出選單時再各別去撈商品數出來,這個做法除了sql語法麻煩之外,有幾個選單就要去資料表query幾次的做法,其實效能很差,現在改善的做法是在選單的table加一個count欄位,然後寫一個函式去更新各類別的商品數,接下來就是在有任何影響到商品增減的動作上執行一次這個函式來同步計數的變化就可以了,這樣在做選單時只要一次存取就可以完成選單功能了;不過目前題目的設計上還是存在著問題,由於後台是可以刪除分類的,這會造成己經有分類紀錄的商品找不到對應的分類,也會造成統計上的錯誤,目前無解,除非題目做出修正。
另外在購物車的部份,之前大概花了三十多行在做登入狀態及購物車是否有商品的判斷,現在也換了一個做法,把購物車的陣列改成key-value的型態來分別儲存商品序號(key)及數量(value),同時也把購物車的判斷流程單獨包成一個函式,這樣一來整個程式碼少了一半,而且也簡潔許多,至於存儲的部份,之前使用兩個陣列來儲存商品及數量,現在改成只要一個陣列就夠了,資料表也少了一欄。
後台的部份,原本最麻煩的分類及商品部份是做成兩個檔案來呈現,但看示意圖怎麼看都覺得應該是同一畫面的東西,所以索性改成在一個檔案中分為上下兩個功能的方式來呈現,這樣也少了一個跳頁的處理,同時也可以共用相同的js函式,比如刪除資料的功能,只要傳入資料表名及序號,就可以透過ajax功能去刪除對應的資料,類似的處理方式也可以減少不少js程式碼的工作。
最後是刻畫面的問題,目前能稍微加快作業的方式就是儘可能先把需要刻畫面的部份都先刻好,同時也把檔案都準備好,第四題我用上了二十多個檔案,這樣象購物車和後台訂票詳情的地方畫面都類似,就可以先用複製的方式先做好,然後再統一來處理程式碼的部份,這樣在解題上會比較順手一些。
留言