Kategorie: JavaScript

SuperBGImage-lite

22. Dezember 2011 - JavaScript, wordpress

Wenn Ihr browserfüllende Hintergrundbilder im Stil von SuperBGImage ( Autor: Andreas Eberhard) einsetzen wollt, aber die Diashow nicht benötigt: hier findet Ihr ein winziges Script, ein WordPress-Plugin und eine Demoseite dafür

English Summary for „SuperBGImage-lite“:

If you need full-screen images on your website in SuperBGImage-style but without the overhead of the slideshow, here is a small-footprint script, an optional wordpress plugin and a demo page.

WordPress User:

  1. Website vorbereiten:
    Wir brauchen einen  action hook ‚body‘  im Header direkt nach dem <body> tag;

    <body>
    <?php do_action('body'); ?>
    

    Wenn ihr schon einen action hook habt (z.B. beim xtreme Framework) könnt ihr diesen verwenden und müsst dann nur im php File des Scripts die Zeile 12 anpassen.

  2. Das Tag, mit dem euer Content beginnt, muss modifiziert werden, damit der Content über dem Bild schwebt:
    <body>
    <?php do_action('body'); ?>
    <div id="content>
    ...
    

    vorher kann es z.B. so aussehen

    <body>
    <?php do_action('body'); ?>
    <div id="content" style="position: relative;z-index: 3;">
    ...
    

    nachher dann so

  3. Legt eure Bilder in das image Verzeichnis vom Plugin. Wenn mehrere Bilder vorhanden sind, wählt das Plugin eines davon zufällig aus.

Non WordPress User

Download  plugin, unzip und Bild und den js Code (start_BGimage.js) so in eure Seite integrieren, wie es der Codeview der Demopage anzeigt

Die Demo page ist hier

Download plugin SuperBGImage-lite

Download: Testplugin für ajax Frontend (nopriv) Request in WordPress

2. Dezember 2011 - JavaScript, wordpress

Weil zur Zeit einige Verwirrung herrscht, was in WordPress  mit ajax im Frontend möglich ist, habe ich ein kleines Plugin geschrieben, das ihr hier runterladen, installieren und austesten könnt.

English Summary for „Download: Testplugin für ajax Frontend (nopriv) Request in WordPress“:

This is a small WordPress Plugin to demonstrate the use of ajax on the viewer side. You are free to download and test it or use it as a basis for your own implementations. Because WordPress  doesn’t support viewer- or front-side ajax with user-logged-in: logout from the dashboard, otherwise you get a „0“ result in the alert box.

Das Plugin besteht nur aus zwei Dateien:

1. der ajax_test.php


if ( !class_exists('abc') ) {

class abc {

function abc() {
add_action('wp_enqueue_scripts', array ('abc','my_scripts'),6);
add_action('wp_ajax_nopriv_cb123', array ('abc','cb123'),5);
}
function my_scripts() {
wp_register_script('xyz', plugins_url().'/ajax_test/js/ajaxtest.js', array('jquery'),false,true);
wp_enqueue_script('xyz');
wp_localize_script('xyz', 'ajaxdata', array( 'ajaxurl' => admin_url( 'admin-ajax.php'),'akt_nonce' => wp_create_nonce('foo'),'action' => 'cb123' ));
}
function cb123() {
global $wp_filter;
check_ajax_referer('foo');
echo "results of wp_filter: \n";
print_r ($wp_filter['wp_ajax_nopriv_cb123']);
echo "\nresults of has_action (prio): ".has_action('wp_ajax_nopriv_cb123', array ('abc','cb123'))."\n";
die();
}
} // End Class
$abc = new abc();
}

