Mit Prototype Ajax Request ausführen wenn Seite geladen über document.ready – dom loaded function

8. Juli 2010 at 20:31

Ihr möchtet in Prototype ein Ajax-Request nach dem vollständigen Laden der Seite abschicken, habt allerdings kein Zugriff auf den Body-Tag?

Der traditionelle Weg ist den Java-Script-Aufruf vor dem schließenden Body-Tag zu setzen, gelegentlich hat man allerdings nicht immer Zugriff auf diesen, z.B. bei dem Aufruf einer Template-File eines CMS, eCommerce-System oder ähnlich.

Bei Prototype ist es möglich das über den Observe zu machen, z.B. so:

<code>Event.observe(window, 'load', function() {
.. do stuff ..
});</code>

Das Problem ist allerdings dass mit dieser Methode der Anwender warten muss bis das komplette Dokument inkl. aller Bilder und anderen Content geladen ist. Erst dann kann er auf der Seite interagieren. Die meisten Benutzer wollen allerdings nicht warten und gleich mit der Interaktion starten.

Hier ist die Prototype implementation des document.ready mit genauer Erläuterung der Funktionalität.

Hier ein kurzes Beispiel:

<script>
document.observe("dom:loaded", function() {
 myFunction();
 });
</script>

Jquery has a handy way of allowing you to do stuff as soon as the document object model for a page has loaded (ie. as soon as the browser has loaded all your markup). I’m currently working on a project that requires Prototype JS, and I had some difficulty finding the equivalent method.. hence this post.

I knew Prototype had evolved somewhat since I’d last used it extensively back in late 2006, and I also suspected they had implemented something similar.. but Google was not forthcoming.

The traditional way to do this (pre jQuery) was to put your javascript directly before the closing body tag. This way the browser is unable to execute it prior to loading the rest of the page. However this is kind of clunky if you are trying to abstract your javascript to a linked file, or would like to keep your behavioral code (javascript) separate to your markup (xhtml).

An alternative is to use the onload event – in Prototype you would use something like

Magento: Methoden von Klassen ausgeben

2. Juli 2010 at 15:27

magento ecommerce logoManchmal ist es ganz hilfreich sich alle verfügbaren Methoden einer Klasse ausgeben zu lassen, das könnt ihr mit der folgenden Funktion:

<style type="text/css">
body { font-family: arial;font-size: 0.9em;}
</style>
<?php
function out_methods($class) {
echo '<p><strong>'.$class.'</strong><br>';
$methods = get_class_methods($class);
sort($methods);
foreach($methods as $k => $v) {
echo "[$k] => $v <br>";
}
echo '</p><hr>';
}
require_once 'app/Mage.php';
out_methods('Mage_Catalog_Model_Product');
out_methods('Mage_Catalog_Model_Category');
?>

6 reguläre Ausdrücke zur effizienten Webentwicklung

30. Juni 2010 at 12:34

Bei der Programmierung sind reguläre Ausdrücke ein sehr nützliches Werkzeug zur Validierung oder beim Suchen- und Ersetzen von Textmustern. In diesem Artikel habe ich 6 unglaublich nützliche reguläre Ausdrücke zusammengestellt.

URL validieren

Ist eine bestimmte URL gültig? Der folgende regex hilft euch weiter um dies zu überprüfen.

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \?=.-]*)*\/?$/

Prüfen ob Password sicher

Schwache Passwörter werden sehr schnell gehackt. Der folgende regex prüft das Passwort nach folgenden Kritierien :

  • Passwords hat mind 1 Großbuchstaben
  • Passwords hat mind 1 Kleinbuchstaben
  • Passwords hat mind. 1 Nummer oder Sonderzeichen
  • Passwords ist mind. 8 Zeichen lang
  • Password-Länge ist nicht begrenzt
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$

Ist im GET-Code ein <?php and ?>

Wenn Sie aus irgendeinem Grund wissen müssen ob im Code ein <?php oder ?>-Tags enthalten sind, so erledigt  dies der folgende Regex:

<\?[php]*([^\?>]*)\?>

Nicht geschlossene img-Tags finden

Wie Sie wissen erfordert der XHTML-Standard das alle Tags richtig geschlossen werden. Dieser reguläre Ausdruck hilft geschlossene img-Tags zu suchen. Dieser kann leicht modifiziert werden, um anderen nicht geschlossene HTML-Tags zu finden.

