Menu

Magento 009: Các kiểu dữ liệu hiển thị trong grid admin Magento (part 1)

Trong Tut Magento 008 mình đã hướng dẫn các bạn cách tạo một grid đơn giản trong backend của Magento, tuy nhiên để tạo được một grid bao gồm nhiều kiểu dữ liệu hiển thị khác nhau thì ta phải tìm hiểu thêm một chút nữa.

Bài học hôm nay mình vẫn sẽ dựa trên ví dụ quản lý nhân viên bán hàng Salestaff của Tut Magento 008 nhưng trong grid có thêm một số trường như:

+ totals_sales: tổng số tiền bán được

+ items_qty: số sản phẩm bán được

Để hiển thị grid có bao gồm những trường này thì trước tiên ta sẽ phải thêm vào chúng vào database thông qua file sql upgrade mysql4-upgrade-0.1.0-0.1.1.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$installer = $this;
 
$installer->startSetup();
 
/**
 * create pdfinvoiceplus table
 */
$installer->run("
ALTER TABLE {$this->getTable('salestaff_staff')}
 ADD COLUMN `totals_sales` decimal(11,2) NOT NULL default '1',
 ADD COLUMN `items_qty` int(11) NOT NULL default '0';
");
 
$installer->endSetup();

Để file upgrade này được chạy thì ta cần vào file config.xml tăng version cho extension lên 0.1.1. Cụ thể:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>
<config>
 <modules>
 <!--Version của module-->
 <Basetut_Salestaff>
 <version>0.1.0</version>
 </Basetut_Salestaff>
 </modules>
 
....
 
</config>

Với những thay đổi vừa rồi thì extension Basetut_Salestaff đã được nâng từ version 1.0 lên 1.1 và bây giờ ta sẽ đi vào công việc chính đó là hiển thị grid bao gồm các cột:

+ id

+ name

+ birthday

+ sex

+ items_qty

+ totals_sales

+ status

Sau đây ta sẽ đi vào chi tiết từng kiểu dữ liệu hiển thị trong grid backend Magento.

1. Kiểu varchar, text

varchar

Code trong file Grid.php:

1
2
3
4
5
$this->addColumn('name', array(
 'header' => Mage::helper('salestaff')->__('Name'),
 'align' =>'left',
 'index' => 'name',
 ));

Khi mình không khai báo type cho nó Magento sẽ để mặc định là kiểu text. Với kiểu dữ liệu này admin có thể filter hoặc sort theo nội dung của field đó.

2. Kiểu number

number

Code trong file Grid.php:

1
2
3
4
5
6
7
$this->addColumn('items_qty', array(
 'header' => Mage::helper('salestaff')->__('Items Qty'),
 'align' =>'left',
 'width' => '100px',
 'index' => 'items_qty',
 'type' => 'number'
 ));

Khi truyền tham số type =number cho hàm addColumn Magento sẽ render ra một cột hiển thị kiểu dữ liệu dạng số và admin có thể search giá trị trong khoảng từ “from” đến “to”.

3. Kiểu date

date

Code trong file Grid.php:

1
2
3
4
5
6
$this->addColumn('birthday', array(
 'header' => Mage::helper('salestaff')->__('Birthday'),
 'width' => '150px',
 'index' => 'birthday',
 'type' => 'date'
 ));

Chỉ cần thêm tham số type=date là ta có ngay một column hiển thị ngày theo format của Magento.

4. Kiểu price (money)

price

Code trong file Grid.php

1
2
3
4
5
6
7
8
9
$currencyCode = Mage::app()->getStore()->getBaseCurrency()->getCode();
 $this->addColumn('totals_sales', array(
 'header' => Mage::helper('salestaff')->__('Totals Sales'),
 'align' =>'right',
 'width' => '100px',
 'index' => 'totals_sales',
 'type' => 'price',
 'currency_code' => $currencyCode
 ));

Trong đó $currencyCode: là mã tiền tệ được sử dụng trong admin

5. Kiểu option

option

Code trong file Grid.php:

1
2
3
4
5
6
7
8
9
10
11
$this->addColumn('status', array(
 'header' => Mage::helper('salestaff')->__('Status'),
 'align' => 'left',
 'width' => '80px',
 'index' => 'status',
 'type' => 'options',
 'options' => array(
 1 => 'Enabled',
 2 => 'Disabled',
 ),
 ));

Kiểu option này thì khi add cần phải truyền cả tham số options là một mảng các giá trị có thể nhận của trường đó.

Như vậy mình đã giới thiệu cho các bạn 5 kiểu dữ liệu phổ biến nhất hiển thị trên grid admin của Magento. Tuy nhiên vẫn còn rất nhiều kiểu dữ liệu thực tế khác mà admin muốn hiển thị trên grid admin, ví dụ:

+ Link: một liên kết đến một trang web khác

+ Image: hiển thị hình ảnh của product tương ứng

+ Custom: một kiểu dữ liệu đặc biệt nào đó mà admin muốn hiển thị

Trong những trường hợp này chúng ta sẽ phải sử dụng một kỹ thuật mới gọi là renderer. Các bạn chú ý theo dõi blog để cập nhật những bài viết mới nhất nhé!

Facebook Comments

No comments

Trả lời