Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_MatchesMapRegex has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/class-wp.php on line 632

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Translation_Entry has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/entry.php on line 14

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_Reader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 12

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_FileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 120

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_StringReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 175

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_CachedFileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 221

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; POMO_CachedIntFileReader has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/pomo/streams.php on line 236

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; WP_Widget_Factory has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-includes/widgets.php on line 544

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdSense has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 38

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsWidget has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 941

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsSearch has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 1003

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzAdsLU has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/easy-adsense-lite.php on line 1078

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzBaseOption has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 22

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzCheckBox has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 174

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzRadioBox has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 199

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzSelect has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 250

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzMessage has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 294

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzHelpTag has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 313

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzHelpPopUp has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 328

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzTextArea has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 346

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzText has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 366

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzSubmit has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 385

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzColorPicker has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 409

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzOneTab has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 432

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; EzMiniTab has a deprecated constructor in /var/www/phpcoban.com/public_html/wp-content/plugins/easy-adsense-lite/EzOptions.php on line 476
Giáo trình magento part 4 - Magento config

Giáo trình magento part 4 – Magento config

Config là trái tim của hệ thống magento. Nó khai báo toàn bộ model, class, template và sau đó bạn có thể dùng trong Magento.Config là một khái niệm trừu tượng mà hầu hết các PHP developers không làm việc cùng nhưng cho phép sự mềm dẻo chưa từng thấy về ghi đè của hệ thống.
Để bắt đầu , chúng ta tạo 1 module Magento để bạn xem được config . Bạn nên gõ lại thay vì copy và paste code. Bạn sẽ hiểu rõ hơn 1 chút về config trong magento

Setting up a Module Directory Structure

Module của bạn nên đặt ở folder sau
app/code/local/Packagename
Pagkagename nên là duy nhất . Tiêu chuẩn không chính thức là tên công ty. 1 chuối mà không ai trên thế giới có khả năng sử dụng lại
app/code/local/Microsoft

chúng ta sẽ dùng “Magentotutorial” có Packagename

bước 1 :
thêm các folder sau
app/code/local/Magentotutorial/Configviewer/Block
app/code/local/Magentotutorial/Configviewer/controllers
app/code/local/Magentotutorial/Configviewer/etc
app/code/local/Magentotutorial/Configviewer/Helper
app/code/local/Magentotutorial/Configviewer/Model
app/code/local/Magentotutorial/Configviewer/sql

Bạn không cần tất cả các folder này cho module, nhưng tạo sẵn chúng ngay là 1 ý kiến thông minh để sau đó copy sang cái khác cho nhanh :v

bước 2 : thêm file config.xml
app/code/local/Magentotutorial/Configviewer/etc/config.xml
Config.xml cần có đoạn code sau. Đừng lo lắng về việc nó làm cái gì, Cuối cùng chúng ta sẽ biết.

 

 

<config>
<modules>
<Magentotutorial_Configviewer>
<version>0.1.0</version>
</Magentotutorial_Configviewer>
</modules>
</config>


bước 3 : thêm file như dưới
app/etc/modules/Magentotutorial_Configviewer.xml
Tiêu chuẩn đặt tên Packagename_Modulename.xml.
trong file cần đoạn code sau

 

 

<config>
<modules>
<Magentotutorial_Configviewer>
<active>true</active>
<codePool>local</codePool>
</Magentotutorial_Configviewer>
</modules>
</config>

 

 

Bước 4 : Vậy là xong 1 cái khung của module mặc dù nó đếch làm gì hết . Xóa cache(không biết thì google nhé) và kiểm tra

trong Magento Admin, System->Configuration->Advanced
Trong “Disable modules output” nhìn thấy Magentotutorial_Configviewer vậy là ok rồi

Creating a Module Config

Khi chúng ta hoàn thành, module sẽ
1. Kiểm tra sự tồn tại của biến “showConfig”
2. Nếu biến tồn tại, hiển thị Magento config và dừng thực thi
3. Kiểm tra sự tồn tại của biến showConfigFormat sẽ chỉ rõ đầu ra là text hay XML

