Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

66
Tworzenie wtyczek dla TinyMCE 4.* Tomasz Dziuda WordUp Wrocław @ V.2014

description

Wprowadzenie do tworzenia wtyczek w edytorze TinyMCE 4.* dostępnym od WordPressa 3.9

Transcript of Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Page 1: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Tworzenie wtyczek dla TinyMCE 4.*

Tomasz Dziuda !

WordUp Wrocław @ V.2014

Page 2: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Co warto wiedzieć o TinyMCE?

Page 3: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

• W WordPressie 3.9 zawarto TinyMCE 4.*

Page 4: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

• W WordPressie 3.9 zawarto TinyMCE 4.*

• TinyMCE posiada tryb “teeny”

Page 5: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

• W WordPressie 3.9 zawarto TinyMCE 4.*

• TinyMCE posiada tryb “teeny”

• Łatwo go rozbudować o własne przyciski

Page 6: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

• W WordPressie 3.9 zawarto TinyMCE 4.*

• TinyMCE posiada tryb “teeny”

• Łatwo go rozbudować o własne przyciski

• WordPress posiada sporo filtrów dedykowanych TinyMCE

Page 7: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

• W WordPressie 3.9 zawarto TinyMCE 4.*

• TinyMCE posiada tryb “teeny”

• Łatwo go rozbudować o własne przyciski

• WordPress posiada sporo filtrów dedykowanych TinyMCE

• Dokumentacja TinyMCE ssie ;)

Page 8: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Podstawowe filtry

Page 9: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

mce_buttons[_2,_3,_4]

( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_buttons,_mce_buttons_2,_mce_buttons_3,_mce_buttons_4 )

Page 10: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

teeny_mce_buttons

Page 11: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

mce_external_languages

Page 12: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

mce_external_plugins

Page 13: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

mce_css

( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_css )

Page 14: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

tiny_mce_before_init

( http://codex.wordpress.org/Plugin_API/Filter_Reference/tiny_mce_before_init )

Page 15: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Dodajemy przycisk do edytora

Page 16: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

add_action( 'admin_head', ‘wordup_add_button' );

*.php

Page 17: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button() { !!!!!!!!!!!!!!}

*.php

Page 18: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button() { global $typenow; !!!!!!!!!!!!}

*.php

Page 19: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button() { global $typenow; if ( !current_user_can('edit_posts') && !current_user_can(‘edit_pages’) ) return; !!!!!!!}

*.php

Page 20: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button() { global $typenow; if ( !current_user_can('edit_posts') && !current_user_can(‘edit_pages’) ) return; if(!in_array($typenow, array('post', 'page'))) return; !!!!}

*.php

Page 21: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button() { global $typenow; if ( !current_user_can('edit_posts') && !current_user_can(‘edit_pages’) ) return; if(!in_array($typenow, array('post', 'page'))) return; if (get_user_option('rich_editing') == 'true') { add_filter(‘mce_external_plugins’, ‘wordup_add_plugin’); add_filter('mce_buttons', 'wordup_register_button'); } }

*.php

Page 22: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_plugin($plgs) { $plgs['wordup_button'] = plugins_url('/btn.js', __FILE__); return $plgs; } !!!!

*.php

Page 23: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_plugin($plgs) { $plgs['wordup_button'] = plugins_url('/btn.js', __FILE__); return $plgs; } !function wordup_register_button($buttons) { array_push($buttons, "wordup_button"); return $buttons; }

*.php

Page 24: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { !!!!!!!!})();

*.js

Page 25: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add('NAZWA', !!!!! ); })();

*.js

Page 26: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add('NAZWA', function(ed, url) { !!! } ); })();

*.js

Page 27: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add('NAZWA', function(ed, url) { ed.addButton( 'NAZWA', { title: 'TYTUŁ', icon: 'IKONA' }); } ); })();

*.js

Page 28: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

