Cài đặt ECG Magento Code Sniffer kiểm tra magento coding standard

Before starting using our coding standard install PHP_CodeSniffer

  • sudo pear install PHP_CodeSniffer

Clone or download Magento PHP_CodeSniffer Coding Standard on your computer or install it with Composer.

Add the standards directory to PHP_CodeSniffer installed paths:

  • sudo phpcs –config-set installed_paths magento-ecg/coding-standard-master/

Run CodeSniffer:

  • phpcs –standard=Ecg –extensions=php,xml,phtml –report-full=<folder>/file.log www/lovingearth/app/code/local/

 

 

 

 

Remove index.php from Magento URLs

1) Let’s Change a Setting, Admin

The first thing you need to do is to login to your Magento admin panel (index.php/admin) in order to change a very simple setting which will let Magento know that you intend to use URL rewriting throughout your store rather than their ugly default URLs.

Login, and change this setting:

Go to System > Configuration > Web > Search Engine Optimization

Use Web Server Rewrites: YES

That was easy, wasn’t it? Okay, now for the final step.

2) Let’s Use a .htaccess File to Rewrite the URLs

The final step involves creating a .htaccess file in the Magento installation folder in order to compliment the settings you changed within your admin settings earlier, and this will actually rewrite the URLs. Choose the applicable .htaccess version below.

If your Magento store is installed in root (public_html), use this:

