OPENCART——一款用PHP編寫的開源電子商務系統,使用MVC設計模式。
作為一名電子商務從業者,相信您一定了解其對于商家的巨大意義。但是眾所周知,對于一個網站來說,不光是外在的美觀,還有著簡介的系統設計和良好的性能表現。
在這里,我們將探討一下,您可能已經了解或是想要了解的:OPENCART的PHP版本的一些特性。就拿其設計模式中的MODEL來說:
db->query("INSERT INTO " . DB_PREFIX . "product SET ..."); ... } public function editProduct($product_id, $data) { $this->db->query("UPDATE " . DB_PREFIX . "product SET ..."); ... } public function deleteProduct($product_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product WHERE..."); ... } } ?>
通過觀察以上代碼,我們可以發現,OPENCART采用了比較好的設計模式,采用了MVC設計模式,同時將MODEL從控制器中單獨分離出來,使得MODEL可以在多個控制器之間共用或者擴展。
但是,這些似乎不是你所期望的答案。所以,讓我們再深入一些。接下來,我們將介紹數據庫層面的角色,這是OPENCART的另一個PHP亮點:
mysqli = new \mysqli($hostname, $username, $password, $database, $port); if ($this->mysqli->connect_error){ throw new \Exception('Error: Could not connect to database: ' . $this->mysqli->connect_error . 'ErrorCode:' . $this->mysqli->connect_errno); } $this->mysqli->query("SET NAMES 'utf8mb4'"); $this->mysqli->query("SET CHARACTER SET utf8mb4"); $this->mysqli->query("SET CHARACTER_SET_CONNECTION=utf8mb4"); $this->mysqli->query("SET SQL_MODE = ''"); } public function query($sql) { $re = $this->mysqli->query($sql . " \n"); $result_array = array(); if ($re){ if ($re->num_rows >0){ while ($result = $re->fetch_assoc()){ $result_array[] = $result; } } $re->close(); } return $result_array; } ... ?>
不同于很多Web開發框架,OPENCART使用了mysqli進行封裝數據庫操作,從而實現了豐富的查詢。其提供了基礎的CURD操作以及過濾和限制等擴展功能。
但是,似乎還是有點不夠明確,所以,我們再來一個例子。這里我們來演示一個類似電商商品購買場景下的數據庫操作,比如獲取購物車信息:
db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE customer_id = '" . (int)$customer_id . "' AND recurring_id = '0' ORDER BY cart_id ASC"); $cart = array(); foreach ($query->rows as $result) { $option_data = array(); $option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart_option WHERE cart_id = '" . (int)$result['cart_id'] . "'"); foreach ($option_query->rows as $option) { $option_info = $this->getOptionInfo($option['product_option_id'], $option['product_option_value_id']); if ($option_info) { $option_data[] = array( 'cart_option_id' =>$option['cart_option_id'], 'product_option_id' =>$option['product_option_id'], 'product_option_value_id' =>$option['product_option_value_id'], 'option_id' =>$option_info['option_id'], 'option_value_id' =>$option_info['option_value_id'], 'name' =>$option_info['name'], 'value' =>$option_info['value'], 'type' =>$option_info['type'] ); } } $product_info = $this->getProduct($result['product_id']); if ($product_info) { $cart[$result['cart_id']] = array( 'cart_id' =>$result['cart_id'], 'product_id' =>$result['product_id'], 'name' =>$product_info['name'], 'model' =>$product_info['model'], 'quantity' =>$result['quantity'], 'stock' =>$product_info['quantity'], 'image' =>$product_info['image'], 'option' =>$option_data, 'price' =>($result['price'] + $this->option->getProductOptionPrice($result['product_id'], $option_data)), 'total' =>($result['price'] + $this->option->getProductOptionPrice($result['product_id'], $option_data)) * $result['quantity'], 'reward' =>$product_info['reward'], 'points' =>($product_info['points'] ? ($product_info['points'] * $result['quantity']) : 0), 'tax_class_id' =>$product_info['tax_class_id'], 'date_added' =>$result['date_added'] ); } } return $cart; } } ?>
從查詢語句來看,其具有非常良好的可讀性,并且提供了可擴展的設計,以滿足不同的需求,而這就是PHP版本下的OPENCART對于商家的最大幫助。同時,其采用的mysqli封裝數據庫操作是很多Web開發者首選的模塊,更為可靠。
希望這篇文章對您了解OPENCART的PHP版本有所幫助。