blog.bartlweb - a technologist's external brain

Thema: Webentwicklung

Browserfenster per JavaScript schließen

Ein Browserfenster lässt sich mit Hilfe des JS-Befehls self.close() schließen. Dabei ist allerdings darauf zu Achten, dass der InternetExplorer dem Benutzer zunächst eine Abfrage, ob das Fenster wirklich geschlossen werden soll, präsentiert.

<a href="#" $="self.close();">Fenster schließen</a>

gerade und ungerade Tabellenzeilen per JavaScript kennzeichnen

Gerade bei längeren Tabellen ist es für den Benutzer hilfreich wenn gerade und ungerade Tabellenzeilen sich farblich unterscheiden und somit eine "gestreifte" Tabelle ensteht. CSS bietet von Haus aus leider keine Möglichkeit diesen Effekt zu erzielen, darum muss geraden und ungeraden Tabellenzeilen jeweils eine eigene Klasse zugewiesen werden. Kann dies nicht applikationstechnisch im Hintergrund erfolgen kann man die Funktionalität auch per JavaScript nachrüsten.

var tablecount = 0;
jQuery("table.stripped tr").each(function(){
  if(tablecount%2 == 0) {
    jQuery(this).addClass("even");
  } else {
    jQuery(this).addClass("odd");
  }
  tablecount++;
});

Rechnen in Javascript – Strings in Integer umwandeln

Um in JavaScript mit Benutzereingaben oder Rückgabewerten rechnen zu können müssen Strings zunächst in Integer umgewandelt werden. Dies erfolgt mit der Methode parseInt().

var height = jQuery("textarea").attr("height");
new_height = parseInt(height) + 20;
jQuery("textarea").attr("height", "new_height");

iFrame Inhalt mit jQuery manipulieren

Enthält eine Seite einen iFrame stellt sich oft der Wunsch ein auch Inhalt des iFrames, mittels in das Haupt-Dokument eingebundenen JavaScripts, zu verändern. jQuery bietet dazu die Möglichkeit auch iFrames und dessen Inhalt anzusprechen.

jQuery("iframe").contents().find("body").append("I was modified by JS!");

mit jQuery animierter ToTop-Link

Ein Top-Link ist schnell umgesetzt, und kann mit Hilfe von jQuery leicht mit einer netten Animation versehen werden. Dabei springt die Seite beim Klick nicht nach oben, sondern scrollt sanft nach oben.

Neben jQuery wird noch das ScrollTo-Plugin benötigt welches Sie hier finden: http://demos.flesler.com/jquery/scrollTo/

Binden Sie das JavaScript-File ein und versehen Sie den ToTop-Link mit der ID "#totop".

jQuery("a#totop").click(function() {
  jQuery.scrollTo(0, 600);
});

Google Geocode Service in PHP nutzen

Google bietet die Möglichkeit Positionsdaten von Adresse, Städten, Straßen mittels Geocoding zu ermitteln. Dies kann Clientseitig mittels JS passieren oder aber auch Serverseitig durch den Aufruf einer URL. Dabei liefert Google ein XML-Dokument zurück, dass mittels PHP leicht geparst werden kann.

URL-Syntax

http://maps.google.com/maps/geo?q=[]&output=[]&key=[]
  • q
    Suchanfrage
    mehrere Worte mit + verbinden
  • output
    Typ der Ausgabe: xml oder html
    Standard ist xml
  • key
    ein gültiger Google-API-Key
http://maps.google.com/maps/geo?q=1200+wien&output=xml&key=ABQIAAAAs-81XuoxqzyG-Ie2CT72UhTfU3gdmQ-RPKoFZ_gIMx2_IU9bDxSUIz5Wk18sfrWsnp26WYx3VDsLSg

PHP-Code