Der Name der Klasse ist ‚abc‘, die Methode, die von ajax aufgerufen wird ist ‚cb123‘. In cb123 wird über print_r der Teil des arrays wp_filter angezeigt, der von add_action(‚wp_ajax_nopriv_cb123‘,… in WordPress registriert wird.

Danach wird das Ergebnis von has_action(…) angezeigt. Den Rückgabewert der Funktion has_action() kann man auch ganz gut zum Testen verwenden um zu kontrollieren,  ob die Action richtig registriert wurde.

Hier seht ihr in der alertbox z.B.  die Priorität (5) und die Komponenten für den Callback , also die Klasse und die Methode.

2. ajaxtest.js


jQuery(document).ready(
function()
{
var data = {
action: ajaxdata.action,
_ajax_nonce: ajaxdata.akt_nonce
};
alert("ajaxtest");
var sendimage=jQuery.Deferred();
var mytimer=setTimeout(loadImage,1000);

function loadImage() {
alert('Hi : '+ ajaxdata.ajaxurl + ' ' + ajaxdata.action);
sendimage=jQuery.post(ajaxdata.ajaxurl,data);
jQuery.when (sendimage)
.then (
function (response) {
alert(response);

},
function (response) {
alert("error :"+ response);
}
);
}
})

Hier ist noch ein kleiner Timer eingebaut, der aber nicht wichtig für das Ergebnis ist.
ajaxtest.js verwendet das promise() Interface von jQuery, was die Programmierung nach meiner Ansicht deutlich vereinfacht.

Achtet darauf, dass ihr beim Testen nicht als Benutzer eingeloggt seid, weil WordPress  keine Front-End ajax requests mit eingeloggten Usern unterstützt. Der response ist dann schlicht ‚0‘. Warum? Man weiss es nicht…

Plugin ajax_test zum Downloaden

ajax_test

FancyBox for WordPress

10. November 2011 - JavaScript, wordpress

Fancy Box von Janis Skarnelis ist eine freundliche Alternative zur immer etwas düster wirkenden Thickbox und zur tristen Darstellung von Bildern in einem eigenen Browser-Fenster:

Wenn ihr es einsetzt (z.B. als Plugin), werden möglicherweise nicht alle Bilder auf eurer Webseite gefunden.

English Summary: If you are using FancyBox by Janis Skarnelis on your website, be careful to include images the right way. Always us „File URL“, otherwise FancyBox will ignore your image on your page. „Post URL“ creates a rel= element that keeps FancyBox from touching it because it has to write it’s own rel element (rel=“fancybox“) and won’t overwrite an existing element and the third option („no URL“) doesn’t create the necessary <a href…> .

Grund dafür ist die Art und Weise, wie Ihr ein Bild in die Seite integriert:

Keine“ URL:  es wird kein <a href…> Tag erzeugt; das Bild wird von FancyBox ignoriert

Artikel-URL„: das <a href Tag …> bekommt zusätzlich das Element rel=“attachment…“ und wird ebenfalls von FancyBox ignoriert. FancyBox muss rel=“fancybox“ an die Bilder anfügen und ist bei einem schon vorhandenen „rel=“  sehr vorsichtig. Find ich ganz gut.

Datei-Url„: nur wenn diese Option ausgewählt ist, wird FancyBox das Bild darstellen.

Komplexe Formulare, rekursives Ajax und promise() Interface

21. Oktober 2011 - HTML, JavaScript

Nehmen wir mal an, dass ihr auf auf eurer Webseite ein komplexes Formular habt (Beispiel: order.php), in dem viel geprüft (Spam, Adressen…) werden muss, was die Wahrscheinlichkeit erhöht, dass das Formular mehrfach zwischen Client und Server hin- und hergeschickt wird. Nun möchtet ihr dieses Formular  ohne Änderungen an mehreren Stellen eurer Webseite aufrufen können, ohne dass der Benutzer die aktuelle Seite verlassen muss.

Hier ist eine Lösung dafür.

English Summary: If you want to call a complex form page (order sheet, inquiry form,…) from several locations inside your website without the need to follow a link to that form page, here is a solution using recursive Ajax, UI-Dialog und the jQuery promise interface.

Dieses kurze Javascript sorgt dafür, dass euer Formular richtig ausgefüllt wird. Bei Fragen: bitte Kommentar schicken.

jQuery(document).ready(
function()
{

jQuery(".****class der Elemente, die das Formular aufrufen können****").click(
function()
{
var sendpost=jQuery.Deferred();
function send_post_req ()
sendpost=jQuery.post(order.php);
}
function show_post (response) {
clean_up();
jQuery("***id des Elements auf der Seite, nach dem eingefügt werden soll***").append('<div id="**ID des Formulars****" style="display: none;">'+response+'</div>');
}
function clean_up () {
jQuery("**ID des Formulars****").remove();
}

function add_submit () {
jQuery("form #**** ID eures Submit-Buttons****").click ( function (e) {
e.preventDefault;
var ser2=jQuery('form').serialize();
sendpost=jQuery.post(order.php, ser2);
proc_post();
});
}
function add_dialog ()
jQuery("**ID des Formulars****").dialog({
width: 600,
resizable: true,
title: 'Einfache Bestellung',
position: 'center',
close: function(event, ui) { clean_up();
}
});

}
send_post_req();
proc_post();
function proc_post() {
jQuery.when (sendpost)
.done (function (response) {
show_post (response);
add_dialog();
add_submit();
});
}
});
});

