web-dev-qa-db-fra.com

Développement de plugins WordPress dans l'architecture MVC, comment?

Je pense que l'architecture du plug-in wordpress n'est pas MVC. Donc, je veux utiliser/faire l'architecture MVC dans le développement de plug-in WordPress (comme cakephp, codeIgniter). Comment puis-je les utiliser dans le développement de Plguin. WordPress prend-il en charge CakePHP ou d’autres frameworks?

6
coderex

Vous pourriez certainement utiliser une philosophie MVC dans le développement d'un plugin, mais vous seriez vraiment ridicule d'essayer d'incorporer CI ou Cake en plus de WP.

Par exemple, vous pouvez créer un plugin en utilisant la pseudo-structure suivante (pour votre information, il existe une multitude de façons de le construire, en fonction de votre interprétation de MVC. Ceci est juste l'exemple rapide qui vous vient à l'esprit):

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
    }
}

C’est peut-être un exemple horrible de structure de plug-in, voire de MVC, mais c’est simplement pour illustrer ce MVC architecture !== MVC frameworks et que MVC peut être utilisé dans la conception de plug-in. Les classes de widgets et les autres fonctionnalités de WP sont similaires, bien qu’elles ne séparent pas explicitement les problèmes.

6
Dan Gayle

Vous avez posé plusieurs questions à la fois:

Q: Je pense que l'architecture du plug-in wordpress n'est pas MVC.

A: Oui c'est vrai. Ce n'est pas MVC au sens du motif de conception. C'est MVC dans une vue plus générale: Modèle: Mysql, Vue: HTML/CSS, Contrôleur: PHP. Le contrôleur frontal principal est index.php, les commandes sont des requêtes HTTP. Le routeur est .htaccess (si vous utilisez de jolis permaliens), le contrôleur 404 (si vous utilisez celui-là) ou index.php si vous utilisez la configuration standard.

Q: Je souhaite donc utiliser/utiliser l'architecture MVC dans le développement de plug-in WordPress (comme cakephp, codeIgniter). Comment puis-je les utiliser dans le développement de Plguin. WordPress prend-il en charge CakePHP ou d’autres frameworks?

R: Non, Wordpress ne prend pas en charge CakePHP ou CodeIgniter directement. Vous pouvez écrire un adaptateur pour codeIgniter ou Cake afin de pouvoir réutiliser un MVC existant (par exemple en encapsulant la demande HTTP et en supprimant les barres obliques des variables de demande/des superglobales). Mais vous pouvez également surcharger Wordpress pour exécuter simplement toute autre application-cadre PHP, par exemple. en ajoutant des rewriterules au fichier .htaccess et en ajoutant des fichiers php. Cela dépend de ce que vous voulez faire.

5
hakre

L'architecture de plugin de wordpress en soi n'a rien à voir avec MVC. Mais si vous voulez faire MVC dans votre propre plugin, pourquoi pas. Vous n'êtes pas obligé d'utiliser un framework, MVC est un concept qui pourrait être implémenté sans le framework hevay, voir http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework. html

2
user310291

J'avais cette même question il y a quelque temps et, pour le moment, malheureusement, la seule façon de faire de MVC dans un thème ou un plugin WordPress était de jouer le rôle qui vous convient.

C'est donc ce que j'ai fait et je l'utilise dans mes plugins et thèmes depuis quelques mois maintenant. Vous pouvez voir le code source sur github ici: https://github.com/philipwalton/PW_Framework Il s’appelle PW_Framework et est basé vaguement sur Yii Framework, un très bon framework MVC pour PHP.

En son cœur, PW_Framework est un moyen rapide et facile de créer des pages d’options complètes avec validation côté client et côté serveur. Il gère la validation ajax ainsi que tous les problèmes de sécurité WordPress (tels que nonce), de sorte que vous puissiez concentrer vos efforts de développement sur ce que votre plugin fait réellement.

Il vous suffit de définir votre modèle avec les attributs, les étiquettes d'attribut, les descriptions et les options:

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'),
    ),

  );
}

Ensuite, vous définissez les règles de validation:

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$/'
    ),
  );
}

Et la vue ressemblerait à quelque chose comme ça:

<?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(); ?>

Ensuite, dans le contrôleur, vous écrivez simplement toutes les fonctionnalités de votre code.

Voici un exemple de travail en utilisation réelle: http://wordpress.org/extend/plugins/pw-archives

2
Philip Walton

WordPress est à peu près un framework pour lui-même, il s’occupe de choses qui sont généralement couvertes par un framework avec du code propre (ou fourni). Eh bien, techniquement, il s’agit de BackPress framework, mais c’est vraiment très interne et pas trop pertinent.

Les extensions WordPress (plugins ou thèmes non plus) utilisent les API WP fournies pour récupérer et modifier les données. Peu importe pour WP ce que vos extensions utilisent, dans la mesure où elles utilisent l'API appropriée pour interagir avec WP lui-même.

Donc, fondamentalement, vous pouvez inclure et utiliser n’importe quel framework, bibliothèque ou autre dans votre plugin. Tant que vous utilisez WP API correctement et que cela a du sens pour les contraintes de performances et de licence.

1
Rarst

WP MVC (un framework MVC pour WordPress) est le meilleur plugin. Nous l'utilisons maintenant, cela conviendra peut-être à vos besoins.

1
user71157

Je pense que je suis en retard à la fête, mais si quelqu'un cherche encore une réponse, je travaille depuis un certain temps déjà sur MVC warmplate pour le développement de plugins WordPress. Ce modèle vise à séparer les préoccupations entre Modèle , Vue & Contrôleur .

Grâce à cette passerelle, le développeur a la possibilité d'écrire un individu Modèle , Vue & Contrôleur classes. En outre, le souci de charger un contrôleur/modèle ou non est délégué à Router , afin que votre contrôleur et modèle ne puisse se concentrer que sur ce qu'il est censé faire. Je pense que cela aiderait à garder une empreinte réduite.

Il ne s’agit pas d’un framework MVC à part entière, mais d’une plate-forme permettant aux développeurs d’écrire du code dans le style MVC. Pour cette raison, il ne dispose que des fonctionnalités nécessaires à la création de plug-in de manière MVC - Pas d'ORM - Pas de bonus supplémentaire - Pas de courbe d'apprentissage gigantesque.

Voici le lien vers un projet: https://github.com/sumitpore/mvc-plugin-boilerplate-for-wordpress

0
Sumit Pore

Je suppose que vous voulez dire que MVC est utilisé comme cakePHP et codeigniter, et non pas comme "utiliser un framework MVC" pour créer un plugin ou un thème. La deuxième option obligerait les utilisateurs à télécharger la structure que vous avez utilisée ainsi que les fichiers d'extension.

0
kevtrout