function getCoordinates($address,$api_key) {
  $result = false;
  $url = 'http://maps.google.com/maps/geo';
  $url .= '&q=' . rawurlencode($address);
  $url .= '&key=' . $api_key;
  $url .= '?output=xml';
  $coords = array();

  if ($_result = file_get_contents($_url)) {
    if (preg_match('/<coordinates>(-?\d+\.\d+),(-?\d+\.\d+),(-?\d+\.?\d*)<\/coordinates>/', $result, $match)) {
      $coords['lon'] = $match[1];
      $coords['lat'] = $match[2];
      $result = true;
    }
  }

Typo3 4.2.x List-Module Error

Manchmal kann es vorkommen, dass in Typo3 4.2.x im List Modul folgender Fehler auftritt:

Warning: Invalid argument supplied for foreach() in /typo3_src-4.2.3/typo3/class.db_list.inc on line 694

Diese Fehlermeldung im List-Modul lässt sich durch eine kleine Abfrage in der Datei “class.db_list.inc” abfangen. Dazu ändern Sie ab Zeile 694 den folgenden Code-Block:

  foreach($TCA[$table]['columns'] as $fN => $fieldValue) {
    ...
  }
}

in

  if (is_array($TCA[$table]['columns'])) {
    foreach($TCA[$table]['columns'] as $fN => $fieldValue) {
      ...
    }
  }
}

Achtung: Änderungen gehen bei einem Typo3-Update verloren!

RealUrl Konfiguration

Hier finden Sie eine sinnvolle Beispiel-RealUrl-Konfiguration, die auch bereits die Extension tt_news abdeckt.

RealUrl installieren

Laden Sie die Extension aus dem Typo3-Repository und Installieren Sie diese.

Apache .htaccess anlegen

Bei den meisten Typo3-Installationen ist die benötigte .htaccess-Datei bereits vorhanden, ansonsten sollte der Inhalt wie folgt lauten:

RewriteEngine On
RewriteRule ^(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)/ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]

Konfiguration einfügen

Laden Sie die unten gelistete Datei herunter und entfernen Sie die Endung .txt, legen Sie diese dann unter "typo3conf/" ab.

realurl_conf.php.txt

RealUrl aktivieren

Fügen Sie das folgende TypoScript zu Ihrem Template hinzu um RealUrl zu aktivieren.

#deactivate simulateStaticDocuments
config.simulateStaticDocuments = 0
#prefix local anchors with baseurl
config.prefixLocalAnchors = all
#enable realurl
config.tx_realurl_enable = 1

Typo3 Standardheader anpassen

Mit dem folgenden TypoScript passen Sie den Standard-Header der Content-Elemente an. Sollte kein Header angegeben worden sein, wird dieser automatisch ausgeblendet.

lib.stdheader >
lib.stdheader=TEXT
lib.stdheader.field=header
lib.stdheader.stdWrap.wrap=<h2>|</h2>
lib.stdheader.stdWrap.required = 1

Info: Standardmäßig ist der Header als H1 definiert.

Eine weitere Möglichkeit den Standardheader unter Berücksichtigung der Header-Layouts selbst zu definieren, könnte so aussehen:

lib.stdheader >
lib.stdheader=CASE
lib.stdheader{
  key.field=header_layout
 
  1=TEXT
  1 {
    field=header
    stdWrap.wrap=<h2>+ |</h2>
    stdWrap.required = 1
  }
 
  default < .1
}

RealUrl Fehlermeldung “Segment was not a keyword for a postVarSet as expected”

Fehlermeldung

Error!  Reason: Segment "pagetitle" was not a keyword for a postVarSet as expected!

Problem

Wird auf eine Typo3-Installation mit einer existierenden RealUrl aber einer per TypoScript nicht definierten BaseUrl zugegriffen, kommt RealUrl ins schleudern und wirft oben genannte Fehlermeldung. Selbiges kann bei einem inkonsistenten RealUrl-Cache passieren. Achtung: Wird der RealUrl-Cache gelöscht gelingt kurzfristig der Zugriff auch mit nicht eingestellter BaseUrl.

Lösung

Abhilfe schafft das Löschen des Caches und der Zugriff nur über die definierte BaseUrl.