Доклад написан для WordPress Meetup #2 в Санкт-Петербурге. В докладе сравниваются файловые и логические архитектуры трех крупных плагинов на WordPress: WooCommerce, Easy Digital Downloads и Yoast WordPress SEO. Сравнив 3 архитектуры я взял наиболее оптимальные структуры и создал свою, при этом разместив ссылку на скачивание данного плагина. Скачав этот плагин Вы сможете понять его архитектуру. Много вещей конечно же можно улучшить, но самое главное посыл.
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Types основе
1. Оптимальная архитектура
плагина WordPress
Custom Post Types
• Идея плагина
• Архитектура кода
• Структура БД
Идея +
архитектура
• Дизайно-верстка
• Front-End
• Back-End
Разработка
• Тестирование
• Отладка Тестирование
06.09.2014 Saint-Petersburg WordPress Meetup #2
Igor Sazonov@tigusigalpa
2. План доклада
• Правила обычного плагина WordPress
• Архитектура WooCommerce
• Архитектура Easy Digital Downloads
• Архитектура Yoast
• Вывод и построение своей архитектуры кода
• Что такое Singleton?
• Суть предлагаемой архитектуры
• Ссылка на скачивание базового плагина…. Идеи..
3. Правила обычного плагина WordPress
/wp-content/plugins/my-plugin – папка плагина
/wp-content/plugins/my-plugin/somefile.php – файл с метаданными плагина – главный файл плагина –
входная точка
WordPress сканирует все папки внутри wp-content/plugins и ищет там файл с метаданными (wp-admin/
includes/plugin.php:get_plugins()#288 строка с помощью get_plugin_data())
/**
* Plugin Name: Some Plugin Name
* Plugin URI: http://www.somewpplugin.com
* Description: Great Plugin!
* Author: Ivan Ivanov
* Author URI: http://www.ivanivanov.com
* Version: 1.0
*/
Но это самый примитивный способ
7. Вывод и построение своей файловой
архитектуры
Выводы:
• все файлы front-end (js, css, images, fonts) в отдельную папку
assets
• Файлы (если их более 1) подключаемых скриптов – в подпапки
(images/colorbox)
• Логику в папку lib. Разделяем логику (php) на отдельные файлы
(например, lib/setup.php) или блоки (lib/widgets) с файлами
8. Вывод и построение своей архитектуры
Оптимальная структура файлов
(наверное):
- assets
- css
- fonts
- images
- some-lib-files-if-needed
- js
- languages
- lib
- some-folders
- setup.php – инициализация всех
action’ов
- plugin-name.php – главный входной
файл с метаданными
- uninstall.php
WordPress
plugin-name.php
/lib/setup.php
(class Plugin_Setup+includes+defines)
php-classes
/lib
9. Что такое Singleton
Singleton – порождающий шаблон проектирования, гарантирующий что в однопоточном приложении
будет единственный экземпляр класса с глобальной точкой доступа.
class MyClass {
private static $_instance;
public function __construct() {
/*do something*/
}
public static function getInstance() {
if ( ! isset( self::$_instance ) && ! ( self::$_instance instanceof MyClass ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
}
10. Суть (для понимания кода плагина)
1. Входной файл (plugin-name.php) передает управление в lib/setup.php в
конструктор класса MyPlugin_Setup. Этот класс будет содержать в себе
настройки плагина (версия итп) и будет родителем для всех классов из
папки lib.
2. В конструкторе класса MyPlugin_Setup происходит подключение файлов
из папки lib и дефайн (определение) необходимых значений (путь к
плагину итп). Каждый файл в папке lib это соответствующий класс,
который наследуется от класса MyPlugin_Setup, а также каждый класс
содержит в себе Singleton-метод getInstance() и метод init();
3. Конструктор класса MyPlugin_Setup в конструкторе перебирает все
классы из подключенных файлов и через Singleton каждого класса
вызывает метод init();
Таким образом мы разделяем логику плагина на соответствующие
тематические блоки/классы. Это удобно для совместной работы над
плагином и просто удобно.
11. Ссылка на скачивание базового плагина
https://www.dropbox.com/s/iosj1r4suyrt9kv/optimal-big-plugin.
zip?dl=0