Magento用のモジュールの作成-パート1

Magentoの人気は常に高まっています。 この素晴らしいエンジンで書かれた多くの新しいオンラインストアがあります。

残念ながら、開発者向けの情報は十分ではないため、状況を修正します:)

私の計画には、ブログモジュールの例を使用して、 Magentoのモジュールを作成する方法に関するいくつかの記事を書くことが含まれています。

この記事のオリジナルは私のブログにあります。





最初は、最小限の機能に制限します。モジュールの管理部分を作成し、その助けを借りて、管理パネルでブログ記事を管理できるようにします。



モジュールは別の名前空間に作成されます。 通常、名前空間はモジュールを開発している会社の名前です。

この記事では、Snowcore名前空間にMagentoのブログモジュールを作成します。

モジュール名にアンダースコアを含めることはできません。 すべてのカスタムモジュールは、ディレクトリ/ app / code / localに作成されます

私のモジュールはSnowcore_Blogと呼ばれます



ビジネスに取り掛かろう。 Magento用のモジュール作成するには何が必要ですか?



Magentoキャッシュを無効にする



まず、Magentoでキャッシュをオフにします。そうしないと、変更を確認できません。)管理パネルでキャッシュを無効にできます。システム-キャッシュ管理-最初の[ キャッシュ制御 ]タブで、



ディレクトリ構造を作成する



モジュールフォルダーで、次の構造を作成します。

/アプリ/コード/ローカル/ Snowcore /ブログ/



    ブロックする
    コントローラー
    など
    ヘルパー
    モデル
     sql




テンプレート用のディレクトリを追加します。

/アプリ/デザイン/フロントエンド/デフォルト/デフォルト/テンプレート/ブログ

(ここで最初のデフォルトはインターフェースであり、2番目のデフォルトはテーマです)



モジュール接続



モジュールを接続するには、XML構成ファイルを作成する必要があります。

/app/etc/modules/Snowcore_Blog.xml



<? xml version ="1.0" ? >

< config >

< modules >

< Snowcore_Blog >

< active > true </ active >

< codePool > local </ codePool >

</ Snowcore_Blog >

</ modules >

</ config >











この時点で、Magentoはすでにモジュールについて認識しています。 設定ファイルの<active>パラメータを変更することで、有効または無効にできます。

また、管理パネルからモジュールを制御することもできます: システム->構成->詳細

<codePool>ノードのローカル値は、モジュールがカスタムモジュールに属し、/ app / code / localフォルダーにあることを示します



モジュールのXML構成の作成



新しいxmlファイルを作成します:/app/code/local/Snowcore/Blog/etc/config.xml



< config >

< modules >

< Snowcore_Blog >

< version > 0.1.0 </ version >

</ Snowcore_Blog >

</ modules >

< frontend >

< routers >

< blog >

< use > standard </ use >

< args >

< module > Snowcore_Blog </ module >

< frontName > blog </ frontName >

</ args >

</ blog >

</ routers >

</ frontend >

< admin >

< routers >

< blog >

< use > admin </ use >

< args >

< module > Snowcore_Blog </ module >

< frontName > blog </ frontName >

</ args >

</ blog >

</ routers >

</ admin >

< adminhtml >

< menu >

< blog module =“ blog>

< title > Blog </ title >

< sort_order > 77 </ sort_order >

< children >

< article module =“ blog>

< title > Manage Articles </ title >

< sort_order > 0 </ sort_order >

< action > blog/adminhtml_article </ action >

</ article >

</ children >

</ blog >

</ menu >

< acl >

< resources >

< all >

< title > Allow Everything </ title >

</ all >

< admin >

< children >

< blog >

< title > Blog Module </ title >

< sort_order > 200 </ sort_order >

</ blog >

</ children >

</ admin >

</ resources >

</ acl >

< layout >

< updates >

< blog >

< file > blog.xml </ file >

</ blog >

</ updates >

</ layout >

</ adminhtml >

< global >

< models >

< blog >

< class > Snowcore_Blog_Model </ class >

< resourceModel > blog_mysql4 </ resourceModel >

</ blog >

