Tải bản đầy đủ (.pdf) (27 trang)

Báo cáo thực tập kỹ thuật công ty TRUE PLUS đề tài xây dựng modun simple affiliate cho magento

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.84 MB, 27 trang )

ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CNTT & TT



BÁO CÁO THỰC TẬP KỸ THUẬT
CÔNG TY TRUE PLUS

Đề tài: Xây dựng modun Simple Affiliate cho magento



Nguyễn Văn Bình 20101141
Người HD: A Tạ Hoàng Hải


Hà Nội 8/12/2013
2

1 Mục lục
2 Lời cám ơn 3
3 Giới thiệu về công ty 4
4 Quá trình thực tập 5
5 Cơ bản về magento 6
5.1 Magento là gì? 6
5.2 Cấu trúc một module magento 7
6 Các sản phẩm trong quá trình thực tập 9
6.1 Website bán hàng đơn giản 9
6.2 Modun Emailmarketing 10
7 Module Simple Affiliate 12
7.1 Xây dựng backend 13


7.1.1 Manage Accounts 13
7.1.2 Manage Transactions 15
7.2 Xây dựng front end 17
7.2.1 Thông tin acccount 17
7.2.2 Gửi email 18
7.2.3 Trang rút tiền 19
7.3 Xử lý các event 19
7.4 Cấu hình cho module 21
7.5 Demo giao diện và chức năng chính 22
8 BẢNG ĐÁNH GIÁ KẾT QUẢ THỰC TẬP DOANH NGHIỆP 27


3

2 Lời cám ơn

Qua đợt thực tập vừa rồi giúp em có thêm nhiều kiến thức mới bổ ích, trau
dồi thêm kỹ năng làm việc nhóm cũng như được tiếp xúc và làm việc với môi
trường làm việc thực tế, giúp em tích lũy thêm kinh nghiệm làm việc
Em xin chân thành cảm ơn các thầy cô trong viện Công nghệ thông tin &
truyền thông đã tổ chức đợt thực tập bổ ích này
Em cũng xin gửi lời cảm ơn đến lãnh đạo công ty True Plus đã tạo điều
kiện,giúp đỡ,tạo ra môi trường cho chúng em có cơ hội làm việc cũng như học tập
trong điều kiện rất tốt.
Cuối cùng em xin gửi lời cám ơn đến các anh hướng dẫn trực tiếp ở công
ty,đã giúp đỡ,giải đáp thắc mắc, giúp em hoàn thành các công việc được công ty
giao

4


3 Giới thiệu về công ty

True PLus do người Việt trẻ thành lập và điều hành nhưng hoạt động trong môi
trường quốc tế. Các thành viên chủ chốt của công ty đều còn rất trẻ nhưng đầy
nhiệt huyết và khát khao chinh phục cái mới, mở rộng tầm nhìn và cần cù nỗ lực.
Đối tượng khách hàng chiến lược hiện nay hầu hết đều ở nước ngoài…
Những lĩnh vực sản phẩm mà True Plus tâm huyết phát triển, dồn hết đam mê và
hoài bão bao gồm:

- Cung câp giải pháp cho các hệ thống thương mại điện tử.
- Xây dựng hệ thống thương mại điện tử dựa trên Magento.
- Viết các extension cho Magento- một hệ thống mã nguồn mở rất chuyên
nghiệp dành cho E-Commerce.
- Giaytot.vn website bán giầy trực tuyến lớn nhất Việt Nam
- Himita.com web bán hàng handmade

Magento: Magento là một hệ thống thương mại điện tử giàu tính năng được
xây dựng trên nền tảng công nghệ Mã Nguồn Mỡ (OS) nhằm cung cấp cho thương
mại trực tuyến một khả năng linh hoạt chưa từng có cùng với việc kiểm soát giao
diện,nội dung, mở rộng chức năng cực kỳ thân thiện.Tương tác quản trị bằng hình
ảnh trực giác và đa site là sức mạnh nổi bật của magento.Việc Tối ưu hóa công cụ
tìm kiếm và quản trị thư mục uyển chuyển giúp cho magento có thể thích ứng với
bất kỳ nhu cầu,hình thức và mức độ của kinh doanh trực tuyến từ công việc kinh
doanh những mặt hàng đơn lẻ cho tới đa dạng hóa sản phẩm trên một site và nhiều
site.

