54
WordPress Kitchen v 2.0.1.5

Як досвід компанії перетворився на фреймворк

Embed Size (px)

Citation preview

Page 1: Як досвід компанії перетворився на фреймворк

WordPress Kitchenv2.0.1.5

Page 2: Як досвід компанії перетворився на фреймворк

Александр Стрихаhttps://github.com/shtrihstr

Page 3: Як досвід компанії перетворився на фреймворк
Page 4: Як досвід компанії перетворився на фреймворк

Как опыт компании превратился в

framework

Page 5: Як досвід компанії перетворився на фреймворк

Никто не учится на чужих ошибках

Page 6: Як досвід компанії перетворився на фреймворк

$step1->анархия()

Page 7: Як досвід компанії перетворився на фреймворк

if(!isset($content_width))$content_width=584;add_action('after_setup_theme','twentyeleven_setup');if(!function_exists('twentyeleven_setup')):function twentyeleven_setup(){load_theme_textdomain('twentyeleven',get_template_directory().'/languages');add_editor_style();require(get_template_directory().'/inc/theme-options.php');require(get_template_directory().'/inc/widgets.php');add_theme_support('automatic-feed-links');register_nav_menu('primary',__('Primary Menu’,’twentyeleven’));add_theme_support('post-formats',array('aside','link','gallery','status','quote','image'));$theme_options=twentyeleven_get_theme_options();if('dark'==$theme_options['color_scheme'])$default_background_color='1d1d1d';else$default_background_color='e2e2e2';add_theme_support('custom-background',array('default-color'=>$default_background_color,));add_theme_support('post-thumbnails');$custom_header_support=array('default-text-color'=>'000','width'=>apply_filters('twentyeleven_header_image_width',1000),'height'=>apply_filters('twentyeleven_header_image_height',288),'flex-height'=>true,'random-default'=>true,'wp-head-callback'=>'twentyeleven_header_style','admin-head-callback'=>'twentyeleven_admin_header_style','admin-preview-callback'=>'twentyeleven_admin_header_image',);add_theme_support('custom-header',$custom_header_support);if(! …

Page 8: Як досвід компанії перетворився на фреймворк

$step2->структура()

Page 9: Як досвід компанії перетворився на фреймворк

my-theme/ ………………includes/ ………………………………post-type.php ………………………………taxonomy.php ………………………………meta-box.php ………………………………hook.php ………………functions.php ………………index.php

Page 10: Як досвід компанії перетворився на фреймворк

$step3->модули()

Page 11: Як досвід компанії перетворився на фреймворк

МОДУЛЬ А

МОДУЛЬ С

МОДУЛЬ Б

МОДУЛЬ Д

МОДУЛЬ Е

МОДУЛЬ Ж

Тема 1 Тема 2

Page 12: Як досвід компанії перетворився на фреймворк

my-theme/ ………………modules/ ………………………………ajax-load/ ………………………………catalog/ ………………………………………………init.php ………………………………………………post-type.php ………………………………………………hooks.php ………………………………theme/ ………………functions.php ………………index.php

Page 13: Як досвід компанії перетворився на фреймворк

$step4->framework()

Page 14: Як досвід компанії перетворився на фреймворк

Зачем?

Page 15: Як досвід компанії перетворився на фреймворк

Что уже существует?

Page 16: Як досвід компанії перетворився на фреймворк

Требования

• Строгое структурирование кода

• Ускорение разработки

• ООП

• Побуждение писать правильно

Page 17: Як досвід компанії перетворився на фреймворк

WPKithttps://github.com/REDINKno/wpkit

Page 18: Як досвід компанії перетворився на фреймворк

Post Types

use WPKit\PostType\PostType;

$pt_product = new PostType( 'product', 'Product' ); $pt_product->set_menu_icon( 'dashicons-products' ); $pt_product->set_supports( ['thumbnail'] ); $pt_product->add_column_thumbnail();

Page 19: Як досвід компанії перетворився на фреймворк

Post Types

use WPKit\PostType\PostType;

$pt_product = new PostType( 'product', 'Product' ); $pt_product->set_menu_icon( 'dashicons-products' ); $pt_product->set_supports( ['thumbnail'] ); $pt_product->add_column_thumbnail();

Page 20: Як досвід компанії перетворився на фреймворк

Post Types$pt_product->add_column( 'Image', function ( $column ) {

global $post;

if ( $id = get_post_thumbnail_id( $post->ID ) ) {

echo wp_get_attachment_image( $id, [74, 60], true ); }

}, $sortable = false, $position = 1 );

$pt_product->add_column_thumbnail();

Page 21: Як досвід компанії перетворився на фреймворк

Post Types$pt_product->add_column( 'Image', function ( $column ) {

global $post;

if ( $id = get_post_thumbnail_id( $post->ID ) ) {

echo wp_get_attachment_image( $id, [74, 60], true ); }

}, $sortable = false, $position = 1 );

$pt_product->add_column_thumbnail();

Page 22: Як досвід компанії перетворився на фреймворк

Taxonomies

use WPKit\Taxonomy\Taxonomy;

$tx_brand = new Taxonomy( 'brand', 'Brand' );

$tx_brand->add_post_type( $pt_product );

$tx_brand->add_custom_field( 'url', 'URL', 'Url' );

Page 23: Як досвід компанії перетворився на фреймворк

Taxonomies

use WPKit\Taxonomy\Taxonomy;

$tx_brand = new Taxonomy( 'brand', 'Brand' );

$tx_brand->add_post_type( $pt_product );

$tx_brand->add_custom_field( 'url', 'URL', 'Url' );

Page 24: Як досвід компанії перетворився на фреймворк

Taxonomies

use WPKit\Taxonomy\Taxonomy;

$tx_brand = new Taxonomy( 'brand', 'Brand' );

$tx_brand->add_post_type( $pt_product );

$tx_brand->add_custom_field( 'url', 'URL', 'Url' );

Page 25: Як досвід компанії перетворився на фреймворк

Fields

Text Textarea Hidden Email Url

Number Checkbox Color Date

File Image Map

Radio Select Select2

Video WPEditor

Page 26: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', 'Price', function() {

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 27: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', 'Price', function() {

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 28: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', 'Price' );

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 29: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', ‘Price’, ‘Number’ );

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 30: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', 'Price', function() {

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 31: Як досвід компанії перетворився на фреймворк

Post Metause WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

$mb_attr->add_post_type( $pt_product );

$mb_attr->add_field( 'price', 'Price', function() {

$field = new Number(); $field->set_min( 0 );

return $field; } );

$mb_attr->add_field( 'image', 'Image', 'Image' );

Page 32: Як досвід компанії перетворився на фреймворк

Post Meta

use WPKit\PostType\MetaBox;

$mb_attr = new MetaBox( 'attributes', 'Attributes' );

use WPKit\PostType\MetaBoxRepeatable;

$mb_attr = new MetaBoxRepeatable( 'attributes', 'Attributes' );

Page 33: Як досвід компанії перетворився на фреймворк

Settings API

use WPKit\Options\OptionBox;

$ob_design = new OptionBox( 'design', 'Design' );

$ob_design->add_field( 'bg', 'Background', 'Color' );

$ob_design->set_page( 'general' );

Page 34: Як досвід компанії перетворився на фреймворк

Settings API

use WPKit\Options\OptionBox;

$ob_design = new OptionBox( 'design', 'Design' );

$ob_design->add_field( 'bg', 'Background', 'Color' );

$ob_design->set_page( 'general' );

Page 35: Як досвід компанії перетворився на фреймворк

Settings API

use WPKit\Options\OptionBox;

$ob_design = new OptionBox( 'design', 'Design' );

$ob_design->add_field( 'bg', 'Background', 'Color' );

$ob_design->set_page( 'general' );

Page 36: Як досвід компанії перетворився на фреймворк

List Tableuse WPKit\Table\Table;

$table = new Table( 'users', 'ID' );

$table->setup_general_column( 'display_name', ‘Name' );

$table->setup_column( 'user_email', 'Email' );

$table->setup_column( 'avatar', 'Avatar', function( $item, $key ) { return get_avatar( $item[ 'user_email' ] ); } );

$page = new TablePage( 'clients', 'Clients' );

$page->set_table( $table );

Page 37: Як досвід компанії перетворився на фреймворк

List Tableuse WPKit\Table\Table;

$table = new Table( 'users', 'ID' );

$table->setup_general_column( 'display_name', ‘Name' );

$table->setup_column( 'user_email', 'Email' );

$table->setup_column( 'avatar', 'Avatar', function( $item, $key ) { return get_avatar( $item[ 'user_email' ] ); } );

$page = new TablePage( 'clients', 'Clients' );

$page->set_table( $table );

Page 38: Як досвід компанії перетворився на фреймворк

List Tableuse WPKit\Table\Table;

$table = new Table( 'users', 'ID' );

$table->setup_general_column( 'display_name', ‘Name' );

$table->setup_column( 'user_email', 'Email' );

$table->setup_column( 'avatar', 'Avatar', function( $item, $key ) { return get_avatar( $item[ 'user_email' ] ); } );

$page = new TablePage( 'clients', 'Clients' );

$page->set_table( $table );

Page 39: Як досвід компанії перетворився на фреймворк

List Tableuse WPKit\Table\Table;

$table = new Table( 'users', 'ID' );

$table->setup_general_column( 'display_name', ‘Name' );

$table->setup_column( 'user_email', 'Email' );

$table->setup_column( 'avatar', 'Avatar', function( $item, $key ) { return get_avatar( $item[ 'user_email' ] ); } );

$page = new TablePage( 'clients', 'Clients' );

$page->set_table( $table );

Page 40: Як досвід компанії перетворився на фреймворк

Widgets

use WPKit\Widgets\AbstractWidget;

class ImageWidget extends AbstractWidget { protected function _get_config() {

return ['id' => 'image', 'name' => 'Image']; }

}

Page 41: Як досвід компанії перетворився на фреймворк

Widgets

use WPKit\Widgets\AbstractWidget;

class ImageWidget extends AbstractWidget { protected function _get_config() {

return ['id' => 'image', 'name' => 'Image']; }

}

Page 42: Як досвід компанії перетворився на фреймворк

Widgets

use WPKit\Widgets\AbstractWidget;

class ImageWidget extends AbstractWidget { protected function _build_fields() {

$this->_add_field( 'image', 'Image', 'Image' ); }

}

Page 43: Як досвід компанії перетворився на фреймворк

Widgets

use WPKit\Widgets\AbstractWidget;

class ImageWidget extends AbstractWidget { protected function _render( $args, $data ) {

echo wp_get_attachment_image( $data['image'] ); }

}

Page 44: Як досвід компанії перетворився на фреймворк

Modules

Page 45: Як досвід компанії перетворився на фреймворк

my-theme/ ………………modules/ ………………………………ajax-load/ ………………………………catalog/ ………………………………………………Initialization.php ………………………………………………Functions.php ………………………………………………Ajax.php ………………………………theme/ ………………functions.php ………………index.php

Page 46: Як досвід компанії перетворився на фреймворк

Initializationnamespace modules\catalog;

use WPKit\Module\AbstractModuleInitialization;

class Initialization extends AbstractModuleInitialization { public function register_***() {

} }

Page 47: Як досвід компанії перетворився на фреймворк

Initializationnamespace modules\catalog;

use WPKit\Module\AbstractModuleInitialization;

class Initialization extends AbstractModuleInitialization { public function register_post_type() {

$pt_product = new PostType( 'product', 'Product' );

} }

Page 48: Як досвід компанії перетворився на фреймворк

Initializationnamespace modules\catalog;

use WPKit\Module\AbstractModuleInitialization;

class Initialization extends AbstractModuleInitialization { public function add_filter_***() {

} }

Page 49: Як досвід компанії перетворився на фреймворк

Initializationnamespace modules\catalog;

use WPKit\Module\AbstractModuleInitialization;

class Initialization extends AbstractModuleInitialization { public function add_filter_the_content( $content ) {

return capital_P_dangit( $content );

} }

Page 50: Як досвід компанії перетворився на фреймворк

Functionsnamespace modules\catalog;

use WPKit\Module\AbstractFunctions;

class Functions extends AbstractFunctions { public static function get_product_price( $id = null ) { if( null == $id ) { $id = get_the_ID(); }

return MetaBox::get( $id, 'attributes', 'price' ); } }

Page 51: Як досвід компанії перетворився на фреймворк

Functionsnamespace modules\catalog;

use WPKit\Module\AbstractFunctions;

class Functions extends AbstractFunctions { public static function get_product_price( $id = null ) { if( null == $id ) { $id = get_the_ID(); }

return MetaBox::get( $id, 'attributes', 'price' ); } }

Page 52: Як досвід компанії перетворився на фреймворк

Functions

<?php get_header(); ?> <?php the_post(); ?> <article class="product"> <h2><?php the_title(); ?></h2> <p>

Price: <?php echo Catalog::get_product_price(); ?> </p> </article> <?php get_footer(); ?>

Page 53: Як досвід компанії перетворився на фреймворк

Ресурсы

• WPKit https://github.com/REDINKno/wpkit

• Пример https://github.com/shtrihstr/wpk15-theme-wpkit

• Wiki coming soon…

Page 54: Як досвід компанії перетворився на фреймворк

Спасибо!

Код здорового человека Код курильщика

<?php namespace modules\catalog;

use WPKit\Module\AbstractModuleInitialization;

class Initialization extends AbstractModuleInitialization { /** * @var PostType */ protected $_post_type_product = null;

if(!isset($content_width))$content_width=584;add_action('after_setup_theme','twentyeleven_setup');if(!function_exists('twentyeleven_setup')):function twentyeleven_setup(){load_theme_textdomain('twentyeleven',get_template_directory().'/languages');add_editor_style();require(get_template_directory().'/inc/theme-options.php');