Thêm các trường tùy chỉnh trong cms - Magento


7

Tôi mới sử dụng Magento và tôi có một số trang tĩnh mà tôi đang cố gắng tích hợp vào CMS.

Tôi đã tìm kiếm nhiều ngày để tìm cách thêm các trường tùy chỉnh vào CMS theo cách tương tự như cách Wordpress có tính năng này.

Tôi tìm thấy một vài liên kết:

http://www.atwix.com/magento/adding-custom-attribution-to-a-cms-page/ <- Quá khó hiểu / không rõ ràng về những gì tôi cần làm trong hướng dẫn này.

http://mrpalvinder.wordpress.com/2014/05/30/how-to-add-custom-fields-in-cms-edit-page-admin-panel/ <- Không hữu ích

Tôi cần tính năng này vì một số nội dung của tôi nằm ở những nơi khác nhau trên trang web và thêm tất cả vào một trình chỉnh sửa nội dung không cho phép tôi chia nội dung như tôi muốn. Sau đó tôi muốn có thể gọi nội dung này trong các tệp mẫu của tôi.

Cho dù tôi có thể thực hiện việc này theo chương trình hoặc sử dụng tiện ích mở rộng, mọi trợ giúp đều được đánh giá cao.

Cảm ơn.


bài viết trong atwix có ý nghĩa nhưng bạn sẽ phải học cơ bản của việc tạo Mô-đun để đạt được nó.
Dexter

Cảm ơn @Dexter tôi thậm chí còn không biết về các mô-đun, có lẽ đó là lý do tại sao tôi phải vật lộn với hướng dẫn atwix. Tôi sẽ xem xét việc tạo ra mô-đun.
fnk

Câu trả lời:


16

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.phpvà 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.phtmlsau 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.phtmlvà 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.


Hà. StackExchange_Example. Đó là một cái tên thực sự tốt cho các ví dụ. Tôi sẽ bắt đầu sử dụng cái này từ bây giờ ở đây (nếu tôi có sự cho phép của bạn). Bằng cách này, những người làm việc trong các dự án sau những người đặt câu hỏi ở đây có thể sẽ nhận ra giá trị của SE :).
Marius

@Marius tất nhiên là bạn có sự cho phép của tôi, tôi đoán điều đó tốt hơn là thấy cuộc sống dễ dàng;)
David Manners

1
Cảm ơn sự cho phép. nhưng tôi phải không đồng ý ... không có gì tốt hơn một cuộc sống dễ dàng :).
Marius

2
Đã thực sự hữu ích, thậm chí tốt hơn atwix. Chỉ là một sự điều chỉnh: Bạn đã đề cập Đường dẫn đến các tệp cài đặt Observer và sql của bạn trong ứng dụng / mã / cộng đồng, trong khi tệp xml cho mô-đun xác định nó trong bộ mã 'cục bộ'. Chỉ cần đề cập đến nó cho người mới, trong trường hợp họ bị nhầm lẫn.
Ajay Bisht

@DavidManners có thể hơi muộn / lỗi thời nhưng tôi không thể lấy nó để lưu giá trị! tôi đã làm điều đó ba lần và mặc dù tôi thấy nó hiển thị trên trang cms, tôi không thể lưu giá trị của nó! tôi đang thiếu gì
hahaha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.