Tạo standalone script để chạy Magento 1

Magento 1 có thể được tích hợp dễ dàng vào các đoạn script PHP thuần, hoặc được nhúng vào các hệ thống CMS khác (WordPress, …) hay PHP Framework.

Dưới đây là 1 đoạn code đơn giản để sử dụng Magento 1 trên file PHP script:

 

Tạo custom settings (cấu hình) trong backend của Magento 1

Đầu tiên bạn cần tạo file etc/config.xml để cấu hình cho extension mới của bạn, ở đây tôi lấy ví dụ là Laptrinhinfo_CustomConfig

Tiếp theo bạn định nghĩa các custom settings trong extension, ở đây các cấu hình cần lưu sẽ được hiển thị trong admin dưới dạng các input được nhập dữ liệu vào như textfield, textarea, select box, ….. Để làm điều này, bạn cần định nghĩa chúng dưới dạng XML trong file etc/system.xml

Để phần quản lý các custom settings này có thể được phân quyền cho các role của user, bạn cần tạo file etc/adminhtml.xml và tạo cấu trúc XML như bên dưới

Sau cùng để trả về kết quả cho kiểu dữ liệu dropdown và multiple_dropdown mà chúng ta đã định nghĩa ở phần sourcemodel, chúng ta cần tạo file Model/System/Config/Source/Dropdown/Values.php

 

Tạo shipping method (phương thức thanh toán) mới cho Magento 2

Mặc định, Magento 2 có sẵn một số shipping method như Free Shipping, Table Rates, Flat Rate. Nếu bạn muốn tạo 1 shipping method mới thì trong bài viết này tôi sẽ hướng dẫn các bạn cách để thực hiện.

– Đầu tiên bạn cần tạo 1 extension mới, ở đây tôi lấy ví dụ là Laptrinhinfo_Customshipping. Tiếp theo bạn tạo file cấu hình cho extension của bạn

app/code/Laptrinhinfo/Customshipping/etc/config.xml

– Tiếp tục bạn cần tạo file model được định nghĩa trong config.xml. File model này sẽ tính toán cho phí shipping cho website.

app/code/Laptrinhinfo/Customshipping/Model/Carrier.php

– Sau cùng để tạo những custom settings (cấu hình) cho shipping method mới của bạn (như Ship to Applicable Countries, Ship to Specific Countries … ), bạn cần phải tạo file system.xml để làm điều đó

app/code/Laptrinhinfo/Customshipping/etc/adminhtml/system.xml

 

Cài đặt Pestle – công cụ hỗ trợ phát triển module cho Magento 2

Pestle là 1 ứng dụng dòng lệnh (command line) của tác giả Alan Storm giúp các lập trình viên có thể generate code (tự động sinh ra các đoạn code) cho Magento 2.

Cài đặt Pestle

Trang Github của Pestle bạn có thể tham khảo tại link https://github.com/astorm/pestle, đầu tiên bạn cần clone Pestle về

Sau khi đã pull source code của Pestle về bạn di chuyển vào thư mục của Pestle và tiến hành cập nhật composer

Tiếp theo bạn tải file pestle.phar bằng lệnh sau

Để hiển thị danh sách các lệnh command line của Pestle bạn sử dụng

Để hiểu rõ chi tiết hơn về 1 lệnh nào đó, ví dụ generate_module, bạn có thể dùng lệnh sau

Sử dụng Pestle trong dự án Magento 2

Bạn có thể thêm đoạn sau vào file composer.json của thư mục chứa Magento 2 sau đó tiến hành update lại composer

 

Tạo controller trong Magento 2

Controller là 1 thành phần quan trọng khi phát triển module trên Magento 2, hoặc trên 1 PHP MVC Framework. Nó là nơi nhận các requests, xử lý và hiển thị kết quả lên website.

Trong Magento 2, 1 module có thể có nhiều controller trong thư mục Controller, các controller chứa các action trong class và method execute(). Magento 2 có 2 loại controller, đó là frontend controller (xử lý bên ngoài frontend) và backend controller (xử lý bên trong backend). Về cách thức hoạt động thì 2 controller này hoàn toàn giống nhau, chỉ khác nhau 1 chút đó là backend controller có kiểm tra phân quyền khi xử lý request.

Controller trong Magento 2 hoạt động ra sao?

Nhiệm vụ của controller là nhận request từ end-user (người dùng web hoặc từ command line của Magento). Dưới đây là đường dẫn URL thường thấy của 1 Magento 2 controller

Trong đó:

route_name là tên của route (và tên này là duy nhất không trùng lặp) được đặt trong routes.xml
controller là tên thư mục con nằm trong thư mục Controller
action là tên class với method execute để xử lý request.

Tạo controller trong Magento 2 như thế nào?

Để tạo controller, chúng ta cần tạo thư mục con trong thư mục Controller của module, sau đó tạo thêm 1 file action class trong thư mục con đó. Trong bài viết này, chúng ta sẽ tạo controller Test với action class là Hello cho module Laptrinhinfo_HelloWorld.

Bước 1: Tạo routes.xml

etc/frontend/routes.xml

Bước 2: Tạo file controller

Controller/Index/Index.php

Như bạn đã thấy, các file controller đều kế thừa class \Magento\Framework\App\Action\Action và sẽ gọi phương thức execute. Và chúng ta sẽ viết logic code trong đó trước khi trả lại kết quả.

Bước 3: Tạo file layout

view/frontend/layout/helloworld_index_index.xml

Bước 4: Tạo file template

view/frontend/templates/index/index.phtml

Bước 5: Flush cache 

Bước 6: Test lại

Bạn có thể kiểm tra xem controller đã hoạt động đúng chưa bằng cách truy cập vào

hoặc

Các phương thức (method) khác trên Magento 2 controller

Ngoài execute, class \Magento\Framework\App\Action\Action còn cung cấp cho chúng ta 2 phương thức khác cũng quan trọng không kém đó là _forward_redirect

Phương thức _forward

Phương thức sẽ chuyển phần xử lý cho 1 action class khác mà không làm thay đổi đường dẫn request URL. Ví dụ chúng ta có 2 action class là Forward và Hello với nội dung class Forward là

Khi chúng ta truy cập vào http://example.com/route_name/test/forward thì kết quả xử lý từ class Hello sẽ hiển thị trên trình duyệt. Ngoài tên action class, bạn có thể chỉ định tên controller, tên module, và tham số truyền thêm vào trong phương thức _forward. Dưới đây là source code của phương thức _forward trong Magento 2

Phương thức _redirect

Phương thức này sẽ chuyển hướng đường dẫn URL sang 1 action class khác, và đương nhiên kết quả trả về sẽ là của action class được điều hướng đến. Chúng ta có thể kiểm tra bằng cách thay phương thức _forward bằng _redirect

Kết quả là khi bạn truy cập vào http://example.com/route_name/test/forward , trình duyệt sẽ chuyển hướng bạn đến http://example.com/route_name/test/hello và hiển thị kết quả của action class Hello.

Thay đổi giá sản phẩm bằng plugin trong Magento 2

Thêm file di.xml

File di.xml có nội dung như sau

Thay đổi giá sản phẩm

Ta sẽ tạo file app/code/Laptrinhinfo/HelloWorld/Plugin/Product.php, trong class Product, phương thức afterGetPrice sẽ giúp bạn thay đổi giá của sản phẩm. Ở đây tôi sẽ cho phép mỗi sản phẩm có giá ban đầu + 100

Flush cache và test lại

Bước cuối cùng là bạn flush cache của Magento 2 và ra ngoài frontend xem giá sản phẩm đã thay đổi chưa nhé.

Tạo module hello world trong Magento 2

Hello World là 1 trong những đoạn code basic nhất mà bất kỳ ngôn ngữ nào mới học bạn đều gặp phải khi bắt đầu. Với bài viết này cũng không ngoại lệ, chúng ta sẽ tìm hiểu cách tạo 1 module cho Magento 2 với kết quả xuất ra trên browser là “Hello World”.

Module trong Magento là 1 folder chứa các thành phần như blocks, controllers, models, helper, etc …. Trong Magento 2, các module được đặt ở thư mục app/code, và cấu trúc mỗi module sẽ theo format sau app/code/<Vendor>/<ModuleName> (với <Vendor> là tên của công ty hay tổ chức, <ModuleName> là tên của module)

Tạo đường dẫn cho module mới

Trong bài viết này tôi sử dụng Laptrinhinfo là tên vendor và HelloWorld là tên của module. Do đó chúng ta sẽ tạo cấu trúc folder là app/code/Laptrinhinfo/HelloWorld.

Mô tả module bằng cách sử dụng file cấu hình module.xml

Tạo thư mục etc trong thư mục chứa module ở bước 1, thêm vào đó file module.xml (đường dẫn sẽ là app/code/Laptrinhinfo/HelloWorld/etc/module.xml) với nội dung bên dưới