5


4 Quá trình thực tập



19/6 – 6/6

Xây dựng website bán hàng đơn giản


7/6 – 14/6

Tìm hiểu và xây dựng frontend cho
modun Email marketing



15/6 – 21/6

Tìm hiểm và xây dựng backend trong
magento cho modun Email marketing



22/6 – 28/6

Tìm hiểu và xây dựng phần gửi Email
cho modun Email marketing



29/6 – 7/7


Tìm hiểu và viết các event giảm giá cho
Email marketing



8/7 – 14/7

Tìm hiểu check out và viết check out
cho modun Email Marketing


15/7 – 8/8

Xây dựng modun Simple Affiliate







6

5 Cơ bản về magento
5.1 Magento là gì?
Magento là một mã nguồn mở, được ra đời ngày 31 tháng 3 năm 2008, được sáng
lập bởi Varien. Phát triển dựa trên nền tảng từ Zend Framework.
Magento dùng để phát triển xây dựng hệ thống website bán hàng với nhiều tính năng
ưu việt dựa trên mã nguồn mở (OS). Magento kế thừa các tính năng của những open
source về shopping cart trước nó, như Zen cart- oscommerce, cùng với những tính

năng vượt trội của nền tảng website 2.0. Vì vậy, theo các chuyên gia dự đoán
Magento chính là tương lai của kỷ nguyên Thương Mại Điện Tử.
Một số đặc điểm khiến magento trở thành mã nguồn mở dùng để xây dựng hệ thống
thương mại điện tử tốt nhất:
Về mặt tính năng magento có 1 số chức năng nổi bật mà 1 số mã nguồn mở khác
không có được đó là:
- Wishlists: Bạn có thể tạo ra danh sách sản phẩm yêu thích của mình và chia
sẻ với bạn bè.
- Multi store/mall feature: bạn có thể tạo ra nhiều cửa hàng, kho hàng, địa
điểm bán hàng khác nhau, cùng 1 sản phẩm nhưng có thể bán với giá khác
nhau ở mỗi cửa hàng.
- Email lists: Magento có 1 hệ thống danh sách các email, lọc, sắp xếp, giúp
cho việc marketing dễ dàng với tính năng ưu việt.
- Compare product: Tạo ra danh sách các sản phẩm dùng để so sánh.
- Bundle/Grouped/Digital products & more: Hệ thống có thể tạo ra các gói,
nhóm sản phẩm với thuộc tính cho từng loại.
- Layered/ Filter naviagation: Giúp người dùng có thể lọc, tìm kiếm theo 1 hay
nhiều thuộc tính của sản phẩm.
- Advanced searching: Giúp tìm kiếm nâng cao, tìm kiếm tùy chỉnh.
- Seo performance: Magento đã tích hợp SEO giúp tối ưu hóa với công cụ tìm
kiếm.
- CMS page: giúp người dùng tạo ra những trang laddingpage dễ dàng
- Tích hợp google checkout.
- Bộ nhớ cache ….
- Cấu trúc thư mục rõ ràng: Magento được phát triển dựa trên nền tảng Zend
Framework với mô hình MVC, giúp bạn có thể quản lý phát triển hệ thống
dễ dàng, khi có sự update của các phiên bản mới.
7

5.2 Cấu trúc một module magento

Các module của Magento được xây dựng theo mô hình MVC với đầy
đủ các thành phần: Controller, Model và View. Trong Magento, View bao
gồm Block, layout và các file template.


Controller: là thành phần tiếp nhận các request từ phía người dùng được gửi
đến Server thông qua browser. Controller yêu cầu View (Layout trong
Magento) render ra các đoạn mã HTML (bao gồm cả CSS và Javascript). Sau
đó trả về phía browser để hiển thị cho người dùng.
View: trong Magento, View bao gồm các Layout (định nghĩa bằng các file
XML), Block (các class PHP), và Template (các file .phtml). Layout có nhiệm
vụ render ra các đoạn mã HTML. Layout có thể lấy dữ liệu từ database thông
qua các Model Objects.
Model: trong Magento, Model bao gồm 2 thành phần: Object Model và
Resource Model. Trong đó, Object Model không làm việc trực tiếp với
database. Nó có nhiệm vụ lưu trữ dữ liệu tạm thời sau khi được lấy ra từ
8