< blog_mysql4 >

< class > Snowcore_Blog_Model_Mysql4 </ class >

< entities >

< article >

< table > blog_articles </ table >

</ article >

</ entities >

</ blog_mysql4 >

</ models >

< resources >

< blog_setup >

< setup >

< module > Snowcore_Blog </ module >

</ setup >

< connection >

< use > core_setup </ use >

</ connection >

</ blog_setup >

< blog_write >

< connection >

< use > core_write </ use >

</ connection >

</ blog_write >

< blog_read >

< connection >

< use > core_read </ use >

</ connection >

</ blog_read >

</ resources >

< blocks >

< blog >

< class > Snowcore_Blog_Block </ class >

</ blog >

</ blocks >

< helpers >

< blog >

< class > Snowcore_Blog_Helper </ class >

</ blog >

</ helpers >

</ global >

</ config >











このファイルは、モジュールの基本設定を定義します。

<adminhtml>セクションは、メニューのセットアップと、アプリケーションの管理部分のさまざまなリソースへのアクセスを担当します。

<global>部分には、使用されるモデルとリソース、ヘルパー、ブロックに関する情報が格納されます。



ヘルパー作成



ヘルパーには、数行のコード/app/code/local/Snowcore/Blog/Helper/Data.phpのみが含まれます。



<?php

class Snowcore_Blog_Helper_Data extends Mage_Core_Helper_Abstract

{



}











このヘルパーは、翻訳システムが機能するために必要です。

この段階で、メインの管理メニューに新しいアイテムが追加されます。

Magento admin menu





すぐに記事のヘルパーを作成します:

/app/code/local/Snowcore/Blog/Helper/Article.php



<?php

class Snowcore_Blog_Helper_Article extends Mage_Core_Helper_Abstract

{



}











モデル作成



Magentoは薄型モデルを使用しています 。 モデルには2つのタイプがあります。



まず、 記事のモデルが必要です。



通常のモデルを作成します。

/app/code/local/Snowcore/Blog/Model/Article.php



<?php

class Snowcore_Blog_Model_Article extends Mage_Core_Model_Abstract

{

public function _construct()

{

parent::_construct();

$ this ->_init('blog/article');

}

}










その中で、このモデルが機能するリソースモデルを示します。



リソースモデルを作成します。

/app/code/local/Snowcore/Blog/Model/Mysql4/Article.php



<?php

class Snowcore_Blog_Model_Mysql4_Article extends Mage_Core_Model_Mysql4_Abstract

{

public function _construct()

{

$ this ->_init( 'blog/article' , 'article_id' );

}

}











_initメソッドの2番目のパラメーターは、articlesテーブルの主キーです。



記事のコレクションを作成します。

/app/code/local/Snowcore/Blog/Model/Mysql4/Article/Collection.php

グリッドは、エンティティ(記事)のリストを表示するコレクションで機能します。



<?php

class Snowcore_Blog_Model_Mysql4_Article_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract

{

public function _construct()

{

parent::_construct();

$ this ->_init( 'blog/article' );

}

}











モジュールのSQLインストーラー



モジュールのインストール(データベース内のテーブルの作成)は自動です。

ここでの主なことは、モジュールのバージョンを正しく指定することです。これは、XML構成で割り当てられているバージョンと一致する必要があります。

/app/code/local/Snowcore/Blog/sql/blog_setup/mysql4-install-0.1.0.php



<?php

$installer = $ this ;



$installer->startSetup();