RewriteEngine On RewriteBase / RewriteRule ^index.php$ – [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

If your Magento store is installed in a subfolder (public_html/shop), use this:

RewriteEngine On RewriteBase /shop/ RewriteRule ^index.php$ – [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /shop/index.php [L]

You’re done – hope that helps!

Magento Admin Module Grid – P1

In this blog post, we will see how to set up admin pages for your module. Specifically in this blog post i will show the basic of how to set up Grid in magento.
Before reading this blog, I assume you are familiar with basics of magento module development and have used Models,Collections. Now, lets start: The name of module I am using is Excellence_Employee, so all classes will be named accordingly. Please change class name as per your module.

Admin Grid

First create an ‘Adminhtml’ folder inside the Block folder of your module. And then create an Employee.php file. Here is a screen shot of entire file structure of our module

structure

 

So, the Employee.php file is our grid container file, the code for this file is as follows

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class Excellence_Employee_Block_Adminhtml_Employee extends Mage_Adminhtml_Block_Widget_Grid_Container
{
  public function __construct()
  {
    $this->_controller = 'adminhtml_employee';
    $this->_blockGroup = 'employee';
    $this->_headerText = Mage::helper('employee')->__('Employee Manager');
    $this->_addButtonLabel = Mage::helper('employee')->__('Add Employee');
    parent::__construct();
  }
}

So, the Employee.php file is our grid container file, the code for this file is as follows.

<?php
class Excellence_Employee_Block_Adminhtml_Employee extends Mage_Adminhtml_Block_Widget_Grid_Container
{
  public function __construct()
  {
    $this->_controller = 'adminhtml_employee';
    $this->_blockGroup = 'employee';
    $this->_headerText = Mage::helper('employee')->__('Employee Manager');
    $this->_addButtonLabel = Mage::helper('employee')->__('Add Employee');
    parent::__construct();
  }
}

Next, we will create our Grid.php file. As mentioned above we will create our php at
Excellence/Employee/Block/Adminhtml/Employee/Grid.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
class Excellence_Employee_Block_Adminhtml_Employee_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
    public function __construct()
    {
        parent::__construct();
        $this->setId('employeeGrid');
        $this->setDefaultSort('id');
        $this->setDefaultDir('ASC');
        $this->setSaveParametersInSession(true);
    }
    protected function _prepareCollection()
    {
        $collection = Mage::getModel('employee/employee')->getCollection();
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
    protected function _prepareColumns()
    {
        $this->addColumn('id', array(
          'header'    => Mage::helper('employee')->__('ID'),
          'align'     =>'right',
          'width'     => '10px',
          'index'     => 'id',
        ));
        $this->addColumn('name', array(
          'header'    => Mage::helper('employee')->__('Name'),
          'align'     =>'left',
          'index'     => 'name',
          'width'     => '50px',
        ));
         
        $this->addColumn('content', array(
            'header'    => Mage::helper('employee')->__('Description'),
            'width'     => '150px',
            'index'     => 'content',
        ));
        return parent::_prepareColumns();
    }
}

Now as you can see our class needs to extend Mage_Adminhtml_Block_Widget_Grid class, this is important.

  • $this->setId(‘employeeGrid’) ==> This set’s the ID of our grid i.e the html id attribute of the <div>. If you’re using multiple grids in a page then id needs to be unique
  • $this->setDefaultSort(‘id’) ==> This tells which sorting column to use in our grid. Which column should be used for default sorting
  • $this->setDefaultDir(‘ASC’) ==> The default sorting order, ascending or descending
  • $this->setSaveParametersInSession(true) ==> this basically sets your grid operations in session. Example, if we were on page2 of grid or we had searched something on grid when refreshing or coming back to the page, the grid operations will still be there. It won’t revert back to its default form.

Next we have _prepareCollection() function. This function is simple, it just returns a collection of the module we want to show in our grid. For advance collection functions read this blog post.
Next we have the _prepareColumns() function. Here we add columns to our grid.

1
2
3
4
5
6
$this->addColumn('id', array(
          'header'    => Mage::helper('employee')->__('ID'),
          'align'     =>'right',
          'width'     => '10px',
          'index'     => 'id',
        ));
  • ‘id’ an unique id for column
  • ‘header’ is the name of the column
  • ‘index’ is the field from our collection. This ‘id’ column needs to be present in our collection’s models.

This is all that is needed for the showing the grid. Now, let create our controller so that we can view the grid in admin.

Admin Controller and Admin Menu

To add our module menu in admin, open the config.xml file of the module and add the following directly in the >config;< tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<adminhtml>
        <menu>
            <employee module="employee">
                <title>Employee</title>
                <sort_order>71</sort_order>              
                <children>
                    <items module="employee">
                        <title>Manage Employees</title>
                        <sort_order>0</sort_order>
                    <action>employee/adminhtml_employee</action>
                    </items>
                </children>
            </employee>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <Excellence_Employee>
                            <title>Employee Module</title>
                            <sort_order>10</sort_order>
                        </Excellence_Employee>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <employee>
                    <file>employee.xml</file>
                </employee>
            </updates>
        </layout>
    </adminhtml>  

I will explain the >acl< tag later, but for now focus on the >menu< tag.
The >action< is the URL of our admin controller. Suppose, if we want to add 2 menu items, we need to use the following

1
2
3
4
5
6
7
8
9
10
11
12
<children>
                    <items module="employee">
                        <title>Manage Employees</title>
                        <sort_order>0</sort_order>
                    <action>employee/adminhtml_employee</action>
                    </items>
                                         <items2 module="employee">
                        <title>Manage Employees</title>
                        <sort_order>0</sort_order>
                    <action>employee/adminhtml_employee2</action>
                    </items2>
                </children>

Now, let create our controller file. Create an ‘Adminhtml’ folder in the controllers folder, as shown in the folder structure above.

Next we will create our EmployeeController.php file

1
2
3
4
5
6
7
class Excellence_Employee_Adminhtml_EmployeeController extends Mage_Adminhtml_Controller_action
{
    public function indexAction() {
        $this->loadLayout();
                $this->renderLayout();
    }

This is same as our standard controller, only we need to extend a different class. Next, create an employee.xml layout file in our adminhtml layouts i.e design/adminhtml/default/default/layout/employee.xml. And in our config.xml we will add the entry of this new layout file, so magento knows to read this layout file as well. We have already done this above in the >adminhtml< tag. Now, the content of employee.xml is

1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<layout version="0.1.0">
    <employee_adminhtml_employee_index>
        <reference name="content">
            <block type="employee/adminhtml_employee" name="employee" />
        </reference>
    </employee_adminhtml_employee_index>
</layout>

We are simply adding our Grid Container blog to the content area. For more details on layout read this blog. So now when we click the menu item from admin, it should show our grid

Cài đặt magento trên localhost

1. Cài đặt web server.

Xem bài cài đặt xampp trên localhost . Các bạn cũng có thể cài đặt web server sử dụng wamp, appserv hoặc open server nhưng Xampp là phần mềm tương đối dễ cài đặt và thông dụng.

2. Config trước khi cài đặt magento.

* Config file php.ini

Sau khi khởi động Xampp click vào button “Config” của Apache

apacheconfig-570x346

Sau khi file php.ini được edit ta cần phải bật những extension sau lên:

extension=php_curl.dll

extension=php_mcrypt.dll

extension=php_pdo_sqlite.dll

extension=php_pdo_mysql.dll

extension=php_soap.dll

Chú ý: chỉ cần bỏ dấu “;” ở đầu dòng chứa những đoạn khai báo trên

Sau khi đã sửa file config chúng ta có thể start apache và mysql:

start-570x367

* Config file hosts

Mở file C:\Windows\System32\drivers\etc\hosts sau đó thêm vào cuối file”

127.0.0.1 localhost.com

3. Cài đặt mageto trên localhost.

* Bước 1: download phiên bản magento phiên bản mới nhất + data sample về từ http://www.magentocommerce.com/download.

download-570x413

Sau khi download giải nén source code magento và copy vào thư mục chạy php (www của appserv hoặc wamp, htdocs của xampp).

* Bước 2: import sample data

Vào phpadmin tạo một database mới (tên là “magento”) sau đó import data sample vừa download về như hình vẽ.

phpmyadmin-570x266

Database với name “magento”:

newdatabase-570x309

Sau khi tạo thành công database tên “magento” thì chúng ta có thể import database sample:

import-570x191

Chú ý: file sample data cũng được download từ link http://www.magentocommerce.com/download.

* Bước 3: cài đặt

Giả sử thư mục chứa magento source ta đặt là “magento”, truy cập vào trình duyệt theo đường link: http://localhost.com/magento

startinstall-570x340

 

Màn hình đầu tiên hiện ra trong quá trình cài đặt:

install1-570x322

 

Click vào checkbox “I agree to the above terms and conditions” sau đó ấn “Continue” để sang trang config locale, timezone và default currency.

install2-570x254

Thay đổi config cho phù hợp với website của mình:

+ Locale: ngôn ngữ

+ Timezone: thời gian

+ Default currency: tiền tệ mặc định

Sau đó click “Continue” để sang trang config database

install3-570x692

Điền thông tin về database:

+ Host: host name (localhost)

+ User name: username của user quản lý database

+ Password: password của user quản lý database

+ Table prefix: prefix của table trong database

Sau khi điền xong thông tin click “Continue” để bắt đầu quá trình cài đặt.

install4-570x465

Trước khi kết thúc quá trình cài đặt là màn hình cho phép người dùng điền vào thông tin của admin:

+ First name

+ Last name

+ User name

+ Password

Điền đầy đủ thông tin và click “Continue” để kết thúc quá trình cài đặt.

install5-570x234

Như vậy ta đã kết thúc quá trình cài đặt magento trên localhost. Các bạn có thể truy cập vào trang admin khi click vào button “Go to Backend” và truy cập vào trang frontend khi click vào button “Go to Frontend”.

4. Một số thao tác cần thiết sau khi cài đặt thành công magento.

* Hiển thị ảnh sản phẩm của data sample

Mặc định khi cài đặt magento có sử dụng data sample ta sẽ chỉ nhìn thấy ảnh của sản phẩm là một cái ảnh trắng default của magento. Để hiển thị ảnh sample ta phải copy thư mục media trong file zip data sample vừa download về vào trong thư mục root cài đặt magento.

media-570x282

* Reindex data

Magento sử dụng rất nhiều bảng với mục đích index dữ liệu từ những bảng khác giúp tăng tốc độ của website. Như vậy mỗi khi dữ liệu trong bảng chính thay đổi ta cần phải reindex lại dữ liệu cho những bảng indexer.

Để có thể truy cập vào phần quản lý indexer của magento trước tiên ta phải đăng nhập vào admin:

admin-570x201

Sau khi điền user name và password của admin hệ thống sẽ redirect sang trang admin dasboard. Click vào menu System->Index Management

index-570x289

Click “Select All” sau đó chọn action là “Reindex data”. Click “Submit” để bắt đầu quá trình reindex dữ liệu.

reindexdata-570x192

* Refresh cache

Magento sử dụng rất nhiều loại cache để tăng tốc độ cũng như giảm số câu query truy vấn cơ sở dữ liệu nên việc refresh những cái cache này là hết sức cần thiết mỗi khi ta thay đổi một phần nào đó trong nó.

Sau khi đăng nhập vào admin, click vào menu System-> Cache Management để tới trang quản lý cache trong magento.

cache-570x322

Click “Select all” sau đó chọn action là “Refresh”. Click “Submit” để bắt đầu quá trình refresh tất cả các loại cache trong magento.

cacheinstall-570x191

Xong (^-^)

Tham khảo blog.magestore.com

Giới thiệu magento

Magento là một mã nguồn mở được xây dựng bằng PHP giúp cho lập trình viên có thể tạo ra các trang web thương mại điện tử. Magento được tung ra vào ngày 31/3/2008 bởi Varien và nó được phát triển trên nền tảng của Zend Framework.

magento-enterprise-re-platforming
* Lịch sử magento
– Magento chính thức bắt đầu phát triển vào đầu năm 2007.
– Vào ngày 31 tháng tám năm 2007, phiên bản beta công khai đầu tiên được phát hành.
– Ngày 30 tháng 5 năm 2010, phiên bản Magento dùng cho điện thoại di động đã được phát hành, phiên bản này được hiểu như là một phần mềm riêng biệt có thể cài đặt trực tiếp lên các thiết bị di động. Người mua hàng có thể sử dụng phần mềm này để mua hàng trực tuyến thay cho việc vào website bằng trình duyệt.
– Trong tháng 2 năm 2011, eBay tuyên bố sở hữu 49% cổ phần của công ty.
– Tháng 6, 2011 eBay sở hữu 100% vốn đầu tư cho Magento. eBay tuyên bố rằng Magento sẽ tham gia X.Commerce sáng kiến ​​mới của eBay.
* Tại sao phải sử dụng magento?
– Magento cung cấp tất cả các tính năng và công cụ để xây dựng, cài đặt một website thương mại điện tử nhanh chóng.
– Các tính năng chính:
+ Quản lý sản phẩm: với nhiều hình ảnh, tùy chọn nhận xét đánh giá sản phẩm, danh mục sản phẩm ưu thích, inventory.
+ Quản lý category: dễ dàng tìm kiếm và chọn lọc sản phẩm theo category
+ Quản lý hàng tồn kho: quản lý sản phẩm còn lại trong kho, nhập, xuất …
+ Tài khoản khách hàng: tình trạng tài khoản, lịch sử giao dịch, danh mục ưu thích, địa chỉ, giỏ hàng…
+ Dịch vụ khách hàng: tăng cường các tính năng, hình thức liên hệ khách hàng; theo dõi toàn diện, dịch vụ email.
+ Quản lý đơn hàng
+ Thanh toán: nhiều phương thức thanh toán như thẻ tín dụng, PayPal, Authorize.net, Google Checkout, hỗ trợ các mô-đun thanh toán bên ngoài như CyberSource, ePay, eWAY và nhiều hơn thế.
+ Công nghệ tìm kiếm: nhanh chóng, thân thiện, hỗ trợ tìm kiếm trên Google SiteMap
+ Hỗ trợ quốc tế: với đa ngôn ngữ và tiền tệ
+ Công cụ khuyến mãi và tiếp thị: phiếu giảm giá, khuyến mãi và nhiều tùy chọn.
+ Phân tích và báo cáo: tích hợp với dịch vụ Google Analytics và cung cấp nhiều báo cáo.

* Nền tảng kỹ thuật của magento
– Magento được code bởi ngôn ngữ PHP và sử dụng cơ sở dữ liệu MySQL.
– Cơ sở dữ liệu dựa trên mô hình EAV (entity – attribute – value).
– Magento được xây dựng theo kiến trúc module (tất cả chức năng đều được module hóa).