database. Ngoài ra, nó cung cấp các operator function như get(), set(), load(),
delete(). Resource Model là thành phần làm việc trực tiếp với database. Sau
khi truy vấn database, dữ liệu sẽ được chuyển vào Object Model để lưu trữ
tạm thời.




 Cấu trúc thư mục
Các module của Magento được lưu trữ trong 3 thư mục:
 app/code/core: đây là thư mục chứa các module core của Magento
 app/code/local : thư mục này chứa các module mất phí do các provider

phát triển.
 app/code/community : thư mục này chứa các module miễn phí được
phát triển bởi cộng đồng Magento.
View
Controller
Model
Layout
Template
9

6 Các sản phẩm trong quá trình thực tập
6.1 Website bán hàng đơn giản
Yêu cầu: Xây dựng website bán hàng đơn giản sử dụng Php & MySQL, có các
chức năng cơ bản như đăng ký,đăng nhập, tìm kiếm sản phẩm, thêm,sửa,xóa sản
phẩm, sắp xếp sản phẩm,liệt kê sản phẩm theo category….
Giao diện chính:



10

6.2 Modun Emailmarketing

Mô tả: Module cho phép các Account tạo và quản lý các group,các email trong
group của chính mình, và từ đó có thể gửi email đến cho bạn bè trong list contact
của mình, tạo event giảm giá cho sản phẩm, tạo invoice trong checkout
Giao diện





11





12

7 Module Simple Affiliate

Mô tả:
Affiliate là module cho phép các chủ store (cửa hàng) tạo ra mạng lưới giới
thiệu khách đến mua hàng thông qua các affiliates (người môi giới). Với mỗi order
(đơn hàng) thành công, affiliate sẽ nhận được 1 lượng commission (tiền “hoa
hồng”). Đồng thời, khách hàng mua đơn hàng đó có thể được nhận 1 lượng
discount (giảm giá). Affiliates thực hiện việc giới thiệu khách hàng thông qua việc
gửi email giới thiệu về store. Các link này có chứa thông tin về affiliate (có thể là
affiliate ID). Vì vậy khi khách hàng mua hàng sau khi đã click vào các link này,
module sẽ kiểm tra được thông tin affilaite và tạo ra các transaction (giao dịch). Từ
đó các affiliates sẽ nhận được commission.
Module Affiliate cung cấp các chức chính năng sau:
 Quản lý affiliate account (thêm, sửa, xóa, upload ảnh)
 Quản lý transaction (liệt kê, tìm kiếm)
 Setting lượng commission/ disccount cho mỗi order mua hàng
 Đăng ký làm affiliate
 Cho phép affiliates kiểm tra danh sách các transaction, thống kê balance (số
tiền trong tài khoản)

Thiết kế Cơ sở dữ liệu :

Bảng simpleaffiliate_account gồm các field sau:
 account_id: Id banner (int(11) unsigned, khóa chính)
 customer_id: id của customer account (int(11) unsigned, khóa phụ trỏ đến
entity_id của bảng customer_entity)
 firstname: (varchar 255)
 lastname: (varchar 255)
 email: (varchar 255)
 balance: tổng số tiền hiện tại (decimal(12,4))
 total_received: tổng số tiền commission nhận được (decimal(12,4))
 joined: thời gian tạo account (datetime)
 status: Disable/ Enable (tinyint(1))
13

Bảng simpleaffiliate_transaction gồm các field sau:
 transaction_id: Id banner (int(11) unsigned, khóa chính)
 order_id: increment id của order (bảng sales_flat_order) (int(11) unsigned)
 affiliate_id: id account trong bảng simpleaffiliate_account (int(11) unsigned)
 order_total: tổng giá trị đơn hàng (decimal(12,4))
 commission: số tiền affiliate nhận được (decimal(12,4))
 store: ID của store mà transaction được tạo ra (smallint(6))
 created: thời gian tạo (datetime)
 status: Complete/ Pending (tinyint(1))
