先に述べたように、atwixブログは実際にはこれに関して非常に優れていますが、メインモジュールのパーツも含めるように拡張します。
モジュールを作成
したがって、最初にモジュールを作成するには、モジュールxmlファイルが必要になるため、の下にファイルを作成しますapp/etc/modules/StackExchange_Example.xml
。次のようになります。
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Example>
<active>true</active>
<codePool>local</codePool>
<depends/>
</StackExchange_Example>
</modules>
</config>
これは基本的に、拡張機能がローカルコードプールにあることをMagentoに知らせることです。次に、実際のモジュール構成を作成する必要があり、これはフォルダーの下にあるはずapp/code/local/StackExchange/Example/etc/config.xml
です。このファイルが何をするかによって、この拡張機能が実際に何をするか、モデル、ブロック、コントローラーなどのアイテムがMagentoに伝えられます。
今回のケースでは、現在、オブザーバーのモデル定義のみが必要です。1つのイベントをリッスンしadminhtml_cms_page_edit_tab_content_prepare_form
て、cmsタブに新しいフィールドを追加し、データベースに列を追加できるようにリソースを設定します。
したがって、config.xmlファイルは次のようになります。
<?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>
テーブルにフィールドを追加
次に、フィールドをデータベーステーブルに追加して、cmsページの他のコンテンツと同時に保存できるようにします。これを行うには、下にphpファイルを作成する必要がありますapp/code/community/StackExchange/Example/sql/stackexchange_example_setup/install-0.1.0.php
。このファイルが行うことは、テーブルをロードして新しい列を追加するだけです。
<?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();
これで明らかに、ここに必要な要件を追加して列を追加できます。
管理セクションに列を追加
これで、列を追加するためにリッスンするイベントが既に用意されているので、ここでオブザーバーと関数を作成します。したがって、ファイルapp/code/community/StackExchange/Example/Model/Observer.php
を作成すると、ファイルは次のようになります。
<?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()
));
}
}
これで十分です。cmsページを保存すると、アイテムもデータベースに保存されるので、途中です。これで、フロントエンドに表示する必要があります。
フロントエンド表示
現在、atwixで記述されている2番目の方法は実際には非常に優れています。基本的に、管理者を介して顧客のlayout.xmlスニペットをcmsページに追加し、テンプレートファイルを用意するだけです。
したがって、管理者のcmsページの下に、CMS -> Pages -> Your page -> Design
ここでできることは、このcmsページでのみ発生する特定のレイアウトxmlを追加することです。
<reference name="content">
<block type="core/template" name="home" template="stackexchange/example/cmsattribute.phtml"/>
</reference>
このレイアウトではstackexchange/example/cmsattribute.phtml
、ページのメインコンテンツの後にテンプレートを含む新しいブロックを追加します。
テンプレートapp/design/frontend/base/default/template/stackexchange/example/cmsattribute.phtml
を作成し、このテンプレートで現在のcmsページをロードして属性データを取得するだけです。
<?php echo Mage::getBlockSingleton('cms/page')->getPage()->getContentCustom(); ?>
atwixブログは非常に優れているので、2つの投稿を組み合わせてデータベースの更新に関する部分を追加するだけです。