จะเป็นกูรู OpenCart ได้อย่างไร? [ปิด]


100

ดูเหมือนว่าพวกเขาไม่มีเอกสารใด ๆ ยกเว้นการเรียก api ในฟอรัมทางการ ฉันมีประสบการณ์กับ Zend framework และ CodeIgniter framework ผู้เชี่ยวชาญด้าน OpenCart สามารถแนะนำวิธีที่ดีที่สุดในการเรียนรู้และเชี่ยวชาญในระยะเวลาอันสั้นได้หรือไม่? ฉันต้องทำโปรเจ็กต์ใหญ่กับมันเร็ว ๆ นี้


ดูdocs.opencart.comและภาพรวมกรอบโดย Qphoria นอกจากนี้ยังเรียกดูผ่านกระทู้ในOpenCart ฟอรั่ม> ส่วนสนับสนุน ในอนาคตหวังว่าเราจะมีเว็บไซต์ OpenCart SE โดยเฉพาะที่area51.stackexchange.com/proposals/77558/opencart
Pacerier

นี่เป็นคำถามที่สำคัญจริงๆบางครั้งการเอาชนะมาตรฐาน SO ก็มีประโยชน์มาก ...
KAD

1
ขอบคุณมากสำหรับคำถามนี้มันช่วยฉันได้มาก
Bipul Roy

@BipulRoy ฉันดีใจ! ดูเหมือนว่าจะเป็นคำถามยอดนิยมในตอนนี้!
CodeCrack

คำตอบ:


313

คู่มือเริ่มต้นใช้งานฉบับย่อสำหรับนักพัฒนา OpenCart 1.5.X สำหรับผู้เริ่มต้น

คู่มือนี้เขียนขึ้นสำหรับนักพัฒนาที่คุ้นเคยกับ PHP, OOP และสถาปัตยกรรม MVC อยู่แล้ว

ต่อไปนี้คุณจะเห็นตัวอย่างด้านแคตตาล็อกของรถเข็น ด้านผู้ดูแลระบบจะเหมือนกันในการทำงานยกเว้นมุมมองที่ระบุไว้ในส่วนที่เกี่ยวข้อง


การทำความเข้าใจไลบรารี

$this->library_nameทั้งหมดของการทำงานห้องสมุดสามารถเข้าถึงได้ผ่านคอนโทรลเลอร์รุ่นและมุมมองการใช้ ทั้งหมดนี้สามารถพบได้ใน/system/library/โฟลเดอร์ ตัวอย่างเช่นในการเข้าถึงผลิตภัณฑ์ในรถเข็นปัจจุบันคุณจะต้องใช้Cartชั้นเรียนซึ่งอยู่ใน/system/library/cart.phpและสามารถเข้าถึงได้โดยใช้$this->cart->getProducts()

สิ่งของที่ใช้กันทั่วไป

  • customer.php - หน้าที่ที่เกี่ยวข้องกับลูกค้า
  • user.php - ผู้ดูแลระบบฟังก์ชั่นที่เกี่ยวข้องกับผู้ใช้
  • cart.php - ฟังก์ชั่นที่เกี่ยวข้องกับรถเข็น
  • config.php - โหลดการตั้งค่าทั้งหมดจากสิ่งนี้
  • url.php - ฟังก์ชั่นการสร้าง URL

การทำความเข้าใจพารามิเตอร์เส้นทาง

เฟรมเวิร์กของ OpenCart อาศัยroute=aaa/bbb/cccพารามิเตอร์ในสตริงการสืบค้นเพื่อให้ทราบว่าต้องโหลดอะไรและเป็นคุณลักษณะที่ช่วยในการค้นหาไฟล์ที่คุณต้องการแก้ไขสำหรับแต่ละเพจ เส้นทางส่วนใหญ่ใช้เฉพาะส่วนaaa/bbbที่ควรจะเห็นเป็นสองส่วนอย่างไรก็ตามบางส่วนมีสามส่วนส่วนaaa/bbb/cccแรกaaaโดยทั่วไปเกี่ยวข้องกับโฟลเดอร์ภายในโฟลเดอร์ทั่วไปเช่นคอนโทรลเลอร์หรือโฟลเดอร์เทมเพลต ส่วนที่สองมักเกี่ยวข้องกับชื่อไฟล์โดยไม่มีส่วนเกี่ยวข้อง.phpหรือ.tplนามสกุล ส่วนที่สามอธิบายไว้ในหัวข้อ "การทำความเข้าใจคอนโทรลเลอร์" ด้านล่าง