7.1 Xây dựng backend
7.1.1 Manage Accounts
Yêu cầu:
Thêm menu: Simple Affiliate/ Manage Accounts vào backend
Listing Accounts
Các action có thể thực hiện trên trang listing
 Add Affiliate account: Thêm affiliate account
 Search: Tìm kiếm affiliate theo ID, Name, Email, Balance, Total Received,

Status
 Edit Account: Sửa thông tin account
 Mass delete : Xóa thông tin nhiều account cùng lúc
 Change Status: Thay đổi trạng thái nhiều account cùng lúc
 Export dữ liệu account ra Csv/Xml file
Thực hiện:
Tạo block để hiển thị danh sách account
 Magestore\Affiliate \Block/Adminhtml/Account.php
 Magestore\Affiliate \Block/Adminhtml/Account/Grid.php
Tạo form để thêm account và sửa account tại file
- Magestore\Affiliate\Block\Adminhtml\Account\Edit\Tab\form

14

Giao diện account manager liệt kê danh sách account


Giao diện thêm Affiliate Account









15

Giao diện sửa thông tin một Affiliate Account




7.1.2 Manage Transactions
Yêu cầu:
Thêm menu: Simple Affiliate/ Manage Transactions vào backend
Hiển thị danh sách các transaction (order mà các affiliates giới thiệu được), dữ liệu
cần hiển thị
Các action có thể thực hiện trên trang listing
 Search: Tìm kiếm affiliate theo ID, Order Id, Affiliate Email, Order Total,
Commission, Store, Created, Status
 Export dữ liệu transaction ra Csv/Xml file
Thực hiện:
Tạo Model/ Resource Model/ Collection để thao tác với bảng transaction
Tạo block để hiển thị danh sách account
 Block/Adminhtml/Transaction.php
 Block/Adminhtml/Transaction /Grid.php
Tạo form để thêm account và sửa account tại file
- Magestore\Affiliate\Block\Adminhtml\Transaction\Edit\Tab\form
16

Giao diện transaction manager





17

7.2 Xây dựng front end

7.2.1 Thông tin acccount
Tạo trang hiển thị thông tin cá nhân của affiliate tại frontend hiển thị:
 Name: Tên (Firstname + Lastname)
 Balance: Số tiền trong tài khoản
 Total Received: tổng số tiền commission nhận được
 Form edit thông tin: First Name, Last Name, Email. Click nút Save sẽ lưu
thông tin vào database thông qua model Simpleaffiliate/Account và
Customer/Customer. Hiển thị thông báo lỗi/ thành công
Hàm xử lý lưu thông tin account tại AccountController :

public function saveAction() {
$firstname = '' . $this->getRequest()->getPost('firstname');
$lastname = '' . $this->getRequest()->getPost('lastname');
$email = '' . $this->getRequest()->getPost('email');
$id = '' . $this->getRequest()->getParam('id');
if ((isset($firstname) && ($firstname != null)) &&
(isset($email) && ($email != null)) && (isset($lastname) &&
($lastname != null)) && (isset($id) && ($id != null))) {
$affiliate = Mage::getModel('affiliate/account');
$affiliate->load($id)
->setData('firstname', $firstname)
->setData('lastname', $lastname)
->setData('email', $email);
$affiliate->save();
}
$this->_redirect('affiliate/account/index');
}
18

7.2.2 Gửi email

Tạo form gửi email tại front end:
- Cho phép nhập nhiều email, ngăn cách nhau bởi dấu phẩy
- Nội dung email bất kì nhưng khi người nhận sẽ có link tới website để mua
hàng,khi mua hàng bằng đường link này,khách hàng sẽ được giảm giá và người gửi
sẽ được hưởng hoa hồng từ phiên mua hàng

