Kategorie: tinymce

WordPress Plugin tinymce-templates-lite

15. Februar 2012 - tinymce, wordpress

Hier ist ein kleines Plugin, das der WordPress Konfiguration von tinymce das Template-Plugin  hinzufügt und eure Styles im Dropdown Menü anzeigt.

tinymce-templates

English Summary for „WordPress Plugin tinymce-templates-lite“:

This is a small plugin that extends the WordPress configuration of tinymce with the template plugin and displays your templates in the template dropdown.

Ich brauchte Templates in tinymce und die verfügbaren Plugins waren mir zu umfangreich und zu unpraktisch.

Bei dieser Lösung muss man seine Templates (*.htm oder *.html) nur in den Templates -Ordner des Plugins zu legen und kann sie dann in tinymce verwenden.

Hier ist ein Ausschnitt aus den wichtigsten Codezeilen.

Der Rest des Codes wird benötigt, um die Templates aus dem Ordner auszulesen und im Dropdown darzustellen.

if ( !class_exists( 'tinymce_templates_lite' ) ) {
class tinymce_templates_lite {
function tinymce_templates_lite() {
add_action( 'admin_head',array(&$this, 'tinymce_templates_lite_init'));
}
function tinymce_templates_lite_init() {
if (get_user_option('rich_editing') == 'true') {
add_filter('mce_external_plugins',array(&$this,'add_template_plugin'));
add_filter('mce_buttons',array(&$this,'register_template_button'));
add_filter('tiny_mce_before_init',array(&$this,'nf_tiny_init'));
}
}
public function register_template_button($buttons = array()) {
array_push($buttons, 'seperator','template');
return $buttons;
}
public function add_template_plugin ($plugin_array) {
$plugin_array['template']=plugins_url().'/tinymce_templates_lite/mce_plugins/plugins/template/editor_plugin.js';
return $plugin_array;
}
public function nf_tiny_init ($initArray) {
$tlist=array();
$get_temps=$this->get_templates();
$ww=count($get_temps);
if ($ww > 0) {
for ($i=0; $i<$ww; $i++) {
$expl=explode('.',$get_temps[$i]);
$tlist[]=array('title'=> $expl[0],'src'=>plugins_url().'/tinymce_templates_lite/templates/'.$get_temps[$i],'description' => $expl[0]);
}
$initArray['template_templates']=json_encode($tlist);
}
return $initArray;
}

Download tinymce_templates_lite

tinymce_templates_lite

WordPress + Google Font Faces in Tinymce Editor

7. Februar 2012 - tinymce, wordpress

Zu WordPress als Content Mangement System gehört auch ein Editor, mit dem man Seiten so stylen kann, wie sie später erscheinen sollen.
Wie ich Hintergrundbilder oder Hintergrundfarben im Editor darstelle, habe ich hier schon beschrieben. Jetzt geht es um Google Fonts. Dazu gibt es auch zwei Plugins, um alles mal auszuprobieren.
English summary for „WordPress + Google Font Faces in Tinymce Editor“:
A Short description  how to implement Google Font Faces in your tinymce editor and and plugins for download

Google Font Faces

Ich möchte hier die Schrift ‚Nobile‘ im Editor (wie auch auf dieser Webseite) verwenden.
Ausserdem soll sie im auch noch unter ‚Schriftname‘ ausgewählt werden können.

Der Code des Plugins sieht so aus:
if ( !class_exists( 'tinymce_add_google_fonts' ) ) {
class tinymce_add_google_fonts {
function tinymce_add_google_fonts() {
add_action( 'admin_head',array(&$this, 'tinymce_add_google_fonts_init'));
}
function tinymce_add_google_fonts_init() {
if (get_user_option('rich_editing') == 'true') {
add_filter('tiny_mce_before_init',array(&$this,'nf_add_google_fonts'));
}
}
public function nf_add_google_fonts ($initArray) {
$nf_stylesheet=trailingslashit( get_stylesheet_directory_uri() ) . 'css/editor/editor-style.css';
if (array_key_exists('content_css', $initArray) && !empty($initArray['content_css'])) $initArray['content_css'].=",".$nf_stylesheet;
else $initArray['content_css'] = $nf_stylesheet;
$initArray['theme_advanced_fonts'] = 'Nobile=Nobile,sans-serif;Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
return $initArray;
}
}
$tinymce_add_google_fonts = new tinymce_add_google_fonts();
}

Mit $initArray[‚content_css‘]=… wird eine neue css Datei für den Editor angelegt. Da drin  könnt ihr alles so stylen, wie ihr es wünscht. Die Datei liegt im Plugin unter stylesheets. Man muss an dieser Stelle etwas aufpassen, dass man bereits mit anderen Plugins eingefügte css Dateien nicht überschreibt.

$initArray[‚theme_advanced_fonts‘]=…  enthält alle verfügbaren Schriften. Wenn ihr hier nur die Nobile angebt, ist auch nur noch Nobile im Dropdown vorhanden. Daher sollte man die Standardschriften des Editors hinten anfügen.
Hier ist ein Auszug aus der editor-style.css

@import url("http://fonts.googleapis.com/css?family=Nobile");
body, td, pre {color:#000; font-family:Nobile,sans-serif; font-size:75%; margin:8px;}

Nobile wird als Standard festgelegt und per Import von Google geladen. So funktioniert das auch bei verschiedenen Browsern, weil Google stets die passenden Formate schickt.

Hier ist das Plugin tinymce_add_google_fonts zum Download

tinymce_add_google_fonts

Und hier noch ein Plugin um das Google Font  Nobile im Frontend einzufügen

Nobile

RIP RichText Widget

9. Juni 2011 - JavaScript, tinymce, wordpress

Seit ein paar Tagen habe ich mein Rich Text Widget Problem vom Hals. Der Kunde hat eine einfachere Lösung akzeptiert.

English Summary: Rest In Peace, Rich Text Widget… What to do, when a customer who runs a page-based site has fallen in love with his easy-to-use Text Widget and now asks for a better one with color and images and videos and …

I tried very hard to overcome the existing problems (see…) but without thorough help from WordPress all solutions only work with considerable compromises. Now I could talk the customer into a “loop”-based approach:  he writes a post with a special category (“sidebar, “teaser”, etc) which then is displayed  in the desired part of his webpage.

Die Probleme bei der Realisierung solch eines Widgets habe ich schon früher beschrieben ()

Sie betreffen nicht nur Widgets, die tinyMCE enthalten, sondern alle Javascript basierenden Widgets.

Die Hoffnung auf Hilfe von WordPress musste ich bald aufgeben. Auf meine Fehlermeldung im Forum kam nie eine Antwort und schon allein anzusehen, wie dort die Anfragen aus aller Welt fast im Sekundenbereich einlaufen ist deprimierend. Wer soll das alles lesen? Schon nach einem Tag ist die eigene Anfrage ein paar Hundert Plätze weiter nach unten gerutscht.

Ok, jetzt kurz die wohlbekannte „Loop“-Lösung: der Kunde schreibt einen Artikel mit seinem Standard-Editor und vergibt dabei eine Kategorie „sidebar“ oder „teaser“ oder …  und die paar Zeilen


<span style="font-family: courier new,courier;"><?php query_posts('category_name=sidebar');</span><span style="font-family: courier new,courier;">
 if (have_posts()) : while (have_posts()) : the_post();?>
 <div id="sidebar_info"><?php the_content();?>
 </div></span><span style="font-family: courier new,courier;"><?php endwhile; else : ?>
 <?php endif; ?></span>

erledigen den Job.

tinyMCE erweitern mit neues Styles

9. Juni 2011 - tinymce, wordpress

Für ein Projekt musste ich den tinyMCE um ein paar Stilvorlagen erweitern. Die Vorgehensweise möchte ich hier kurz aufzeigen. Damit es einfacher wird, kann man sich auch ein kleines Plugin herunterladen.

English Summary: if you want to configure the WordPress standard editor, tinyMCE,  you need to change just one array. That sounds easy. However: This array is huge and not without contradictions. Same is true for the documentation. In the following I want to show how to add some styles to the tinymce style-dropdown meue. For better understanding you may download a small plugin.

Tinymce wird über ein riesiges Array konfiguriert. Darauf kann man mit verschiedenen Methoden zugreifen:
mit jQuery, mit dem Plugin Tinymce Advanced oder mit WordPress Bordmitteln „add_editor_style(…)“ oder add_filter(‚tiny_mce_before_init‘,’name_of_function_you_have written’)

Um die Stilvorlagen im Hauptmenu anzuzeigen, schaltet man sich die benötigten  Dropdowns ( hier: Styles und Font Size für unterschriedliche Schriftgrößen ) am einfachsten mit dem Tinymce Advanced Plugin frei.

Beispiel: kiju_fliess soll ein Format sein, das auf beiden Seiten einen definierten Abstand zum Rand hat.

.kiju_fliess { padding: 0 15% 0 15%;}

Das Menü styles wird nun um den Eintrag Fliesstext=kiju_fliess erweitert. Tinymce trägt an allen markierten Textstellen die Klasse kiju_fliess ein, wenn „Fliesstext“ angewählt wurde.

Natürlich muss man im Frontend auch sein Seitenstylesheet (z.B. style.css) entsprechend erweitern 🙂

Wenn man die Auswirkungen der Formatierung gleich im Editor sehen möchte, kann man tinymce  ein zusätzliches Stylesheet mitgeben. Dieses Stylesheet liegt in diesem Beispiel im Plugin im Ordner stylesheets.

Das Plugin besteht nur aus den folgenden Zeilen:

if ( !class_exists( 'tinymce_add_styles' ) ) {
class tinymce_add_styles {
function tinymce_add_styles() {
add_action( 'admin_head',array(&$this, 'tinymce_add_styles_init'));
}
function tinymce_add_styles_init() {
if (get_user_option('rich_editing') == 'true') {
add_filter('tiny_mce_before_init',array(&$this,'nf_add_styles'));
}
}
public function nf_add_styles ($initArray) {
$initArray['theme_advanced_font_sizes'] = "8px=8px,10px=10px,12px=12px,14px=14px,18px=18px,24px=24px,36px=36px";
$initArray['theme_advanced_styles'] ="Überschrift_gross=kiju_sub_36,Überschrift_mittel=kiju_sub_24,Überschrift_klein=kiju_sub_18,Fliesstext=kiju_fliess";
$nf_stylesheet=plugins_url().'/tinymce_add_styles/stylesheets/editor-style.css';
if (array_key_exists('content_css', $initArray) && !empty($initArray['content_css'])) $initArray['content_css'].=",".$nf_stylesheet;
else $initArray['content_css'] = $nf_stylesheet;
return $initArray;
}
}
$tinymce_add_styles = new tinymce_add_styles();
}

Tinymce kann mit mehreren Stylesheets umgehen. Man muss nur aufpassen, dass man bestehende Einträge in $initArray[‚content_css‘] nicht überschreibt.

Achtung:

Ich hatte in diesem Fall den tinyMCE  ‚advanced’ . Es gibt noch einen zweiten erweiterbaren Style-Bereich im initArray:
$initArray[’style_formats‘]=….

Den sollte man aber nicht verwenden, da sich seine Einstellungen mit „advanced“ nicht vertragen. Nur zur Vollständigkeit: $initArray[’style_formats‘]= „[{title : ‚Fliesstext‘, block :’p‘,classses :’kiju_fliess‘}]“;

Hier könnt ihr das Plugin downloaden:  tinymce_add_styles

WordPress: farbige Hintergründe und Hintergrundbilder auf Seiten und im Editor

8. April 2011 - tinymce, wordpress

Der Kunde erstellt seine Seiten selbst und wünscht ein einfaches Verfahren für farbige Hintergründe und Hintergrundbilder auf seiner Website.

English Summary: Though WordPress claims to be a CMS, some basic functions are not yet supported. If a customer demands background color or background images on pages, you have to add some php functionality…

Manchem grausts, aber wenn der Kunde es so will: Farbe muß her und auch Bilder.

Die Lösung war: beim Anlegen einer Seite wird der Dialog bei „Seite erstellen“  um ein paar Felder für die Hintergrundfarbe, das Bild und die Behandlung des Bildes (kacheln z.B.) erweitert.

Wie das geht,  steht in diesem Artikel:

WordPress image uploaders in admin

Die Einstellungen speichere ich in einer eigenen Tabelle in der Datenbank, alternativ kann man das auch über die custom fields lösen.

Die Templates für die Seiten müssen nun so erweitert werden, dass beim Aufruf einer Seite per style Farben und Bilder passend ausgegeben werden. Dazu muß man im Template die richtige Stelle erwischen. Bei meinen Seiten war die: <div id=main ….. >.

An dieser Stelle wird die Funktion nf_background() aufgerufen. Sie holt die Informationen aus der Datenbank und verwandelt sie in style= Befehle für html.


<?php
 /*
  Template Name: Seite_ohne_Kommentare
  */
 ?>
 <?php
 get_header();
 $bg_style='';
 if ( function_exists('nf_background') ) {
  $bg_style=nf_background();
  //echo "<p> bg: $bg_style</p>";
 }?>
 <div id="main"<?php echo $bg_style;?>>
         <div id="col1">

Hier ist ein Listing dazu:


function nf_background() {
 global $wpdb;
 global $post;
 $bcolor=false;
 $bimage=false;
 $bimage_pos=false;
 $bimage_beh=false;
 $style_string="";
 $bcolor = $wpdb->get_var($wpdb->prepare("SELECT hintergrundfarbe FROM stueckinfo WHERE post_id = %s and valid='yes'",$post->ID));
 if (!empty ($bcolor)) {
 if (preg_match('/^[0-9A-Fa-f]{6}$/',$bcolor)) {
 $bcolor ="#".$bcolor;
 }

}
 $bimage = $wpdb->get_var($wpdb->prepare("SELECT hintergrund_bild_link FROM stueckinfo WHERE post_id = %s and valid='yes'",$post->ID));
 if (!empty ($bimage)) {
 $bimage_pos = $wpdb->get_var($wpdb->prepare("SELECT hintergrund_bild_position FROM stueckinfo WHERE post_id = %s and valid='yes'",$post->ID));
 $bimage_beh = $wpdb->get_var($wpdb->prepare("SELECT hintergrund_bild_behandlung FROM stueckinfo WHERE post_id = %s and valid='yes'",$post->ID));
 }
 if ((!$bcolor) && (!$bimage)) return "";
 $style_string="style=\"";
 if ($bcolor) $style_string .= " background-color: $bcolor; ";
 if (!$bimage) {
 $style_string .="\"";
 return $style_string; }
 else {
 $style_string .=" background-image: url($bimage);";
 if ($bimage_pos) {
 switch ($bimage_pos) {
 case 1:
 $style_string .= "background-position: top left;";
 break;
 case 2:
 $style_string .= "background-position: top center;";
 break;
 case 3:
 $style_string .= "background-position: top right;";
 break;
 case 4:
 $style_string .= "background-position: center left;";
 break;
 case 5:
 $style_string .= "background-position: center center;";
 break;
 case 6:
 $style_string .= "background-position: center right;";
 break;
 case 7:
 $style_string .= "background-position: bottom left;";
 break;
 case 8:
 $style_string .= "background-position: bottom center;";
 break;
 case 9:
 $style_string .= "background-position: bottom right;";
 break;
 }
 }
 if ($bimage_beh) {
 switch ($bimage_beh) {
 case 1:
 $style_string .= "background-repeat: no-repeat;";
 break;
 case 2:
 $style_string .= "background-repeat: repeat;";
 break;
 case 3:
 $style_string .= "background-repeat: repeat-x;";
 break;
 case 4:
 $style_string .= "background-repeat: repeat-y;";
 break;
 }
 }
 $style_string .="\"";
 return $style_string;
 }

}

So far, so good. Leider muß jetzt aber auch noch tinymce mitspielen, weil man sonst die Seiten nicht richtig gestalten kann. Dafür sorgt dann dieses jQuery Script:


jQuery(window).load(function () {make_my_background();
 });

jQuery(document).ready(function() {
 jQuery('#hintergrundfarbe').click( function() {
 make_my_background();
 });
 jQuery('#hintergrund_bild_link_uebernehmen').click( function() {
 make_my_background();
 });
 jQuery('#hintergrund_bild_position_uebernehmen').click( function() {
 make_my_background();
 });
 jQuery('#hintergrund_bild_behandlung_uebernehmen').click( function() {
 make_my_background();
 });
 });

function make_my_background() {
 if (jQuery('#valid').attr('checked')){ // Anzeige nur wenn das valid -Häkchen gesetzt wurde
 var tf=jQuery('#hintergrundfarbe').val();
 if (tf != '') jQuery('#content_ifr').contents().find("body#tinymce").css("background-color",tf);
 var ti=jQuery('#hintergrund_bild_link').val();
 if (ti != '') {
 ti="url("+ti+")";
 jQuery('#content_ifr').contents().find("body#tinymce").css("backgroundImage",ti);
 var tp=jQuery('#hintergrund_bild_position').val();
 if (tp != '') {
 var bpos='';
 tp *=1;
 switch (tp) {
 case 1: bpos="top left";
 break;
 case 2: bpos="top center";
 break;
 case 3: bpos="top right";
 break;
 case 4: bpos="center left";
 break;
 case 5: bpos="center center";
 break;
 case 6: bpos="center right";
 break;
 case 7: bpos="bottom left";
 break;
 case 8: bpos="bottom center";
 break;
 case 9: bpos="bottom right";
 break;
 }
 if (bpos != '') {
 jQuery('#content_ifr').contents().find("body#tinymce").css("backgroundPosition",bpos);
 //alert("bgpos: "+ bpos);
 }
 }
 }
 var tb=jQuery('#hintergrund_bild_behandlung').val();
 //alert("bg_tb: "+ tb);
 if (tb != '') {
 var bbeh='';
 tb *=1;
 switch (tb) {
 case 1: bbeh="no-repeat";
 break;
 case 2: bbeh="repeat";
 break;
 case 3: bbeh="repeat-x";
 break;
 case 4: bbeh="repeat-y";
 break;</span>

}
 if (bbeh != '') {
 jQuery('#content_ifr').contents().find("body#tinymce").css("backgroundRepeat",bbeh);
 //alert("bgbeh: "+ bbeh);
 }
 }
 }
 }

Die Hauptfunktion make_my_background()  ist wie die php Funktion aufgebaut, bezieht ihre Daten aber nicht aus der Datenbank sondern aus den oben erwähnten Zusatzfeldern, die ja beim Gestalten der Seite zur Verfügung stehen.

Interessant ist, wo man die Styles hinpacken muß:

jQuery('#content_ifr').contents().find("body#tinymce").css("background-color",tf);

jQuery(document).ready hat bei mir nicht funktioniert. Da war der tinymce iframe noch nicht anwesend, deswegen

jQuery(window).load(function ()

Die anderen Funktionen dienen dazu, dass man bei dynamisch veränderten Farben oder Bildern die Wirkung im Editor gleich beurteilen kann.

Und so könnte es  aussehen:

tinyMCE, flexibles Layout und Tabellen

25. Februar 2011 - tinymce, wordpress

Wenn eure Webseite ein flexibles Layout unterstützt und ihr in den Artikeln Tabellen einsetzen wollt, könnt ihr auch die Tabellen „flexibel“ machen.

Standardmässig werden die Tabellen von tinyMCE mit festen width und height Werten erzeugt.

Es reicht aus, wenn man die dritte Zeile so überschreibt:

Also:  width: 100%; height: 0%;

Zum Tabellendialog kommt man durch Markieren der Tabelle und anklicken des Tabellenicons