การเข้าใจภาษา

ภาษาจะถูกเก็บไว้ใน/catalog/language/โฟลเดอร์ในyour-languageโฟลเดอร์ย่อย ภายในนี้ค่าข้อความทั่วไปที่ใช้ในหน้าต่างๆจะถูกเก็บไว้ในyour-language.phpไฟล์ภายในโฟลเดอร์ดังนั้นสำหรับภาษาอังกฤษทางด้านแค็ตตาล็อกคุณจะพบค่าในรูปแบบcatalog/language/english/english.php. สำหรับข้อความหน้าเฉพาะคุณจะต้องrouteสำหรับหน้าเว็บ (นี้เป็นกรณีทั่วไป แต่ไม่ได้เสมอที่คุณสามารถระบุไฟล์ภาษาใด ๆ ที่คุณต้องการ) ตัวอย่างเช่นหน้าการค้นหามีเส้นทางproduct/searchและดังนั้นข้อความภาษาที่เฉพาะเจาะจงสำหรับหน้าเว็บที่สามารถพบได้ใน(ชื่อเวปไซด์ของไฟล์และโฟลเดอร์ย่อยตรงกับเส้นทางตามมาด้วยcatalog/language/english/product/search.php.php

ในการโหลดภาษาในคอนโทรลเลอร์ให้ใช้

$this->language->load('product/search');

จากนั้นคุณสามารถใช้ฟังก์ชันไลบรารีภาษาgetเพื่อดึงข้อความภาษาที่ต้องการเช่น

$some_variable = $this->language->get('heading_title');

ตัวแปรภาษาถูกกำหนดในไฟล์ภาษาโดยใช้ตัวแปรพิเศษ$_ซึ่งเป็นอาร์เรย์ของคีย์และค่าข้อความ ในของ/catalog/language/english/product/search.phpคุณคุณควรพบสิ่งที่คล้ายกับ

$_['heading_title']     = 'Search';

ค่าในไฟล์ภาษาส่วนกลางenglish/english.phpจะถูกโหลดโดยอัตโนมัติและพร้อมใช้งานโดยไม่ต้องใช้$this->language->loadเมธอด


การทำความเข้าใจคอนโทรลเลอร์

ตัวควบคุมถูกโหลดตามrouteและค่อนข้างตรงไปตรงมาเพื่อทำความเข้าใจ ตัวควบคุมจะอยู่ใน/catalog/controller/โฟลเดอร์ ต่อจากตัวอย่างสุดท้ายตัวควบคุมสำหรับเพจ Search จะอยู่ใน/product/search.phpโฟลเดอร์นี้ แจ้งให้ทราบอีกครั้งว่าเส้นทางที่ใช้โดย.phpถูกนำมาใช้

เมื่อเปิดไฟล์คอนโทรลเลอร์คุณจะเห็นชื่อคลาส Pascal Case ที่ขยายControllerคลาสเรียกว่าControllerProductSearch. อีกครั้งนี้เฉพาะสำหรับเส้นทางโดยControllerตามด้วยชื่อโฟลเดอร์ย่อยและชื่อไฟล์โดยไม่มีนามสกุลเป็นตัวพิมพ์ใหญ่ ไม่จำเป็นต้องใช้อักษรตัวพิมพ์ใหญ่ แต่ขอแนะนำให้อ่านง่าย เป็นที่น่าสังเกตว่าชื่อคลาสไม่ได้รับค่าใด ๆ จากโฟลเดอร์ย่อยและชื่อไฟล์นอกเหนือจากตัวอักษรและตัวเลข ขีดล่างจะถูกลบออก

ภายในชั้นเรียนมีวิธีการ วิธีการในคลาสที่ประกาศpublicนั้นสามารถเข้าถึงได้เพื่อเรียกใช้ผ่านเส้นทาง - privateไม่ได้ ตามค่าเริ่มต้นด้วยเส้นทางสองส่วนมาตรฐาน ( aaa/bbbด้านบน) จะมีindex()การเรียกวิธีการเริ่มต้น หากใช้ส่วนที่สามของเส้นทาง ( cccด้านบน) วิธีนี้จะถูกเรียกใช้แทน ตัวอย่างเช่นaccount/return/insertจะโหลด/catalog/controller/account/return.phpไฟล์และคลาสและพยายามเรียกใช้insertเมธอด


การทำความเข้าใจโมเดล

โมเดลใน OpenCart พบได้ใน/catalog/model/โฟลเดอร์และจัดกลุ่มตามฟังก์ชันไม่ใช่เส้นทางดังนั้นคุณจะต้องโหลดในคอนโทรลเลอร์ของคุณผ่าน

$this->load->model('xxx/yyy');

นี้จะโหลดไฟล์ในโฟลเดอร์ย่อยที่เรียกว่าxxx yyy.phpจากนั้นจะพร้อมใช้งานผ่านวัตถุ

$this->model_xxx_yyy

และเช่นเดียวกับคอนโทรลเลอร์คุณสามารถเรียกใช้publicวิธีการเท่านั้น ตัวอย่างเช่นในการปรับขนาดรูปภาพคุณต้องใช้tool/imageโมเดลและเรียกresizeวิธีการดังต่อไปนี้

$this->load->model('tool/image');
$this->model_tool_image->resize('image.png', 300, 200);

ทำความเข้าใจการกำหนดตัวแปรในมุมมองจากตัวควบคุม

ในการส่งผ่านค่าไปยังมุมมองจากคอนโทรลเลอร์คุณเพียงแค่กำหนดข้อมูลของคุณให้กับ$this->dataตัวแปรซึ่งโดยพื้นฐานแล้วคืออาร์เรย์ของคู่คีย์ => ค่า ตัวอย่างเช่น

$this->data['example_var'] = 123;

การเข้าถึงสิ่งนี้ในมุมมองเป็นเรื่องเล็กน้อยที่จะเข้าใจได้ง่ายหากคุณคุ้นเคยกับเมธอดextract ()ซึ่งจะแปลงแต่ละคีย์เป็นตัวแปร ดังนั้นexample_varคีย์จึงกลายเป็น$example_varและสามารถเข้าถึงได้ในมุมมอง


ทำความเข้าใจกับธีม

ธีมมีให้สำหรับด้านแคตตาล็อกเท่านั้นและโดยพื้นฐานแล้วจะเป็นโฟลเดอร์ของเทมเพลตสไตล์ชีทและรูปภาพธีม โฟลเดอร์ธีมจะอยู่ใน/catalog/view/theme/โฟลเดอร์ตามด้วยชื่อธีม ชื่อโฟลเดอร์ไม่มีความสำคัญยกเว้นdefaultโฟลเดอร์

ฝั่งผู้ดูแลระบบใช้/admin/view/template/(ข้าม/theme/theme-name/จากเส้นทางเนื่องจากไม่อนุญาตให้ใช้ธีมที่แตกต่างกัน)

ไฟล์เทมเพลตอยู่ในtemplateโฟลเดอร์ภายในโฟลเดอร์ธีม หากไม่มีเทมเพลตใด ๆ สำหรับธีมที่เลือกในปัจจุบันเทมเพลตของโฟลเดอร์เริ่มต้นจะถูกใช้เป็นทางเลือกแทน ซึ่งหมายความว่าสามารถสร้างธีมได้ด้วยไฟล์จำนวนน้อยมากและยังคงทำงานได้อย่างสมบูรณ์ นอกจากนี้ยังช่วยลดความซ้ำซ้อนของรหัสและปัญหาเมื่อทำการอัพเกรด


การทำความเข้าใจมุมมอง (เทมเพลต)

เช่นเดียวกับภาษาและโมเดลโดยทั่วไปไฟล์ดูจะเกี่ยวข้องกับเส้นทางแม้ว่าจะไม่จำเป็นต้องมีเลยก็ตาม โดยทั่วไปจะพบเทมเพลตในด้านแค็ตตาล็อก/catalog/view/theme/your-theme/template/เว้นแต่จะไม่มีอยู่ซึ่งในกรณีนี้จะใช้เทมเพลตของธีมเริ่มต้น สำหรับตัวอย่างหน้าการค้นหาของเราด้านบนไฟล์คือproduct/search.tpl. สำหรับเส้นทางที่มีสามส่วนโดยทั่วไปaaa/bbb_ccc.tplแม้ว่าจะไม่มีกฎที่กำหนดไว้อย่างชัดเจนก็ตาม ในผู้ดูแลระบบหน้าเว็บส่วนใหญ่ทำตามนี้มีข้อยกเว้นว่าหน้ารายการรายการเช่นหน้ารายชื่อผลิตภัณฑ์ที่อยู่ในรูปแบบการแก้ไขสินค้าที่อยู่ในcatalog/product_list.tpl catalog/product_form.tplอีกครั้งสิ่งเหล่านี้ไม่ได้กำหนด แต่เป็นมาตรฐานสำหรับรถเข็นเริ่มต้น

ไฟล์เทมเพลตนั้นเป็นเพียงไฟล์ php อื่น แต่มีนามสกุล. tpl และถูกเรียกใช้ในไฟล์คอนโทรลเลอร์ดังนั้นทุกสิ่งที่คุณสามารถเขียนโค้ดในคอนโทรลเลอร์สามารถเรียกใช้ในไฟล์เทมเพลตได้ (แม้ว่าจะไม่แนะนำเว้นแต่อย่างแน่นอน จำเป็น)


ทำความเข้าใจกับวัตถุฐานข้อมูล

คิวรีรันโดยใช้

$result = $this->db->query("SELECT * FROM `" . DB_PREFIX . "table`");

DB_PREFIX ตามชื่อที่แนะนำคือค่าคงที่ที่มีคำนำหน้าฐานข้อมูลหากมีอยู่

$resultจะส่งคืนอ็อบเจ็กต์สำหรับSELECTเคียวรีซึ่งมีคุณสมบัติบางอย่าง

$result->row มีข้อมูลของแถวแรกหากส่งคืนอย่างน้อยหนึ่งรายการเป็นอาร์เรย์ที่เชื่อมโยงกัน

$result->rows มีอาร์เรย์ของผลลัพธ์แถวที่เหมาะสำหรับการวนซ้ำโดยใช้ foreach

$result->num_rows มีจำนวนผลลัพธ์ที่ส่งคืน

นอกจากนี้ยังมีวิธีการพิเศษบางอย่างที่$this->dbวัตถุมี

$this->db->escape()ใช้mysql_real_escape_string ()กับค่าที่ส่งผ่าน

$this->db->countAffectedส่งคืนจำนวนแถวที่ได้รับผลกระทบจากUPDATEแบบสอบถามและอื่น ๆ

$this->db->getLastId()ส่งคืนรหัสการเพิ่มอัตโนมัติล่าสุดโดยใช้mysql_insert_id ()


การทำความเข้าใจตัวแปรที่สงวนไว้

OpenCart ได้กำหนดไว้ล่วงหน้าตัวแปรเพื่อการใช้งานในสถานที่ของมาตรฐาน$_GET, $_POST, $_SESSION, $_COOKIE, $_FILES, $_REQUESTและ$_SERVER

$_SESSIONถูกแก้ไขโดยใช้โดย$this->session->dataที่ข้อมูลเป็นอาร์เรย์ที่เชื่อมโยงซึ่งเลียนแบบ$_SESSION

คนอื่น ๆ ทั้งหมดสามารถเข้าถึงได้โดยใช้$this->requestและได้รับการ "ล้าง" เพื่อให้สอดคล้องกับคำพูดวิเศษที่เปิด / ปิดใช้งานดังนั้น

$_GET กลายเป็น $this->request->get

$_POST กลายเป็น $this->request->post

$_COOKIE กลายเป็น $this->request->cookie

$_FILES กลายเป็น $this->request->files

$_REQUEST กลายเป็น $this->request->request

$_SERVER กลายเป็น $this->request->server


สรุป

แม้ว่าข้างต้นจะไม่ใช่คู่มือกันกระสุนสำหรับนักพัฒนา แต่หวังว่าจะเป็นจุดเริ่มต้นที่ดีสำหรับผู้ที่เริ่มต้นใช้งาน


3
ขอบคุณ! คุณได้รับสิ่งนี้ที่ใด
CodeCrack

64
ฉันเขียนมัน ฉันคิดว่ามันจำเป็นต้องมีการเขียนและทำให้พอดีกับภารกิจ
Jay Gilford

2
ดีมาก. ให้ข้อมูลมากกว่าคำแนะนำส่วนใหญ่ คุณมีความก้าวหน้าโดยบังเอิญหรือไม่?
CodeCrack

3
สิ่งนี้ควรได้รับสถานะ Community Wiki
Stann0rz

1
@UltimateKing - คู่มือนี้ให้ข้อมูลมากพอที่จะช่วยให้คุณเริ่มสร้างม็อดของคุณเองได้ นอกจากนี้ยังมีแบบฝึกหัดเฉพาะสำหรับการพัฒนาโมดูลบนเน็ต
Jay Gilford

36

วิธีการไลบรารีส่วนกลาง: ฟังก์ชันไลบรารี opencart พื้นฐานพร้อมกับฟังก์ชันการทำงานส่วนใหญ่สามารถเรียกได้จากทุกที่ในแค็ตตาล็อกหรือโฟลเดอร์ผู้ดูแลระบบ (ตัวควบคุมโมเดลมุมมอง)

CACHE
$this->cache->delete($key) - Deletes cache [product, category, country, zone, language, currency,
manufacturer]

CART
$this->cart->getProducts() Gets all products currently in the cart including options, discounted prices, etc.
$this->cart->add( $product_id, $qty = 1, $options = array()) - Allows you to add a product to the cart
$this->cart->remove( $key ) - Allows you to remove a product from the cart
$this->cart->clear() - Allows you to remove all products from the cart
$this->cart->getWeight() - Sum of the weight of all products in the cart that have require shipping set to Yes
$this->cart->getSubTotal() - returns the subtotal of all products added together before tax
$this->cart->getTotal() - returns the total of all products added together after tax
$this->cart->countProducts() - returns the count of all product in the cart
$this->cart->hasProducts() - returns true if there is at least one item in the cart
$this->cart->hasStock() - returns false if there is at least one item in the cart that is out of stock
$this->cart->hasShipping() - returns true if there is at least one item in the cart that requires shipping
$this->cart->hasDownload() - returns true if there is at least one item in the cart that has a download
associated

CONFIG
$this->config->get($key) - returns setting value by keyname based on application (catalog or admin)
$this->config->set($key, $value) - set the value to override the setting value. DOES NOT SAVE TO DATABASE

CURRENCY
$this->currency->set($currency) - set or override the currency code to be used in the session
$this->currency->format($number, $currency = '', $value = '', $format = TRUE) - format the currency
$this->currency->convert($value, $from, $to) - convert a value from one currency to another. Currencies must
exist
$this->currency->getId() - get the database entry id for the current currency (1, 2, 3, 4)
$this->currency->getCode() - get the 3-letter iso code for the current currency (USD, EUR, GBP, AUD, etc)
$this->currency->getValue($currency) - get the current exchange rate from the database for the specified
currency.
$this->currency->has(currency) - Check if a currency exists in the opencart currency list

CUSTOMER
$this->customer->login($email, $password) - Log a customer in
$this->customer->logout() - Log a customer out
$this->customer->isLogged() - check if customer is logged in
$this->customer->getId() - get the database entry id for the current customer (integer)
$this->customer->getFirstName() - get customer first name
$this->customer->getLastName() - get customer last name
$this->customer->getEmail() - get customer email
$this->customer->getTelephone() - get customer telephone number
$this->customer->getFax() - get customer fax number
$this->customer->getNewsletter() - get customer newsletter status
$this->customer->getCustomerGroupId() - get customer group id
$this->customer->getAddressId() - get customer default address id (maps to the address database field)

DATABASE
$this->db->query($sql) - Execute the specified sql statement. Returns row data and rowcount.
$this->db->escape($value) - Escape/clean data before entering it into database
$this->db->countAffected($sql) - Returns count of affected rows from most recent query execution
$this->db->getLastId($sql) - Returns last auto-increment id from more recent query execution 4

DOCUMENT (*Called from controller only before renderer)
$this->document->setTitle($title) - Set page title
$this->document->getTitle()- Get page title
$this->document->setDescription($description) - Set meta description
$this->document->getDescription()- Get meta description
$this->document->setKeywords()- Set meta keywords
$this->document->getKeywords()- Get meta keywords
$this->document->setBase($base) - Set page base
$this->document->getBase() - Get page base
$this->document->setCharset($charset) - Set page charset
$this->document->getCharset() - Get page charset
$this->document->setLanguage($language) - Set page language
$this->document->getLanguage()- Get page language
$this->document->setDirection($direction) - Set page direction (rtl/ltr)
$this->document->getDirection()- Get page direction (rtl/ltr)
$this->document->addLink( $href, $rel ) – Add dynamic <link> tag
$this->document->getLinks()- Get page link tags
$this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' ) – Add dynamic style
$this->document->getStyles()- Get page styles
$this->document->addScript( $script ) - Add dynamic script
$this->document->getScripts()- Get page scripts
$this->document->addBreadcrumb($text, $href, $separator = ' &gt; ') – Add breadcrumb
$this->document->getBreadcrumbs()- Get Breadcrumbs

ENCRYPT
$this->encryption->encrypt($value) - Encrypt data based on key in admin settings
$this->encryption->decrypt($value) - Decrypt data based on key in admin settings

IMAGE
$this->image->resize($width = 0, $height = 0)

JSON
$this->json->encode( $data )
$this->json->decode( $data , $assoc = FALSE)

LANGUAGE
$this->language->load($filename);

LENGTH
$this->length->convert($value, $from, $to) - convert a length to another. units must exist
$this->length->format($value, $unit, $decimal_point = '.', $thousand_point = ',') - format the length to use
unit

LOG
$this->log->write($message) - Writes to the system error log

REQUEST
$this->request->clean($data) - Cleans the data coming in to prevent XSS
$this->request->get['x'] - Same as $_GET['x']
$this->request->post['x'] - Same as $_POST['x']

RESPONSE
$this->response->addHeader($header) - additional php header tags can be defined here
$this->response->redirect($url) - redirects to the url specified

TAX
$this->tax->setZone($country_id, $zone_id) - Set the country and zone id for taxing (integer)
$this->tax->calculate($value, $tax_class_id, $calculate = TRUE) - Calculate all taxes to be added to the total
$this->tax->getRate($tax_class_id) - Get the rates of a tax class id
$this->tax->getDescription($tax_class_id) - Get the description of a tax class id
$this->tax->has($tax_class_id) - Check if a tax class id exists in opencart

SESSION
$this->session->data['x'] - Same as $_SESSION['x']  

9

มีเว็บไซต์ OpenCart Wiki พร้อมเอกสารสำหรับนักพัฒนามือใหม่ ทำตาม URL ที่ระบุด้านล่างสำหรับรายละเอียดเพิ่มเติม:

http://wiki.opencarthelp.com/doku.php?id=start
http://wiki.opencarthelp.com/doku.php?id=methods_reference

ลิงก์ INTERNET ARCHIVE

http://web.archive.org/web/20160305131349/http://wiki.opencarthelp.com/doku.php?id=start http://web.archive.org/web/20160305131349/http://wiki .opencarthelp.com / doku.php? id = method_reference

เช่นการอ้างอิงวิธีการมีรายละเอียดสำหรับ:

  1. เข้าสู่ระบบของลูกค้า
  2. การเข้าถึงฐานข้อมูล
  3. การจัดการรถเข็น
  4. Config
  5. แคช
  6. การจัดการสกุลเงิน

ยังคงมีบางหน้าอยู่ระหว่างการปรับปรุง แต่จะเป็นประโยชน์

[อัปเดต]

ตั้งแต่เดือนมกราคม 2018 โดเมน opencarhelp.com หยุดทำงาน


ดูเหมือนว่าจะยังมีข้อมูลอีกมากที่ขาดหายไปหลังจากผ่านไปสองสามเดือน โครงการนี้ล้มเลิกไปหรือไม่?
Pacerier

@Pacerier ฉันไม่แน่ใจว่า
ธรรมมัง

นี่เป็นหน้าเว็บที่ยอดเยี่ยมแม้กระทั่งการเปิดวิกิรถเข็นอ้างอิงคุณสามารถดูลิงค์ได้ที่นี่wiki.opencarthelp.com/doku.php?id=opencart_framework
Nassim

4

แม้ว่าหัวข้อนี้จะได้รับคำตอบหลายครั้งแล้ว แต่ฉันก็อยากจะเสนอแนวทางอื่นในการเรียนรู้ OpenCart จากประสบการณ์ของฉัน

การเรียนรู้โดยการทำ

ด้วยการสร้างเฟรมเวิร์ก OpenCart ของคุณเองตั้งแต่เริ่มต้นด้วยไฟล์จำนวนหนึ่งคุณจะเข้าใจได้ว่าทุกอย่างถูกรวมเข้าด้วยกันอย่างไร ฉันจะเลียนแบบโครงสร้างไฟล์ของ OpenCart ให้คุณ

สร้างไฟล์ index.php

<?php
// My simpleCart

1. Registry

Opencart ใช้รูปแบบ Registry เพื่อแสดงรายการอินสแตนซ์ทั้งหมดของคลาสที่โหลด ถือเป็นหัวใจสำคัญของแอป OpenCart ของคุณ จากนั้นอ็อบเจ็กต์รีจิสทรีจะถูกส่งต่อไปยังทุกประเภทโมเดลและไลบรารีเพื่อการเข้าถึงออบเจ็กต์อื่น ๆ อย่างรวดเร็ว

สร้างไฟล์ด้วยพา ธ /system/engine/registry.php

<?php
// Registry class. 
class Registry
{
    private $data = array();

    public function set($key, $value){
        $this->data[$key] = $value;
    }

    public function get($key){
        return (isset($this->data[$key])) ? $this->data[$key] : false;
    }
}

ในไฟล์ index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');

//initialize registry
$registry = new Registry;

2. เอาต์พุต

ตอนนี้ขอเพิ่มผลลัพธ์ซึ่งจะเป็น HTML ของเราในอนาคต ท้ายที่สุดแนวคิดทั้งหมดคือการส่งสตริงข้อความไปยังเบราว์เซอร์

สร้างไฟล์ system/library/response.php

<?php
class Response {
    private $output;

    public function getOutput() {
        return $this->output;
    }

    public function setOutput($output) {
        $this->output = $output;
    }

    public function output() {
        if ($this->output) {
            echo $this->output;
        }
    }
}

และในไฟล์ index.php

<?php
// My simpleCart

//load dependency files
require_once('system/engine/registry.php');
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add response object to the registry
$registry->set('response', $response);

//lets set an output as a test
$registry->get('response')->setOutput('Hello World');

//send the output to the client
$registry->get('response')->output();

สังเกตว่าฉันได้เพิ่ม Hello world เป็นเพียงตัวอย่างเท่านั้น เราจะลบออกต่อไปในวันที่ รีเฟรชไซต์ของคุณเพื่อตรวจสอบ Hello Worldเบราว์เซอร์จะแสดง

3. ตัวควบคุม

คิดว่าตัวควบคุมเป็นหน้า พวกเขาจะกำหนดสิ่งที่จะแสดงต่อไคลเอนต์: ข้อความ, html, json, ดาวน์โหลดหรือแม้แต่รูปภาพ ตอนนี้เราต้องการเพียงหน้าที่ส่งข้อความ

เราจะสร้างตัวควบคุมสำหรับhomeเพจ

เพิ่มไฟล์ที่มีเส้นทาง catalog/controller/common/home.php

<?php

class ControllerCommonHome{

    private $registry = array();

    public function __construct($registry){
        $this->registry = $registry;
    }

    public function index(){

        $output = 'Home Page';
        //using the registry to get the response object and set the Output
        $this->registry->get('response')->setOutput($output);
    }
}

และแก้ไขไฟล์ index.php

<?php
// My simpleCart

//load registry
require_once('system/engine/registry.php');
//load response
require_once('system/library/response.php');

//initialize registry
$registry = new Registry;

//initialize response
$response = new Response;
//add resoinse object to the registry
$registry->set('response', $response);

//load controller common/home
require_once('catalog/controller/common/home.php');
$controller = new ControllerCommonHome($registry);
$controller->index();

//send the output to the client
$registry->get('response')->output();

สังเกตว่าฉันส่งผ่าน$refistryไปยัง ControllerCommonHome อย่างไรเพื่อให้ฉันสามารถเข้าถึงได้ภายในคอนโทรลเลอร์

4. เราเตอร์

เราไม่ต้องการให้คอนโทรลเลอร์เป็นฮาร์ดโค้ดใช่ไหม เราจะใช้พารามิเตอร์routeจากที่อยู่ url เพื่อบอกรถเข็นของเราว่าจะโหลดคอนโทรลเลอร์ใด

สร้างไฟล์ด้วยพา ธ system/library/request.php

<?php
class Request {
    public $get = array();

    //for now I just need the $_GET parameter
    public function __construct() {
        $this->get = $_GET;
    }
}

สร้างคลาสเราเตอร์ที่จะรับผิดชอบในการเริ่มต้นไฟล์คอนโทรลเลอร์ตามเส้นทาง (หรืออีกนัยหนึ่ง: เรียกคอนโทรลเลอร์แบบไดนามิก)

<?php
class Router {
    private $registry;

    public function __construct($registry) {
        $this->registry = $registry;
    }

    public function dispatch($route) {
        require_once('catalog/controller/'.$route.'.php');
        $class = "Controller".str_replace('/', '', $route);
        $controller = new $class($this->registry);
        $controller->index();
    }
}

โหลดลงในไฟล์ index.php

<?php
require_once('system/engine/registry.php');
require_once('system/engine/router.php');
require_once('system/library/response.php');
require_once('system/library/request.php');

$registry = new Registry;

$response = new Response;
$registry->set('response', $response);

$request = new Request;
$registry->set('request', $request);

//get the route from the url
if(isset($registry->get('request')->get['route'])){
    $route = $registry->get('request')->get['route'];
}else{
    $route = 'common/home';
}

//initiate the router and dispatch it base on the route
$router = new Router($registry);
$router->dispatch($route);


$registry->get('response')->output();

สังเกตว่าฉันโหลดทุกอย่างลงในไฟล์$registryแล้วส่ง$routerผ่านไปยังไฟล์$controller.

โพสต์นี้ยาวเกินไปแล้ว แต่ฉันหวังว่ามันจะให้ความเข้าใจพื้นฐานเกี่ยวกับรูปแบบ MVC ใน OpenCart

หากคุณต้องการให้ฉันดำเนินการต่อในโพสต์นี้และบอกคุณว่าสิ่งอื่น ๆ ทำงานเช่นโมเดลและมุมมองอย่างไรให้คะแนนคำตอบนี้เพื่อให้ฉันรู้

ตรวจสอบ Youtube ของฉันhttps://www.youtube.com/dreamventionและบล็อกของฉันhttps://dreamvention.com/blogฉันจะโพสต์เคล็ดลับและบทช่วยสอนเพิ่มเติมสำหรับพวกคุณ!


1

PHP เป็นภาษาที่ค่อนข้างใหญ่มีฟังก์ชันในตัวมากกว่า 5,000 ฟังก์ชันดังนั้นกลยุทธ์หนึ่งในการเรียนรู้แพลตฟอร์มใหม่คือการระบุว่าฟังก์ชันใดที่ใช้บ่อยที่สุดและใช้เวลาทำความรู้จักกับสิ่งเหล่านี้เป็นอย่างดี

ฉันเรียกใช้การสืบค้นเกี่ยวกับซอร์สโค้ด OpenCart และฟังก์ชันที่ใช้บ่อยที่สุด 10 อันดับแรก ได้แก่ :

array()
count()
explode()
implode()
mktime()
delete()
time()
date()
sprintf()
list()

ทั้งหมด 52 รายการที่แสดงไว้ที่นี่รวมถึงคำสั่ง bash ของ Linux ที่คุณสามารถใช้กับ codebase ใดก็ได้เพื่อระบุฟังก์ชันที่ใช้ทั่วไป: https://www.antropy.co.uk/blog/efficient-learning-for-new-opencart-developers/


1

เพลย์ลิสต์วิดีโอ YouTube นี้ยังมีประโยชน์ในการเป็น Gurus นักพัฒนา OpenCart:

บทแนะนำวิดีโอ OpenCart

  1. บทนำและสารบัญวิดีโอนี้กล่าวถึงบทนำของซีรีส์
  2. การติดตั้ง OpenCart localhostวิดีโอนี้ผ่านการติดตั้ง OpenCart ใน localhost
  3. ไฟล์และโครงสร้างโฟลเดอร์ของ Opencartอธิบายถึงไฟล์และโครงสร้างโฟลเดอร์ของ OpenCart
  4. การสร้างสคีมาตารางฐานข้อมูลใน OpenCartจะแสดงสกีมาตารางฐานข้อมูลและแสดงวิธีการสร้างตารางฐานข้อมูลใน OpenCart
  5. วิธีการของอ็อบเจ็กต์ที่กำหนดไว้ล่วงหน้าของ OpenCart Library อธิบายวิธีการของ OpenCart Library Predefined Objects และแสดงตำแหน่งที่จะค้นหา
  6. รูปแบบ MVCL การไหลของรหัสและการร้องขอและการตอบสนองใน OpenCartมันแสดงรูปแบบ MVCL การไหลของรหัสและการร้องขอและการตอบสนองใน OpenCart อธิบายการไหลดังภาพด้านล่าง: MVCL อธิบายด้วย Code

  7. ติดตั้งกำหนดค่าและถอนการติดตั้งโมดูล Opencartแสดงสามวิธีในการอัปโหลดโมดูลจากนั้นติดตั้งกำหนดค่าและถอนการติดตั้งโมดูล / ส่วนขยาย OpenCart 3

  8. เลย์เอาต์และตำแหน่งใน Opencart 3อธิบายเค้าโครงและตำแหน่งของ OpenCart 3 แสดงวิธีการแสดงเค้าโครงแบบกำหนดเองสำหรับหน้าต่างๆโดยยกตัวอย่างหน้าหมวดหมู่ เราแสดงเค้าโครงที่แตกต่างกันสำหรับหมวดหมู่อื่น

  9. ภาพรวมเหตุการณ์ของ Opencartคุณจะได้เรียนรู้ว่าเหตุการณ์ใดบ้างใน OpenCart วิธีการทำงานและสิ่งที่ทำให้เป็นประโยชน์

  10. เอกสาร Opencart API สำหรับนักพัฒนาวิดีโอนี้จะแสดงวิธีการใช้และสร้าง opencart API ที่กำหนดเอง

เมื่อคุณเห็นวิดีโอเหล่านี้แล้วคุณสามารถเริ่มเขียนโค้ดได้ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.