</div>
<div dir="ltr">
<img([^>]+)(\s*[^\/])>
</div>
<p dir="ltr">

CSS Attribute finden

Diese regex findet CSS-Attribute, wie background:red; oder padding-left: 25px;.

</div>
<div dir="ltr">\s(?[a-zA-Z-]+)\s[:]{1}\s*(?[a-zA-Z0-9\s.#]+)[;]{1}</div>
<div dir="ltr">

IBAN validieren

Mit dem folgenden Regex könnt ihr eine IBAN auf Gültigkeit prüfen.

[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}([a-zA-Z0-9]?){0,16}

HTML5Rocks – HTML5 Tutorial Seite von Google

29. Juni 2010 at 15:00

Google hat eine Seite Namens HTML5Rocks ins Netz gestellt. Dort befinden sich Präsentationen und Tutorials rund um das Thema HTML5, mit vielen Beispielen welche ausgiebigen Gebrauch von neuen HTML5-Funktionen machen.

Mit HTML5 werden viele neue Technologien eingeführt. Auf der Projekt-Seite HTML5Rocks möchte Google diese erläutern und Entwickler so dazu bringen, schneller Gebrauch von den neuen Möglichkeiten zu machen, die bereits heute in einigen Browsern (z.B. Safari, Firefox) zur Verfügung stehen.

Derzeit stehen neun Tutorials rund um HTML5-Techniken zur Verfügung. Sie erklären beispielsweise, wie eine Applikation offlinefähig gemacht wird, wie der Aufenthaltsort eines Nutzers ermittelt wird oder Dateien von der lokalen Festplatte des Nutzers gelesen werden. Zudem gibt es Tipps, wie sich Webapplikationen mit HTML5 schneller machen lassen, Nachrichten auf den Desktop des Nutzers geschickt werden oder wie Chromes Entwicklerwerkzeuge verwendet werden.

Google bietet ebenfalls eine Playground genannte Sandbox an, in der neue APIs und CSS-Eigenschaften von Browsern ausprobiert werden können.

< i > vs < em >

4. Juni 2010 at 20:55

XHTML

Um ein Text kursiv zu formatieren gibt es die Tags <i> und <em>. Gerade für die für die Suchmaschinen-Optimierung gibt es hier ein signifikanten Unterschied.

Bei der rein grafischen Ausgabe unterscheiden sich die beiden Tags nicht. Wird die Webseite allerdings maschinell ausgelesen (z.B. Screenreader oder Google-Bot), so wird der Unterschied deutlich. Der Tag <i> formatiert eine Textpassage lediglich kursiv. Bei der Benutzung eines Screenreaders  wird das formatierte Wort normal ausgesprochen. Bei der Verwendung des <em> Tags wird das Wort nicht nur kursiv formatiert, sondern von einem Screenreader auch speziell ausgesprochen.

Vor allem bei der Erstellung barrierefreier Webanwendungen spielt das <em> Tag eine besondere Rolle. Google stuft das <em> Tag besser ein als das <i> Tag. Daher ist die Empfehlung nach Möglichkeit nur <em> Tags innerhalb der Website zu verwenden.

Struktur und Dokumentation von CSS-Dateien

4. Juni 2010 at 19:52

css datei

Als Webdesigner und -Entwickler stößt man häufig über die Problematik große CSS-Dateien ordentlich zu strukturieren und zu dokumentieren, ggf. diese sinnvoll auf mehrere Dateien aufzuteilen.

Ohne eine vernünftige Struktur und Dokumentation kommt spätestens bei der Anpassung das böse Erwachen.

Vor allem bei Projekten an denen mehrere Personen arbeiten ist eine sinnvolle Struktur & Dokumentation unerlässlich.

Dieser Artikel soll daher Möglichkeiten der Strukturierung und Dokumentation von CSS Dateien aufzeigen.

Struktur

Für die Strukturierung gibt es mehrere Vorgehensweise, ich selbst habe mich nach jahrelanger Entwicklung dazu entschieden im ersten Schritt die CSS-Datei wie folgt in folgende Bereich zu gliedern:

  • #header
    • #header_logo
    • #header_navigation
  • #banner
  • #main
    • #main_navigation
    • #main _content
    • #main _sidebar
  • #footer
    • #footer_navigation
    • #footer_notice

Dokumentation

Im zweiten Schritt erstelle ich zwei Stylesheet-Dateien, welche ich layout.css und content.css nenne. In der layout.css befinden sich alle Definitionen zur Positionierung der einzelnen Elemente. Die Datei content.css enthält alle Definitionen zum gestalten der einzelnen Elemente. Als nächstes lege ich die Grundstruktur der CSS Dateien fest. Dabei schreibe ich die einzelnen Bereiche, welche oben aufgeführt wurden, in die CSS Datei. Die CSS Datei sieht nun wie folgt aus:

/***************************************
Author : Daniel Briegert <info@fly2mars-media.de>
Date : 2010.06.04
File : css/content.css
***************************************/

/* GENERAL ****************************/
/* HEADER *****************************/
/* HEADER_LOGO ************************/
/* HEADER_NAVIGATION ******************/
/* BANNER *****************************/
/* MAIN *******************************/
/* MAIN_CONTENT ***********************/
/* MAIN_NAVIGATION ********************/
/* MAIN _SIDEBAR **********************/
/* FOOTER *****************************/
/* FOOTER_NAVIGATION ******************/
/* FOOTER_NOTICE **********************/

Anschließend werden die einzelnen Bereiche mit den einzelnen Elementen vervollständigt.
Z.B.  für #main_content einen H1-Tag wird wie folgt definiert:

/* MAIN_CONTENT ************************/

#main_content h1 {
border-bottom: 1px solid;
color: blue;
font: 1.4m Verdana, arial;
}

Sinnvoll ist es die Definitionen innerhalb einer Sektion alphabetisch zu sortieren. Das Beispiel oben veranschaulicht diese Vorgehensweise.

Weitere Informationen

Fertige CSS Frameworks erleichtern die Erstellung. Interessant  ist unter anderem das Framework Blueprint CSS, welches ihr unter dem folgenden Link findet.

Link:

Browser auf HTML5 Kompatibilität testen

14. Mai 2010 at 14:23

Könnt ihr ganz einfach auf der Webseite html5test.com

HTML5 Referenz – Vollständige Liste aller HTML5 Tags

12. April 2010 at 17:31

Hier eine Liste der kompletten HTML 5 Tags.

  • 4* Diese Elemente sind definiert unter 4+
  • 5* Diese Elemente sind in HTML 5 definiert

Tag Description 4 5
<comment> Defines a comment 4 5
<DOCTYPE> Defines the document type 4 5
<a> Defines a hyperlink 4 5
<abbr> Defines an abbreviation 4 5
<acronym> Not supported. Defines an acronym 4
<address> Defines an address element 4 5
<applet> Not supported. Defines an applet 4
<area> Defines an area inside an image map 4 5
<article> Defines an article 5
<aside> Defines content aside from the page content 5
<audio> Defines sound content 5
<b> Defines bold text 4 5
<base> Defines a base URL for all the links in a page 4 5
<basefont> Not supported. Use CSS instead 4
<bdo> Defines the direction of text display 4 5
<big> Not supported. Defines big text 4
<blockquote> Defines a long quotation 4 5
<body> Defines the body element 4 5
<br> Inserts a single line break 4 5
<button> Defines a push button 4 5
<canvas> Defines graphics 5
<caption> Defines a table caption 4 5
<center> Not supported. Defines centered text 4
<cite> Defines a citation 4 5
<code> Defines computer code text 4 5
<col> Defines attributes for table columns 4 5
<colgroup> Defines groups of table columns 4 5
<command> Defines a command button 5
<datagrid> Defines data in a tree-list 5
<datalist> Defines a dropdown list 5
<datatemplate> Defines a data template 5
<dd> Defines a definition description 4 5
<del> Defines deleted text 4 5
<details> Defines details of an element 5
<dialog> Defines a dialog (conversation) 5
<dir> Not supported. Defines a directory list 4
<div> Defines a section in a document 4 5
<dfn> Defines a definition term 4 5
<dl> Defines a definition list 4 5
<dt> Defines a definition term 4 5
<em> Defines emphasized text 4 5
<embed> Defines external interactive content or plugin 5
<eventsource> Defines a target for events sent by a server 5
<fieldset> Defines a fieldset 4 5
<figure> Defines a group of media content, and their caption 5
<font> Deprecated. Defines text font, size, and color 4
<footer> Defines a footer for a section or page 5
<form> Defines a form 4 5
<frame> Not supported. Defines a sub window (a frame) 4
<frameset> Not supported. Defines a set of frames 4
<h1> to <h6> Defines header 1 to header 6 4 5
<head> Defines information about the document 4 5
<header> Defines a header for a section or page 5
<hr> Defines a horizontal rule 4 5
<html> Defines an html document 4 5
<i> Defines italic text 4 5
<iframe> Defines an inline sub window (frame) 4 5
<img> Defines an image 4 5
<input> Defines an input field 4 5
<ins> Defines inserted text 4 5
<isindex> Not supported. Defines a single-line

input field

4
<kbd> Defines keyboard text 4 5
<label> Defines a label for a form control 4 5
<legend> Defines a title in a fieldset 4 5
<li> Defines a list item 4 5
<link> Defines a resource reference 4 5
<mark> Defines marked text 5
<map> Defines an image map 4 5
<menu> Defines a menu list 4 5
<meta> Defines meta information 4 5
<meter> Defines measurement within a predefined range 5
<nav> Defines navigation links 5
<nest> Defines a nestingpoint in a datatemplate 5
<noframes> Not supported. Defines a noframe section 4
<noscript> Defines a noscript section 4 5
<object> Defines an embedded object 4 5
<ol> Defines an ordered list 4 5
<optgroup> Defines an option group 4 5
<option> Defines an option in a drop-down list 4 5
<output> Defines some types of output 5
<p> Defines a paragraph 4 5
<param> Defines a parameter for an object 4 5
<pre> Defines preformatted text 4 5
<progress> Defines progress of a task of any kind 5
<q> Defines a short quotation 4 5
<rule> Defines the rules for updating a template 5
<s> Not supported. Defines strikethrough text 4
<samp> Defines sample computer code 4 5
<script> Defines a script 4 5
<section> Defines a section 5
<select> Defines a selectable list 4 5
<small> Defines small text 4 5
<source> Defines media resources 5
<span> Defines a section in a document 4 5
<strike> Not supported. Defines strikethrough text 4
<strong> Defines strong text 4 5
<style> Defines a style definition 4 5
<sub> Defines subscripted text 4 5
<sup> Defines superscripted text 4 5
<table> Defines a table 4 5
<tbody> Defines a table body 4 5
<td> Defines a table cell 4 5
<textarea> Defines a text area 4 5
<tfoot> Defines a table footer 4 5
<th> Defines a table header 4 5
<thead> Defines a table header 4 5
<time> Defines a date/time 5
<title> Defines the document title 4 5
<tr> Defines a table row 4 5
<tt> Not supported. Defines teletype text 4
<u> Not supported. Defines underlined text 4
<ul> Defines an unordered list 4 5
<var> Defines a variable 4 5
<video> Defines a video 5
<xmp> Not supported. Defines preformatted text 4

Zeilenumbruch erzwingen mit CSS auch bei zu langen urls/texten

29. März 2010 at 15:53

Ihr kennt sicher das Problem bei zu langen URLs oder Kommentaren welche bei Tabellen freien CSS-Layouts ggf. über den Rand hinaus gehen. Die Lösung ist folgender CSS-Code:

.break-word {
  word-wrap: break-word;
}

Submit eines Form mit vorheriger JavaScript Abfrage (ja/nein) steuern

26. März 2010 at 15:23

Zwar super simple Sache für jeden der nur ein klein wenig Ahnung von JavaScript hat, aufgrund der Frage eines Freundes wie das geht hier eine kurze Erläuterung. Ausgangssituation ist dass ihr ein Formular (Form-Element) mit einem Input-Submit Button habt. Vor dem absenden des Form möchtet ihr allerdings noch mal den Benutzer fragen ob er das tatsächlich möchte (Ja/Nein-Abfrage).

Das könnt ihr ganz einfach wie folgt umsetzen:

<script language="javascript">function msgBox()
{
  return window.confirm("Wollen Sie wirklich abschicken??");
}
//-->
</script>
<form action="index.php" method="post" name="form1">
<input type="text" name="text1" />
<input type="submit" name="submit1" value="Abschicken" onclick="return msgBox();" />
</form>

Ich hoffe mit diesem simplen Code-Schnippel noch mehr als nur 1 Person geholfen zu haben, deshalb auch die Veröffentlichung hier im Blog!