Hàm xử lý gửi email tại IndexController:
public function sendemail(){
$templateId =
Mage::getStoreConfig('emailmarketting/general/template');

$mailSubject = 'HI this is a test mail.';
$name = $this->getNameSender();
$email = $this->getEmailSender();
$sender = array('name' => $name,
'email' => $email);
$message = $this->getData('message');
$datacontact =
Mage::getModel('emailmarketting/emailmarketting')->getCollection()-
>addFilter('group_id', $id_group);
foreach ($datacontact as $row){
$email_contact = $row->getData('email');
$name_contact = $row->getData('name');
$vars = Array(
'message' => $message,
'email_sender' => $email,
'name_contact' => $name_contact,
'url' => Mage::getUrl(),
'cookie' => Mage::getModel('core/cookie')-
>get('frontend')

19

);
$storeId = Mage::app()->getStore()->getId();
$translate = Mage::getSingleton('core/translate');
Mage::getModel('core/email_template')
->setTemplateSubject($mailSubject)
->sendTransactional($templateId, $sender, $email_contact,
$name_contact, $vars, $storeId);
$translate->setTranslateInline(true);
}
}
}
7.2.3 Trang rút tiền
- Sẽ có 1 tab mới dưới tab Affiliate Transactions .
- Nội dung trong form gồm có 1 text để nhập số tiền và nút ấn rút tiền.
- Số tiền sẽ được chủ website gửi trực tiếp theo địa chỉ của affiliate hay qua thẻ
dùng để mua sản phẩm
7.3 Xử lý các event
Để khi các khách hàng vào link gửi từ Affiliate mua hàng thì được giảm giá,chúng
ta sử dụng cơ chế phát event trong magento để giảm giá cho sản phẩm, để thực
hiện điều này trong module em đã sử dụng các event sau:
- catalog_product_collection_load_after()
- catalog_product_get_final_price()
- sales_order_place_after()
- controller_action_postdispatch_customer_account_logout()
Để sử dụng các event này thì cần phải khi báo trong file config.xml. Và viết
phương thức xử lý chúng ở file Magestore\Affiliate\Model\Observer.php
Một vài hàm xử lý event trong module:


20

public function productLoadAfter($observer){
$product_collection = $observer['collection'];
if(isset($_COOKIE['affiliate_id'])&&($_COOKIE['affiliate_id'] ==
Mage::getModel('affiliate/account')->load($_COOKIE['affiliate_id'])-
>getAccountId())){
foreach($product_collection as $item){
$price_pro= $item->getFinalPrice();

if(Mage::getStoreConfig('affiliate/general/discount_type') == 1){
$final_price = $price_pro -
($price_pro*Mage::getStoreConfig('affiliate/general/discount')/100);
}
else {
$final_price = $price_pro -
Mage::getStoreConfig('affiliate/general/discount')/100;
}
$item->setFinalPrice($final_price);
}
}
}

21

public function productGetFinalPrice($observer){
$item = $observer->getEvent()->getProduct();
if(isset($_COOKIE['affiliate_id'])&&($_COOKIE['affiliate_id'] ==
Mage::getModel('affiliate/account')->load($_COOKIE['affiliate_id'])-
>getAccountId())){

$price = $item->getFinalPrice();
if(Mage::getStoreConfig('affiliate/general/discount_type')
== 1){
$final_price = $price -
($price*Mage::getStoreConfig('affiliate/general/discount')/100);
}
else {
$final_price = $price -
Mage::getStoreConfig('affiliate/general/discount')/100;
}
$item->setFinalPrice($final_price);
}
}
7.4 Cấu hình cho module
Phần cấu hình cho module tại Backend (Simple Affiliate/setting)
 Enable: bật/ tắt module, dropdown (Yes/No)
 Commission type: dropdown (Fixed/ Percent)
 Commission value: text
 Discount type: dropdown (Fixed/ Percent)
 Discount value: text
Để viết phần này cần phải sửa file cấu hình module system.xml
Giao diện cấu hình
22


7.5 Demo giao diện và chức năng chính
Trang thông tin Affiliate Account,Affiliate có thể chỉnh sửa thông tin của mình tại
trang này



23

Affiliate gửi email cho khách hàng,hệ thống sẽ tự động gửi kèm link đến trang web

Affiliate có thể share link của website lên facebook
Hộp thoại hiện ra để có thể share lên facebook

24

Khi khách hàng click vào link của Affiliate và mua hàng sẽ thấy được giảm giá





25

Giao diện đặt hàng

Giao diện checkout

×