web-dev-qa-db-ja.com

MVCアーキテクチャでのWordPressプラグイン開発、どのように?

WordpressのプラグインアーキテクチャはMVCではないと思います。だから私は(cakephp、codeIgniterのような)WordPressプラグイン開発でMVCアーキテクチャを使いたい/やりたいです。どうやってplguinの開発にそれらを使うことができますか。 WordPressはCakePHP、または他のフレームワークをサポートしますか?

6
coderex

あなたは間違いなくプラグインの開発にMVC哲学を使用することができますが、WPに加えてCIやCakeを組み込もうとするのは本当にばかげているでしょう。

たとえば、次のような擬似構造を使ってプラグインを作成することができます(あなたのMVCの解釈によっては、これを作成する方法がたくさんあります。これは頭に浮かぶ簡単な例です)。

class Plugin(){
    function __construct(){ // controller?
        run conditionals/determine query
        process model
        process view
    }
    function model(){ 
        get query from database 
        return variables
    }
    function view(){
        echo html
    }
}

これはプラグイン構造、あるいはMVCの恐ろしい例かもしれませんが、単にMVC architecture !== MVC frameworksとそのMVCがプラグイン設計に使用できることを説明するためのものです。 WP全体のウィジェットクラスやその他の機能は似ていますが、明確に区別することはできません。

6
Dan Gayle

あなたは一度に複数の質問をしました:

Q:WordpressのプラグインアーキテクチャはMVCではないと思います。

A:はい、その通りです。デザインパターンの意味でMVCではありません。 MVCはより一般的な見方では:モデル:Mysql、ビュー:HTML/CSS、コントローラ:PHPです。メインフロントエンドコントローラはindex.php、コマンドはHTTPリクエストです。ルータは.htaccess(かなりパーマリンクを使用している場合)、404コントローラ(それを使用している場合)、または標準設定を使用している場合はindex.phpです。

Q:だから、私はMVPアーキテクチャをWordPressプラグイン開発で使用したいのです(cakephp、codeIgniterのように)。どうやってplguinの開発にそれらを使うことができますか。 WordPressはCakePHP、または他のフレームワークをサポートしますか?

A:いいえ、WordpressはCakePHPやCodeIgniterをそのまま使用することはできません。既存のMVCを再利用できるようにcodeIgniterまたはCake用のアダプタを書くことができます(たとえば、HTTPリクエストをカプセル化し、リクエスト変数/スーパーグローバルからスラッシュを削除するなど)。しかし、Wordpressをオーバーライドして他のPHP Frameworkアプリケーションを実行することもできます。 .htaccessに書き換えルールを追加し、phpファイルを追加することによって。それはただあなたがやりたいことにかかっています。

5
hakre

ワードプレスのプラグインアーキテクチャ自体は、MVCとは関係ありません。しかしあなたがあなた自身のプラグインの中でMVCをやりたいのであれば、そうしないでください。フレームワークを使用する義務はありません。MVCは、多額のフレームワークなしで実装できる概念です。 http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-frameworkを参照してください。 html

2
user310291

私はしばらく前に同じ質問をしましたが、現時点では、残念ながら、WordPressのテーマやプラグインでMVCを実行する唯一の方法は自分の役割を果たすことでした。

だから私はそれをやった、そして私は数ヶ月間私のプラグインとテーマでそれを使ってきた。ここでgithub上のソースを見ることができます: https://github.com/philipwalton/PW_Framework それはPW_Frameworkと呼ばれ、Yiiフレームワーク、PHP用の非常に良いMVCフレームワークに大まかに基づいています。

基本的には、PW_Frameworkは、クライアント側とサーバー側の検証が完了したオプションページを作成するためのすばやく簡単な方法です。これは、(nonceのような)すべてのWordPressセキュリティ問題と同様にajax検証を扱います、それであなたはあなたのプラグインが実際にすることにあなたの開発努力を集中することができます。