Zunächst werden einige Funktionen definiert:
send_post_req:  Post-Request; damit holen wir den Inhalt eurer Formular-Seite zum ersten Mal
show_post:  damit wird der Inhalt  im DOM der aktuellen Seite unsichtbar angelegt
clean_up:  damit wird dieser Inhalt bei Bedarf wieder entfernt
add_submit:  übernimmt den Submit-Button und schickt das Formular an den Server zurück
add_dialog:  stellt den Inhalt des Formulars in einem UI-Dialog auf der Seite dar.
proc_post:  bindet alle Funktionen zusammen und nutzt das promise Interface von jQuery.

Gestartet wird in das Ganze in der Zeile 39.

Die Zeile 25 sorgt für das rekursive Abarbeiten, wenn das Formular mehrmals zwischen Server und Client hin- und hergeschickt werden muss.

Damit proc_post nicht schon verfrüht losfeuert, wird in Zeile 8 ein Deferred Objekt (sendpost) erzeugt, auf das proc_post warten muss.  Dieses Objekt wird in send_post_req überschrieben, so dass proc_post jetzt auf den Ausgang der Ajax-Anfrage wartet.

Die zweite Ajax-Anfrage in add_submit schickt beim Anklicken den mit einem zweiten Parameter serialisierten Inhalt eures (hoffentlich vom Benutzer ausgefüllten) Formulars  an den Server.  Dabei wird das „resolved“ Deferred sendpost überschrieben und wieder aktiviert.

Für die wenigen, die es noch nicht wissen:  jQuery und Javascript kann man prima und ohne Formalitäten bei jsFiddle austesten.

Wenn ihr mit einem Content-Management System arbeitet, werdet Ihr in der Regel keine Seite „order.php“ haben, weil dort die Seite erst auf Anforderung vom CMS zusammen gebaut wird .

Im Falle CMS=wordpress kann man so vorgehen:

Der Post-Request muss etwas modifiziert werden (Doku hier)


var nf_data = {
action: 'order',
_ajax_nonce: MyAjax.akt_nonce
};
sendpost=jQuery.post(MyAjax.ajaxurl, jQuery.param(nf_data));

MyAjax.ajaxurl ist die Seite, die den Request erhalten soll: admin-ajax.php. Wo sie im Verzeichnisbaum liegt, muss dem Script über


wp_localize_script('simple', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php'),
'akt_nonce' => $this->nonce) );

mitgeteilt werden. Zusätzlich  wird noch ein Nonce  zum Überprüfen des Requests  mitgegeben.

action: ‚order‘ ist eure callback-Funktion (hier:“order“), die von admin-ajax.php aufgerufen wird und das Formular erzeugt.

Der zweite Post-Request sieht so aus:


var ser2=jQuery('form').serialize();
var ser=jQuery.param(nf_data);