icon: ‘wp-media-library’ => .mce-i-wp-media-library( http://wp.dziudek.pl/dev/dodawanie-wlasnych-przyciskow-w-edytorze-tinymce-4 )

Page 29: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

( http://melchoyce.github.io/dashicons/ )

Page 30: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Usuwamy przycisk z edytora

Page 31: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_remove_buttons($buttons) { unset($buttons[0]); return $buttons; } !!!!

Page 32: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_remove_buttons($buttons) { unset($buttons[0]); return $buttons; } !add_filter( 'mce_buttons', 'wordup_remove_buttons' );

Page 33: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław
Page 34: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Zmieniamy ikonę oraz wstawiamy do edytora tekst

Page 35: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

!add_action( 'admin_enqueue_scripts', ‘wordup_add_css' ); !function wordup_add_css() { wp_enqueue_style( 'wordup-tinymce', plugins_url('/style.css', __FILE__) ); }

Page 36: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

i.mce-i-icon { font: 400 20px/1 dashicons; padding: 0; vertical-align: top; speak: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; margin-left: -2px; padding-right: 2px }

style.css

Page 37: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add(‘wordup_button', function(editor, url) { editor.addButton( ‘wordup_button', { title: ‘My test button', icon: ‘icon dashicons-dashboard’, onclick: function() { editor.insertContent('Hello World'); } }); } ); })();

Page 38: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław
Page 39: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Dajemy użytkownikowi wybór

Page 40: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add( 'wordup_button', function( ed, url ) { ed.addButton( 'wordup_button', { title: 'My test button', type: 'menubutton', icon: 'icon dashicons-dashboard', menu: [{ text: 'Menu item I', value: 'Text from menu item I', icon: 'icon dashicons-wordpress', onclick: function() { ed.insertContent(this.value()); } // .. }] }); }); })();

Page 41: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław
Page 42: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Zaawansowana konfiguracja w popupie

Page 43: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add('wordup_button', function(editor, url){ editor.addButton( 'wordup_button', { title: 'Własny nagłówek', icon: 'icon dashicons-dashboard', onclick: function() { editor.windowManager.open( { title: 'Wstaw nagłówek', body: [{ type: 'textbox', name: 'title', label: 'Tytuł' }], onsubmit: function( e ) { editor.insertContent( '<h3>' + e.data.title + '</h3>'); } }); } }); }); })();

Page 44: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław
Page 45: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.windowManager.open( { title: 'Wstaw nagłówek', !!!!!!!!!!!!!!!!!!!!!!});

Page 46: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.windowManager.open( { title: 'Wstaw nagłówek', body: [{ type: 'textbox', name: 'title', label: 'Tytuł', }] !!!!!!!!!!!!!!!!!!});

Page 47: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.windowManager.open( { title: 'Wstaw nagłówek', body: [{ type: 'textbox', name: 'title', label: 'Tytuł', }, { type: 'textbox', name: 'id', label: 'Nazwa kotwicy' }] !!!!!!!!!!!!!!});

Page 48: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.windowManager.open( { title: 'Wstaw nagłówek', body: [{ type: 'textbox', name: 'title', label: 'Tytuł', }, { type: 'textbox', name: 'id', label: 'Nazwa kotwicy' }, { type: 'listbox', name: 'level', label: 'Poziom nagłówka', 'values': [ {text: '<h3>', value: '3'}, {text: '<h4>', value: '4'}, {text: '<h5>', value: '5'}, {text: '<h6>', value: '6'} ] }] !!!!});

Page 49: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.windowManager.open( { title: 'Wstaw nagłówek', body: [{ type: 'textbox', name: 'title', label: 'Tytuł', }, { type: 'textbox', name: 'id', label: 'Nazwa kotwicy' }, { type: 'listbox', name: 'level', label: 'Poziom nagłówka', 'values': [ {text: '<h3>', value: '3'}, {text: '<h4>', value: '4'}, {text: '<h5>', value: '5'}, {text: '<h6>', value: '6'} ] }], onsubmit: function( e ) { editor.insertContent( '<h' + e.data.level + ' id="' + e.data.id + '">' + e.data.title + '</h' + e.data.level + '>'); } });

Page 50: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław
Page 51: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Wsparcie dla Wielojęzyczności

Page 52: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

wp_localize_script

Page 53: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

wp_localize_script

Page 54: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

function wordup_add_button_lang($loc) { $loc['wordup_button'] = plugin_dir_path(__FILE__).'lang.php'; return $loc; } !add_filter( 'mce_external_languages', ‘wordup_add_button_lang' );

Page 55: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !! !! !!!!!!!!!!!!

Page 56: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !if (!class_exists( '_WP_Editors' )) require( ABSPATH . WPINC . '/class-wp-editor.php' ); !! !!!!!!!!!!!!

Page 57: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !if (!class_exists( '_WP_Editors' )) require( ABSPATH . WPINC . '/class-wp-editor.php' ); !function wordup_button_translation() { !!!!!!!!!} !!

Page 58: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !if (!class_exists( '_WP_Editors' )) require( ABSPATH . WPINC . '/class-wp-editor.php' ); !function wordup_button_translation() { $strings = array( 'label' => __('My test’, 'wordup_button'), 'msg' => __('Hello World!!!!', 'wordup_button') ); ! !!! } !

Page 59: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !if (!class_exists( '_WP_Editors' )) require( ABSPATH . WPINC . '/class-wp-editor.php' ); !function wordup_button_translation() { $strings = array( 'label' => __('My test’, 'wordup_button'), 'msg' => __('Hello World!!!!', 'wordup_button') ); ! $locale = _WP_Editors::$mce_locale; $translated = 'tinyMCE.addI18n("' . $locale . '.wordup_button", ' . json_encode( $strings ) . ");\n"; ! return $translated; } !

Page 60: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

<?php !if (!defined('ABSPATH')) exit; !if (!class_exists( '_WP_Editors' )) require( ABSPATH . WPINC . '/class-wp-editor.php' ); !function wordup_button_translation() { $strings = array( 'label' => __('My test’, 'wordup_button'), 'msg' => __('Hello World!!!!', 'wordup_button') ); ! $locale = _WP_Editors::$mce_locale; $translated = 'tinyMCE.addI18n("' . $locale . '.wordup_button", ' . json_encode( $strings ) . ");\n"; ! return $translated; } !$strings = wordup_button_translation();

Page 61: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

editor.getLang('OBIEKT.KLUCZ')

Page 62: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

(function() { tinymce.PluginManager.add( 'wordup_button', function( editor, url ) { editor.addButton( 'wordup_button', { title: editor.getLang('wordup_button.label'), icon: 'icon dashicons-dashboard’, onclick: function() { editor.insertContent( editor.getLang(‘wordup_button.msg’) ); } }); } ); })();

Page 63: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Dodatkowe przykłady

Dodawanie przycisków w trybie fullscreen

Kontrolka styleselect

TinyMCE w sekcji komentarzy

Wszystkie materiały: !

http://wp.dziudek.pl/kategorie/tinymce

Page 64: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Przykłady do Pobrania

Page 65: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Kontakt

• @dziudek

[email protected]

• wp.dziudek.pl

• zebymniezapomnial.tumblr.com

Page 66: Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław

Pytania?