Chúng ta đăng ký tên của module là Laptrinhinfo_HelloWorld và version của module là 1.0.0

Đăng ký module bởi file registration.php

Tất cả module của Magento 2 phải được đăng ký thông qua class ComponentRegistrar, dó đó chúng ta tiến hành tạo file app/code/Laptrinhinfo/HelloWorld/registration.php với nội dung sau

Bật/cho phép module hoạt động

Để xem toàn bộ danh sách module đang hoạt động cũng như đang bị tắt (vô hiệu), bạn có thể gõ lệnh sau tại đường dẫn cài dặt Magento 2

Do module HelloWorld mới khởi tạo và chưa được bật lên do đó sẽ xuất hiện dòng sau

Chúng ta sẽ bật/cho phép module này hoạt động bằng lệnh

Kết quả sau khi enable

Sau cùng bạn cần upgrade lại Magento 2

Bạn có thể kiểm tra xem module đã xuất hiện chưa trong admin tại Stores > Configuration > Advanced > Advanced

Tạo đường dẫn router cho module

Trong Magento 2, đường dẫn URL sẽ dựa theo format sau

Chúng ta sẽ tạo file router app/code/Laptrinhinfo/HelloWorld/etc/frontend/routes.xml để khi truy cập vào /helloworld/* ngoài frontend, module này sẽ được gọi ra

Đường dẫn tương ứng ngoài frontend sẽ là

Tạo controller và acion

Chúng ta sẽ tạo file app/code/Laptrinhinfo/HelloWorld/Controller/Index/Display.php với nội dung như sau

Sau khi bạn truy cập vào http://example.com/helloworld/index/display trên trình duyệt, kết quả hiện ra trên màn hình sẽ là ‘Hello World’

Cấu hình trang liên hệ trong Magento 2

Magento 2 mặc định tạo sẵn trang Liên hệ (Contact Us) để khách hàng của store có thể để lại feedback (phản hồi) hay liên lạc với chủ store 1 cách dễ dàng. Mặc định phần Liên hệ được đặt dưới footer của store như hình bên dưới

contact-us-in-footer

Để thay đổi nội dung của form contact (form liên hệ) bạn cần truy cập vào Admin Dashboard và đến Stores > Configuration > Contacts

stores-configuration-contacts

Bạn sẽ thấy các thông số như hình bên dưới

contact-us-options

Enable Contact Us: Chọn Yes nếu bạn muốn bật trang Liên hệ và No nếu bạn muốn tắt nó
Send Emails To: Điền vào email mà bạn muốn nhận phản hồi từ form liên hệ
Email Sender: Tên người gửi email
Email Template: Chọn mẫu giao diện cho email. Bạn có thể quản lý/tạo mới email template tại Marketing > Email Templates

marketing-email-templates

Sau cùng bấm Save Config để lưu lại toàn bộ thiếp lập đã được chỉnh sửa.

Cấu hình các thông số cơ bản trong Magento 2

Sau khi cài đặt thành công Magento 2, bạn cần thiết lập một số cấu hình cơ bản cho store của bạn.

Điều đầu tiên bạn cần làm là truy cập vào Admin Dashboard và tìm đến mục Stores > Configuration

stores-configuration

Tại đây, bạn chọn General bên menu trái để chỉnh các thông số như ảnh bên dưới

locale-options

Locale Options

Time Zone: Thiếp lập múi giờ cho store
Locale: Ngôn ngữ mặc định cho store
Weight Unit: Đơn vị cho khối lượng (có thể là lbs hay kg …)
First Day of Week: Ngày đầu tiên của tuần (thường là thứ 2) => thiếp lập lịch cho store
Weekend Days: Ngày nghỉ cho store (thường là thứ 7, chủ nhật)

store-information

Store Information

Store Name: Tên store, tên cửa hàng
Store Phone Number: Điện thoại của cửa hàng
Store Hours of Operation: Giờ mở cửa (giờ hoạt động) của cửa hàng
Country: Quốc gia mà cửa hàng hoạt động
Region/State: Vùng/Khu Vực/Bang mà cửa hàng hoạt động
ZIP/Postal Code: Mã bưu điện của cửa hàng
City: Thành phố của cửa hàng
Street Address: Địa chỉ chính xác của cửa hàng
VAT Number: Thuế VAT

Hiển thị trọng lượng của giỏ hàng trong Magento

Đoạn code nhỏ dưới đây giúp bạn lấy trọng lượng của giỏ hàng trong Magento