sendpost=jQuery.post(MyAjax.ajaxurl, ser+'&'+ser2 );

Zum besseren Verständnis könnt Ihr den Original Code hier downloaden:  Template einfacher_bestellen

Denkt bitte daran: das Plugin muss für eure Zwecke noch modifiziert werden. Der Code für das Formular ist z.B. in einer Klasse enthalten, die in der Webseite an anderer Stelle definiert und hier nicht beigefügt wird.
Einige Teile des jQuery Codes sind formularspezifisch (z.B. wird das Formular über „form.yform“ gefunden).

redirect von einer WordPress admin page auf eine andere

20. September 2011 - JavaScript, wordpress

Es funktionierte einfach nicht. Immer wieder diese  „Warning: Cannot modify header information – headers already sent by …“ . Dann ging es doch….

English Summary: I wanted to redirect from on wordpress admin page to another one, but all the classical php and wordpress functions failed. Then JavaScript came in.

Ausprobiert hatte ich

  • header(‚Location: <?php echo admin_url(‚edit.php?post_type=page&page=…..
  • header(‚Location: …. URL mit  „&noheader=true“ am Ende
  • wp_redirect (admin_url(‚ ….
  • wp_redirect(  URL mit  „&noheader=true“ am Ende

Die Meldung ging aber nicht weg.

Die Lösung, ein kleines Javascript, fand ich hier


<script type="text/javascript">
window.location = '<?php echo admin_url('edit.php?post_type=page&page=... ?>';
</script><?php

IE7 z-index bug in WordPress Menüs

14. September 2011 - HTML, IE7, JavaScript, wordpress

Wenn ihr den IE7 noch unterstützen müßt und lange (mehrreihige) WordPress Menüs habt: hier ist eine Hilfe gegen den z-index bug von IE7.

English Summary: The following is dedicated for people who have to support IE7 and encounter the z-index bug in their wordpress menues.

Über den z-index bug vom IE7 ist ja schon viel geschrieben worden, z.B. hier. Wenn das Menü nur unter den nachfolgenden Content rutscht, kann man sich durch Vergabe eines z-index per style.css für den Container, der das Menü enthält, behelfen.

Anders ist es leider, wenn man eine Webseite untersützen muss, deren Redakteure gerne viele Toplevel Menüeinträge generieren. Auf einmal wird das Menü mehrzeilig.

Für moderne Browser ist dies kein Problem. Für den IE7 schon. Der aufgeklappte Inhalt des ersten Menüpunktes rutscht hier unter einen Menüpunkt in der zweiten Zeile. Folge: das Menü ist nicht mehr funktionstüchtig.

Jetzt hilft leider keine style.css weiter. Die einzige Möglichkeit ist, jedem Menüpunkt der obersten Ebene einen passenden z-index zu verpassen: der erste Menüpunkt bekommt den höchsten z-index, der zweite den zweithöchsten usw.

Da das Menü dynamisch ist, kann man das nur mit einem JavaScript hinbekommen.

Zum Glück ist es sehr kurz 🙂

jQuery(document).ready(
function()
{
var maxzindex=2000;
jQuery('#access > .menu > ul > li').each(function(index,value) {
jQuery(this).css("z-index",maxzindex-index);
});
});

#access > .menu > ul > li ist bei meiner Webseite der eindeutige Pfad zu den Top-Level
Menüs. Sie erhalten die z-indizes 2000, 1999, 1998 usw.

Einbinden kann man script z.B. so:


<!--[if IE 7]>
<script type='text/javascript' src='<?php bloginfo('template_directory'); ?>/js/patch_menue_ie7.js'></script>
<![endif]-->

Und wenn man alles richtig gemacht hat, sieht es dann so aus:

WordPress und JQuery-UI-datepicker

7. September 2011 - HTML, JavaScript, wordpress

Die Integration von datepicker in eine WordPress Seite mit einem Datumsfeld ist sehr einfach.

English Summary:  “ The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input’s value.“ jquerui.com

Folgende Elemente vom datepicker müssen von jquery.com ins Plugin geladen werden.

  • jquery.ui.datepicker.js
  • jquery-ui-1.8.16.custom.css
  • alle Bilder
  • die Anpassung an das deutsche Datumsformat von http://jquery-ui.googlecode.com/svn/trunk/ui/i18n/jquery.ui.datepicker-de.js

Dazu benötigt man noch den jquery-ui-core, der ist aber in WordPress bereits vorhanden.

Die JavaScript Datei zum Init vom datepicker sieht dann etwa so aus:

jQuery(document).ready(function()
{jQuery('.nf_datum').datepicker();

jQuery(function($){
 $.datepicker.regional['de'] = {
 closeText: 'schließen',
 prevText: 'zurück',
 nextText: 'Vor',
 currentText: 'heute',
 monthNames: ['Januar','Februar','März','April','Mai','Juni',
 'Juli','August','September','Oktober','November','Dezember'],
 monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
 'Jul','Aug','Sep','Okt','Nov','Dez'],
 dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
 dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
 dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
 weekHeader: 'Wo',
 dateFormat: 'dd.mm.yy',
 firstDay: 1,
 isRTL: false,
 showMonthAfterYear: false,
 yearSuffix: ''};
 $.datepicker.setDefaults($.datepicker.regional['de']);
 });   .....................................

In diesem Fall wird der datepicker an alle input Felder mit der Klasse „nf_datum“ gebunden.

WordPress Plugin: Google Maps V3 mit Markern und Polylines

3. September 2011 - JavaScript, wordpress

Nachtrag 14.8.2012

Google Maps V3 funktioniert auch ohne Schlüssel für bis zu 25000 Abrufe am Tag.
Ein falscher (z.B. alter V2 Schlüssel) führt zu einem Sperren des Dienstes.

Hier ist ein Schnellbauksten mit allen Quelldateien zum Runterladen für die, die Google Maps mit eigenen Bildern und Wegmarkierungen verbessern wollen

English Summary: If You need Google Maps showing Your own markers and polylines: here is a quick assembly kit

Benötigt werden nur:

  • die Bilder (Marker), die ihr anzeigen lassen wollt, am besten im png Format
  • die Koordinaten für die Bilder und Strecken
  • etwas Mut, ein vorhandenes JavaScript Programm zu verändern

Zunächst müßt ihr in der quickmaps.php folgende Zeile suchen und euren Google Key zwischen die Hochkommas eintragen:

$maps_text=$this->nf_enqueue('googlemaps','http://maps.google.com/maps/api/js?sensor=false&
language=de&v=3.1&key='******euer Google Key');


Die Hauptarbeit macht das (selbsterklärende 😉 ) JavaScript quickmaps_init.js:

jQuery(window).load(function () {

map_initialize();

});
function map_initialize() {
    var latlng = new google.maps.LatLng(49.31681,8.43885);
    var myOptions = {
      zoom: 15,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
	var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	var image= my_param.google_img_url+'logo_passend.png';
	var parkplatz= my_param.google_img_url+'parkplatz_passend.png';
	var latlngparkpl = new google.maps.LatLng(49.31450,8.44450);
	var marker = new google.maps.Marker({
	position: latlng,
	map: map,
	icon: image
	 });
	var markerparkpl = new google.maps.Marker({
	position: latlngparkpl,
	map: map,
	icon: parkplatz
	 });

var parkplatzweg = [
    new google.maps.LatLng(49.31450,8.44450),
    new google.maps.LatLng(49.31500,8.44450),
    new google.maps.LatLng(49.31500,8.44250),
    new google.maps.LatLng(49.31600,8.44170),
    new google.maps.LatLng(49.31670,8.44150),
    new google.maps.LatLng(49.31650,8.43900),
    new google.maps.LatLng(49.31681,8.43885)
  ];

var vomparkplatz = new google.maps.Polyline({
    path: parkplatzweg,
    strokeColor: "#FF0000",
    strokeOpacity: 0.4,
    strokeWeight: 2
  });
  var bahnhofsweg = [
    new google.maps.LatLng(49.32470,8.42870),
    new google.maps.LatLng(49.32340,8.42881),
    new google.maps.LatLng(49.32210,8.4295),
    new google.maps.LatLng(49.31900,8.431400),
new google.maps.LatLng(49.3174,8.4314),
    new google.maps.LatLng(49.31728,8.43885),
    new google.maps.LatLng(49.31681,8.43885)
  ];

var vombahnhof = new google.maps.Polyline({
    path: bahnhofsweg,
    strokeColor: "#0000FF",
    strokeOpacity: 0.4,
    strokeWeight: 2
  });

  vomparkplatz.setMap(map);
  vombahnhof.setMap(map);

Ok, es sieht erstmal schlimm aus, aber eigentlich ist es nicht schwer.
In Zeile 7 wird ein Koordinatenobjekt erzeugt. Das wird das Zentrum der Karte und hier sitzt das Bild aus Zeile 15.
In den Zeilen 16 und 17: noch eine Koordinatenobjekt und noch ein Bild.

Alle Koordinaten in den ….. LatLng(49.31681,8.43885) müßt ihr durch eure Werte ersetzten.

Ebenso die Bilder z.B. in
my_param.google_img_url+’logo_passend.png‘;
Die Zeilen 18-27 passen die Bilder in die Karte ein, die mit der Zeile 13 erzeugt wurde.
Im Rest der Datei werden Linien definiert und angezeigt.
Am Ende vom Artikel seht ihr, wie das ganze aussieht.

Gestartet wir das Ganze dann mit einem shortcode in eurem Artikel oder auf euerer Seite (aber OHNE die Leerzeichen hinter [ und vor ] !!!!!)
[ quickmaps ]
in der Größe 700×700 Pixeln oder wenn ihr andere Kartengrößen braucht mit
[ quickmaps width=300px height=400px ]
für eine 300px x 400px Karte.

Hier  könnt ihr das gesamte Plugin runterladen

und so sieht es dann aus:

JQuery UI dialog in WordPress

23. August 2011 - JavaScript, wordpress

Für ein eiliges Kundenprojekt mußten  die Sponsoren eines gespendeten Fahrzeugs auf der Sponsorenliste hervorgehoben werden. Standard war bei der Sponsorengruppe: per Popup. Ich habe mich dann für den jQuery UI dialog entschieden und hier sind meine Erfahrungen dazu.

English summary: In the following I wrap up my experiences with jQuery UI dialog in a WordPress environment.

Solide Grundlage zur Lösung der Anforderung ist wie oft ein Plugin. Hier bringt man den php Code unter und kann die Javascript Programme so eintüten, dass sie nicht auf jeder Seite geladen werden.

Die ersten Zeilen des Plugins sehen etwa so aus:


if ( !class_exists('xxxxSponsoren') ) {
class xxxxSponsoren{
         function xxxxSponsoren() {
                add_action('wp_print_scripts', array (&$this,'sponsoren_scripts'));
                add_action('wp_print_styles', array (&$this, 'sponsoren_styles'));

         }
         function sponsoren_scripts() {

           if (is_page('sponsoren')) {
             wp_register_script('show_sponsoren', WP_PLUGIN_URL.'/sponsoren/js/show_sponsoren.js', array('jquery', 'jquery-ui-core', 'jquery-ui-dialog'),false,true);
             wp_enqueue_script('show_sponsoren');
          }
         }
         function sponsoren_styles() {
            if (is_page('sponsoren')) {
              wp_register_style('nf_dialog',WP_PLUGIN_URL.'/sponsoren/css/jquery-ui-1.8.16.custom.css');
              wp_enqueue_style('nf_dialog');
           }
         }
.....

Die grundlegenden Javascript Dateien jquery , jquery-ui-core, jquery-ui-dialog sind in WordPress vorhanden und werden automatisch in die Seite inkludiert, wenn man beim Registrieren der eigenen js Datei (hier: show_sponsoren.js) die Abhängigkeiten angibt.

Seltsamerweise trifft das für die Stylesheets nicht zu, und ohne diese ist das Ergebnis sehr schrecklich und entmutigend.  Das WordPress Stylesheet zum UI Dialog ist vollkommen unbrauchbar. Im Internet gibt es verschiedene Quellen , z.B. http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css oder auch Einzelhinweise zum css.

Um es kurz zu machen: man braucht

  • das gesamte css zu UI und nicht nur das für den Dialog (d.h. anstelle von 3k css 32k css)
  • und alle icons dazu (sonst sieht es ebenfalls schrecklich und entmutigend aus)

Am Ende habe ich mir von http://jqueryui.com/ das gesamte Bundle geholt und das css mitsamt den Icons lokal im Plugin abgelegt; die Version ist  jquery-ui-1.8.16.custom.css

Netterweise sah das Ergebnis bei jedem css Versuch anders aus. Im letzten Fall ist der Dialog orange. Wenn man gezielt ein css-Theme auswählen möchte, sollte man das css von Google holen. Dort sind alle Themes erhältlich. Das „Orangene“ ist ui-lightness 🙂

Der Rest ist einfacher: man legt die anzuzeigenden Daten unsichtbar mit display: none und einer passenden id (hier: id=“spon_li“) auf der Webseite ab und braucht dann nur noch ein kurzes js Script (hier:show_sponsoren.js)


jQuery(document).ready(function() {
     jQuery("[title*=danken]").click(function() {
     jQuery("#spon_li").dialog({
        width: 600,
        resizable: true,
        title: 'Die Sponsoren für unseren neuen Transporter',
        position: 'center'
});

return false;
});

In der zweiten Zeile wird ein Bild gesucht (und hoffentlich auch  gefunden), dessen ‚title=‘ den String „danken“ enthält. Wenn man auf dieses Bild clickt wird der Dialog aktiviert, hier mit Optionen wie einem Titel, einer Position usw.

ältere Webseiten mit CSS Navigation: Abreißen oder Modernisieren

28. Juli 2011 - HTML, JavaScript, wordpress

Unter Kollegen gab es kürzlich die Diskussion,  wie man bei vorhandenen und älteren Webseiten die Navigation verbessert. Abreißen und durch ein JavaScript Plugin ersetzen oder modernisieren?

Eine Fraktion war die „nimm doch superfish oder ….  und dann hast du keinen Ärger mehr“, die andere Fraktion war eher nachdenklich. Durch ein aktuelles Projekt etwas schlauer geworden, gehörte ich auch zu den nachdenklichen.

Fakt ist wohl, dass die JavaScript-Navigations Plugins auch nur mit Wasser (=CSS) kochen und JavaScript lediglich zum Vorbereiten und Verbessern der HTML Struktur der Navigation benutzen. Natürlich fügen sie den Menüs auch noch ein paar Effekte hinzu. Die Hauptarbeit (90%) wird aber immer noch über CSS erledigt.

Wenn man eine vorhandene CSS Navigation mit sicherlich einigen Dutzend Zeilen CSS durch ein „fertiges“ JavaScript Produkt ersetzt, das eigene, völlig neue  CSS Dateien mit wiederum einigen Dutzend Zeilen CSS benötigt, ist dies wie ein Neuanfang. Man versteht zunächst nichts und es funktioniert auch erstmal nichts.

Deshalb, und weil ich auch nicht unbegrenzte Zeit habe und auch nicht unbegrenzte Lust, wieder da anzufangen, wo ich vor drei Jahren schon mal stand, plädiere ich für das behutsame Modernisieren:

Belasse die CSS Struktur wie sie ist und ändere gezielt über JavaScript.

Ein Beispiel dafür ist dieser Artikel.

Wenn man neu anfängt, sollte man das beste und flexibelste Tool auswählen oder auf das vertrauen, was einem ggf. sein Framework anbietet 🙂