Bước 1:, add thêm đoạn vào config.xml

 

<config>
<modules>…</modules>
<global>
<events>
<controller_front_init_routers>
<observers>
<Magentotutorial_configviewer_model_observer>
<type>singleton</type>
<class>Magentotutorial_Configviewer_Model_Observer</class>
<method>checkForConfigRequest</method>
</Magentotutorial_configviewer_model_observer>
</observers>
</controller_front_init_routers>
</events>
</global>
</config>

 

Bước 2 :thêm file Magentotutorial/Configviewer/Model/Observer.php

thêm code dưới này vào file

<?php
class Magentotutorial_Configviewer_Model_Observer {
const FLAG_SHOW_CONFIG = ‘showConfig';
const FLAG_SHOW_CONFIG_FORMAT = ‘showConfigFormat';

private $request;

public function checkForConfigRequest($observer) {
$this->request = $observer->getEvent()->getData(‘front’)->getRequest();
if($this->request->{self::FLAG_SHOW_CONFIG} === ‘true’){
$this->setHeader();
$this->outputConfig();
}
}

private function setHeader() {
$format = isset($this->request->{self::FLAG_SHOW_CONFIG_FORMAT}) ?
$this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : ‘xml';
switch($format){
case ‘text':
header(“Content-Type: text/plain”);
break;
default:
header(“Content-Type: text/xml”);
}
}

private function outputConfig() {
die(Mage::app()->getConfig()->getNode()->asXML());
}
}

Xóa cache và load lại URL với biến showConfig=true

http://magento.example.com/?showConfig=true

What am I looking at?
Bạn thấy 1 file XML lớn. Nó khai báo trạng thái của Magento. Nó list tất cả modules, classes, event listener hay bất cứ thứ gì bạn có thể nghĩ đến trong magento. Ví dụ, xem config.xml tạo ở trên. Nếu bạn search XML trong browser với Configviewer_Model_Observer bạn sẽ thấy class được liệt kê. Mỗi module có config.xml được phân tích bở Magento và lưu trong file global config này
Cái này khá quan trọng và thuận lợi trong quá trình debug sau này

Why Do I Care?

Config là chìa khóa để mở cửa đưa các thứ vào Magento . Mỗi module đều phải tạo và thêm config nếu khai báo sai chẳng cái gì chạy được

ví dụ khi bạn chạy $helper_sales = Mage::helper(‘sales’);
đoạn code trên sẽ
1. Tìm kiếm helpers section trong config
2. Bên trong helpers tìm sales section
3. Bên trong sales tìm class section
4. Tìm giá trị sau “/” tìm được ở #3 ( mặc định là data $helper_sales = Mage::helper(‘sales/data’))
5. Khởi tạo class tìm ở thằng 4

Có vẻ là nhiều giai đoạn nhưng lơi ích chính là nó luôn tìm trong config file tên class name , ta có thể ghi đè Magento Function mà không thay đổi thêm 1 dòng code core nào. Đó là đẳng cấp siêu lập trình hiếm khi thấy trong PHP, cho phép bạn mở rộng chỉ 1 phần của hệ thống mà bạn cần

Chốt : Nên lưu lại module này sau này khi bạn hiểu hơn về magento Module này sẽ được sử dụng nhiều và rất tiện cho bạn kiểm tra xem config có đúng không

You may also like...

1 Response

  1. Hoàng says:

    có đôi chỗ phải sửa lại mới chạy được như sau:
    trong file Observer.php
    + if($this->request->{self::FLAG_SHOW_CONFIG} === ‘true’)
    –>
    if($showconfig = Mage::app()->getRequest()->getParam(‘showConfig’) ===’true’) mới lấy được biến showConfig trên URL
    + tắt echo trong các hàm header, outoutconfig cụ thể: echo “setheader”,echo “outputconfig”;
    sẽ gây lỗi XML Parsing Error: not well-formed
    Location: http://localhost/index.php/?showConfig=true
    vì sai cấu trúc file xml.

    chân thành cám ơn vì bài viết. xin góp ý như thế ạ.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">