$installer->run( "



– DROP TABLE IF EXISTS {$this->getTable('blog_articles')};

CREATE TABLE {$this->getTable('blog_articles')} (

`article_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(150) NOT NULL,

`slug` varchar(150) NOT NULL,

`content` text,

`meta_keywords` varchar(255) NOT NULL DEFAULT '',

`meta_description` varchar(160) NOT NULL DEFAULT '',

`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

PRIMARY KEY (`article_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

"
);



$installer->endSetup();











モジュールのインストール(必要なテーブルの作成)は自動です-任意のページにアクセスすると。 モジュールのインストールに問題がある場合(テーブルが作成されていない場合)、 core_resourceテーブルのデータベースを調べてください。値code = blog_setupのエントリがあります。 エントリを削除すると、モジュールが再インストールされます。



レイアウトモジュールの作成



新しいXMLを作成します。

/app/design/adminhtml/default/default/layout/blog.xml



<? xml version ="1.0" ? >

< layout version ="0.1.0" >

< blog_adminhtml_article_index >

< reference name ="content" >

< block type ="blog/adminhtml_article" name ="article" />

</ reference >

</ blog_adminhtml_article_index >

</ layout >











ブロックを作成する



ブロックはモジュールの表示を担当します。 最初の記事では、管理パネル用のブロックを作成します。

最初に、既存のレコードのリストを表示するブロック-グリッドが必要です。



グリッドのコンテナを作成します。

/app/code/local/Snowcore/Blog/Block/Adminhtml/Article.php



<?php

class Snowcore_Blog_Block_Adminhtml_Article extends Mage_Adminhtml_Block_Widget_Grid_Container

{

public function __construct()

{

$ this ->_controller = 'adminhtml_article' ;

$ this ->_blockGroup = 'blog' ;

$ this ->_headerText = Mage::helper( 'blog/article' )->__( 'Articles Manager' );

$ this ->_addButtonLabel = Mage::helper( 'blog/article' )->__( 'Add Article' );

parent::__construct();

}

}











次に、 グリッド自体を作成します。

/app/code/local/Snowcore/Blog/Block/Adminhtml/Article/Grid.php



<?php

class Snowcore_Blog_Block_Adminhtml_Article_Grid extends Mage_Adminhtml_Block_Widget_Grid

{

public function __construct()

{

parent::__construct();

$ this ->setId( 'blogArticleGrid' );

$ this ->setDefaultSort( 'article_id' );

$ this ->setDefaultDir( 'ASC' );

$ this ->setSaveParametersInSession( true );

}



protected function _prepareCollection()

{

$collection = Mage::getModel( 'blog/article' )->getCollection();

$ this ->setCollection($collection);

return parent::_prepareCollection();

}



protected function _prepareColumns()

{

$ this ->addColumn( 'article_id' , array(

'header' => Mage::helper( 'blog/article' )->__( 'ID' ),

'align' => 'right' ,

'width' => '50px' ,

'index' => 'article_id' ,

));



$ this ->addColumn( 'title' , array(

'header' => Mage::helper( 'blog/article' )->__( 'Title' ),

'align' => 'left' ,

'index' => 'title' ,

));



return parent::_prepareColumns();

}



public function getRowUrl($row)

{

return $ this ->getUrl( '*/*/edit' , array( 'id' => $row->getId()));

}

}











簡単にグリッドについて:





コントローラーの作成





この記事のフレームワークでは、コントローラーにはインデックスアクションのみがあります(記事を含むテーブルを表示する)

/app/code/local/Snowcore/Blog/controllers/Adminhtml/ArticleController.php



<?php

class Snowcore_Blog_Adminhtml_ArticleController extends Mage_Adminhtml_Controller_action

{

protected function _initAction()

{

$ this ->loadLayout()

->_setActiveMenu( 'blog/article' )

->_addBreadcrumb(Mage::helper( 'adminhtml' )->__( 'Articles Manager' ), Mage::helper( 'adminhtml' )->__( 'Articles Manager' ));

return $ this ;

}



public function indexAction()

{

$ this ->_initAction()

->renderLayout();

}

}











まとめ



これまでのコントローラーには、レイアウトとブレッドクラムが初期化されるインデックスアクションが含まれています。 この時点で、 記事管理ページに記事テーブルの内容が表示されます。 テーブルはまだ空ですが、グリッドの機能を確認するために、データベースにいくつかのレコードを手動で追加できます。

Mage_Adminhtml_Block_Widget_Gridは、フィルターを使用して、指定されたフィールドでリストをソートする機能を提供します。



その結果、データをフィルタリングおよびソートする機能を備えたワークシートを得ました。 次の記事では、 テーブルエントリを管理できるようにします



お楽しみに



じゃあまたね;-)



All Articles