Vì vậy, như đã đề cập, blog atwix thực sự rất tốt cho việc này nhưng tôi sẽ mở rộng trên đó để bao gồm các phần mô-đun chính.
Tạo mô-đun
Vì vậy, trước tiên để tạo ra mô-đun, chúng ta sẽ cần một tệp xml mô-đun để tạo tệp theo app/etc/modules/StackExchange_Example.xml
. Nó sẽ trông như sau.
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Example>
<active>true</active>
<codePool>local</codePool>
<depends/>
</StackExchange_Example>
</modules>
</config>
Tất cả điều này về cơ bản là cho Magento biết rằng phần mở rộng nên được tìm thấy trong nhóm mã cục bộ. Bây giờ chúng ta cần tạo cấu hình mô-đun thực tế và cái này phải nằm trong thư mục app/code/local/StackExchange/Example/etc/config.xml
. Bây giờ tệp này làm gì cho Magento biết phần mở rộng này thực sự sẽ làm gì và những mục nào nó có như Mô hình, Khối và bộ điều khiển.
Trong trường hợp của chúng tôi, hiện tại chúng tôi chỉ cần một định nghĩa mô hình cho người quan sát, để lắng nghe một sự kiện adminhtml_cms_page_edit_tab_content_prepare_form
để chúng tôi có thể thêm một trường mới vào tab cms và có một tài nguyên để chúng tôi có thể thêm một cột vào cơ sở dữ liệu.
Vì vậy, tệp config.xml sẽ xuất hiện như sau.
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Example>
<version>0.1.0</version>
</StackExchange_Example>
</modules>
<global>
<models>
<stackexchange_example>
<class>StackExchange_Example_Model</class>
</stackexchange_example>
</models>
<events>
<adminhtml_cms_page_edit_tab_content_prepare_form>
<observers>
<stackexchange_example_page_edit_tab_content>
<type>singleton</type>
<class>stackexchange_example/observer</class>
<method>addNewCmsField</method>
</stackexchange_example_page_edit_tab_content>
</observers>
</adminhtml_cms_page_edit_tab_content_prepare_form>
</events>
<resources>
<stackexchange_example_setup>
<setup>
<module>StackExchange_Example</module>
</setup>
</stackexchange_example_setup>
</resources>
</global>
</config>
Thêm trường vào bảng
Bây giờ những gì chúng ta sẽ cần làm là thêm trường vào bảng cơ sở dữ liệu để nó có thể được lưu cùng lúc với phần còn lại của nội dung trang cms. Để làm điều này, bạn sẽ cần phải tạo một tập tin php app/code/community/StackExchange/Example/sql/stackexchange_example_setup/install-0.1.0.php
. Những gì tập tin này sẽ làm chỉ đơn giản là tải bảng và thêm một cột mới vào nó.
<?php
$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
$installer->startSetup();
$conn = $installer->getConnection();
$table = $installer->getTable('cms_page');
$conn->addColumn(
$table,
'your_column',
Varien_Db_Ddl_Table::TYPE_TEXT,
'255',
array(
'nullable' => false
),
'Your Column Desc'
);
$installer->endSetup();
Bây giờ rõ ràng ở đây bạn có thể thêm cột của bạn với bất kỳ yêu cầu bạn cần.
Thêm cột vào phần quản trị
Bây giờ chúng tôi đã có sẵn sự kiện để lắng nghe để thêm cột, vì vậy những gì chúng tôi làm bây giờ là tạo ra trình quan sát và chức năng. Vì vậy, chúng ta có thể tạo tập tin app/code/community/StackExchange/Example/Model/Observer.php
và tập tin sẽ trông như sau.
<?php
class StackExchange_Example_Model_Observer
{
public function addNewCmsField($observer)
{
//get CMS model with data
$model = Mage::registry('cms_page');
//get form instance
$form = $observer->getForm();
//create new custom fieldset 'stackexchange_content_fieldset'
$fieldset = $form->addFieldset('stackexchange_content_fieldset', array('legend'=>Mage::helper('cms')->__('Custom'),'class'=>'fieldset-wide'));
//add new field
$fieldset->addField('your_column', 'text', array(
'name' => 'your_column',
'label' => Mage::helper('cms')->__('Your Column'),
'title' => Mage::helper('cms')->__('Your Column'),
'disabled' => false,
//set field value
'value' => $model->getYourColumn()
));
}
}
Bây giờ điều này là đủ để khi bạn lưu trang cms, mục này cũng được lưu vào cơ sở dữ liệu, vì vậy bạn đã đi được một nửa. Bây giờ chúng ta chỉ cần làm cho nó hiển thị trên frontend.
Màn hình hiển thị
Bây giờ cách thứ hai được mô tả bởi atwix thực sự rất hay. Về cơ bản, bạn cần thêm một đoạn mã layout layout của khách hàng vào trang cms thông qua quản trị viên và sau đó chỉ cần có một tệp mẫu.
Vì vậy, dưới trang cms trong quản trị viên bạn sẽ tìm thấy CMS -> Pages -> Your page -> Design
, những gì bạn có thể làm ở đây là thêm bố cục cụ thể xml chỉ xảy ra cho trang cms này.
<reference name="content">
<block type="core/template" name="home" template="stackexchange/example/cmsattribute.phtml"/>
</reference>
Bố cục này sẽ thêm một khối mới với mẫu stackexchange/example/cmsattribute.phtml
sau nội dung chính của trang của bạn.
Bây giờ chỉ cần tạo mẫu app/design/frontend/base/default/template/stackexchange/example/cmsattribute.phtml
và trong mẫu này, bạn chỉ cần tải trang cms hiện tại và lấy dữ liệu thuộc tính.
<?php echo Mage::getBlockSingleton('cms/page')->getPage()->getContentCustom(); ?>
Bây giờ như tôi đã nói blog atwix rất tốt, vì vậy tất cả những gì tôi đã làm ở đây là kết hợp hai bài viết và thêm phần về cập nhật cơ sở dữ liệu.