属性、属性ラベル、説明、およびオプションを使用してモデルを定義するだけです。

public function data()
{
  return array(
    'name' => array(
      'label' => 'Name',
      'default' => '',
    ),
    'email' => array(
      'label' => 'E-mail',
      'default' => '',
    ),
    'sex' => array(
      'label' => 'Sex',
      'default' => 'male',
      'options' => array( 'm' => 'Male', 'f' => 'Female'),
    ),

  );
}

それから検証規則を定義します。

protected function rules() {
  return array(
    array(
      'properties' => 'name, email, sex',
      'validator'=> array('PW_Validator', 'required'),
    ),
    array(
      'properties' => 'email',
      'validator'=> array('PW_Validator', 'email')
    ),
    array(
      'properties' => 'sex',
      'validator'=> array('PW_Validator', 'match'),
      'pattern' => '/^m|f$/'
    ),
  );
}

そして、ビューはこのようになります。

<?php $form = new PW_Form( $model ); ?>
<?php $form->begin_form(); ?>
  <?php $form->begin_section('Year Options'); ?>
  <ul>
    <li><?php $form->textfield( 'name' ); ?></li>
    <li><?php $form->textfield( 'email' ); ?></li>
    <li><?php $form->radio_button_list( 'sex' ); ?></li>
  </ul>
  <?php $form->end_section(); ?>
<?php $form->end_form(); ?>

それからコントローラで、あなたは単にあなたのコード機能性の全てを書く。

これが実際に使われている実例です: http://wordpress.org/extend/plugins/pw-archives

2
Philip Walton

WordPressはそれ自身のためのかなりフレームワークです、それは通常それ自身の(またはバンドルされた)コードでフレームワークによってカバーされるものの世話をします。技術的には、その一部は BackPress フレームワークですが、実際には非常に内部的なものであり、あまり適切ではありません。

WordPressの拡張機能(プラグインまたはテーマのいずれか)は、提供されたWP AP​​Iを使用してデータを取得および変更します。適切なAPIを使用してWP自体と対話する限り、WPの拡張機能で何を使用しても問題ありません。

だから基本的にあなたはあなたのプラグインにどんなフレームワーク、ライブラリあるいは何でも含めて、使うことができます。 WP AP​​Iを適切に使用している限り、それはパフォーマンスとライセンスの制約にとって意味があります。

1
Rarst

WP MVC (WordPress用のMVCフレームワーク)が最良のプラグインです。私たちは今それを使っています、多分それはあなたのニーズに合うでしょう。

1
user71157

私はパーティーに遅刻していると思います、しかし誰かがまだ答えを探しているならば、私はしばらくの間WordPressプラグイン開発のためのMVCボイラープレートに取り組んでいます。この定型句は、ModelViewControllerの間で懸念を分けることを目的としています。

この定型文で、開発者は個々のModelViewControllerクラスを書くことができます。また、コントローラ/モデルをロードするかどうかという懸念はRouterに委任されているので、あなたのコントローラとモデルは想定していることだけに集中できます。これは設置面積を小さくするのに役立つと私は信じています。

これは本格的なMVCフレームワークではなく、開発者がMVCスタイルでコードを書くことを可能にする単なる定型的な機能です。このため、それはMVCの方法でプラグインを構築するために必要とされるそれらの機能だけを持っています - いいえORM - いいえ余分なもの - いいえ巨大な学習曲線。

これがプロジェクトへのリンクです: https://github.com/sumitpore/mvc-plugin-boilerplate-for-wordpress

0
Sumit Pore

私はあなたがcakePHPやcodeigniterのようにMVCを使うことを意味しているのではなく、プラグインやテーマを作成するために「MVCフレームワークを使う」のではないと思います。 2番目の方法では、ユーザーが使用しているフレームワークと拡張ファイルをダウンロードする必要があります。

0
kevtrout