Оптимальная архитектура плагина wordpress

11
Оптимальная архитектура плагина WordPress Custom Post Types Идея плагина Архитектура кода Структура БД Идея + архитектур а Дизайно- верстка Front-End Back-End Разработка Тестирование Отладка Тестирован ие 06.09.2014 Saint-Petersburg WordPress Meetup #2 Igor Sazonov @tigusigalpa

Upload: the-ngo-development-center

Post on 25-Jun-2015

452 views

Category:

Internet


3 download

DESCRIPTION

Презентация Игоря Сазона. WordPress Meetup #2.

TRANSCRIPT

Page 1: Оптимальная архитектура плагина WordPress

Оптимальная архитектура плагина WordPress

Custom Post Types

• Идея плагина• Архитектура кода

• Структура БД

Идея + архитектур

а

• Дизайно-верстка

• Front-End• Back-End

Разработка

• Тестирование• Отладка

Тестирование

06.09.2014 Saint-Petersburg WordPress Meetup #2

Igor Sazonov @tigusigalpa

Page 2: Оптимальная архитектура плагина WordPress

План доклада

• Правила обычного плагина WordPress• Архитектура WooCommerce• Архитектура Easy Digital Downloads• Архитектура Yoast• Вывод и построение своей архитектуры кода• Что такое Singleton?• Суть предлагаемой архитектуры• Ссылка на скачивание базового плагина…. Идеи..

Page 3: Оптимальная архитектура плагина WordPress

Правила обычного плагина 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*/

Но это самый примитивный способ

Page 4: Оптимальная архитектура плагина WordPress

WooCommerce assets

css fonts images js

admin frontend jquery-cookie…..

i18n languages…

includes admin api libraries shortcodes class-wc-commets.php…. class-wc-install.php….

uninstall.php woocommerce.php

WordPress

woocommerce.php(class WooCommerce:

defines+includes)

php-classes

/includes

Архитектура WooCommerce (не все – структура)

Page 5: Оптимальная архитектура плагина WordPress

Easy Digital Downloads assets

css fonts images

colorbox icons…

js admin-scripts.js edd-ajax.js…

includes admin cart checkout class-edd-cron.php…

languages templates

fonts images widget-cart-empty.php…

easy-digital-downloads.php uninstall.php

WordPress

easy-digital-downloads.php(class Easy_Digital_Downloads: Singleton+defines+includes)

php-classes

/includes

Архитектура Easy Digital Downloads (не все – структура)

Page 6: Оптимальная архитектура плагина WordPress

Yoast WordPress SEO• admin

• license-manager• pages

• bulk-title-editor.php…• ajax.php• class-pointers.php…

• css• frontend

• class-breadcrumbs.php…

• images• inc

• class-rewrite.php…

• js• languages• wp-seo.php• wp-seo-main.php

WordPress

wp-seo.php (defines)

wp-seo-main.php (defines+includes)

/admin

php-classes

/admin/pages

/inc

/frontend

Архитектура Yoast (не все – структура)

Page 7: Оптимальная архитектура плагина WordPress

Вывод и построение своей файловой архитектурыВыводы:• все файлы front-end (js, css, images, fonts) в

отдельную папку assets• Файлы (если их более 1) подключаемых скриптов – в

подпапки (images/colorbox)• Логику в папку lib. Разделяем логику (php) на

отдельные файлы (например, lib/setup.php) или блоки (lib/widgets) с файлами

Page 8: Оптимальная архитектура плагина WordPress

Вывод и построение своей архитектурыОптимальная структура файлов (наверное):- 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

Page 9: Оптимальная архитектура плагина WordPress

Что такое SingletonSingleton – порождающий шаблон проектирования, гарантирующий что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа.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; }}

Page 10: Оптимальная архитектура плагина WordPress

Суть (для понимания кода плагина)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();

Таким образом мы разделяем логику плагина на соответствующие тематические блоки/классы. Это удобно для совместной работы над плагином и просто удобно.

Page 11: Оптимальная архитектура плагина WordPress

Ссылка на скачивание базового плагинаhttps://www.dropbox.com/s/iosj1r4suyrt9kv/optimal-big-plugin.zip?dl=0