Apr
22
2009
3

IE6 – Upgrade warning!

You are tired of optimizing websites for Internet Explorer 6? Well, if you are able to afford it, you can simply use this small script to show IE6-users a tiny warning:

IE6 - Out of Date

IE6 - Out of Date

http://code.google.com/p/ie6-upgrade-warning/

:-)

Jun
25
2008
2

Simple Apache Frameforward

Hier ein kleiner und simpler Frameforwarder von Pat und mir:

Apache Config:

 
<VirtualHost *>
        ServerName blog.alexander-kaletsch.de
        DocumentRoot /yourpath/forwarder
 
        ErrorLog /yourpath2/forwarder.error.log
 
        LogLevel warn
 
        CustomLog /yourpath3/forwarder.log combined
        ServerSignature On
</VirtualHost>
 

Weitere Subdomains können dann einfach über ServerAlias hinzugefügt werden.

Die index.php die sich im Forwarder Verzeichnis befinden muss:

 
<?php
error_reporting(0);
ini_set("error_display",0);
 
$mapper = array("blog.alexander-kaletsch.de" => "http://www.patworx.de/blog");
 
$host = $_SERVER['HTTP_HOST'];
$url = $mapper[$host];
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=$host?></title>
<style type="text/css">
<!--
HTML, BODY, FRAMESET, FRAME, NOFRAMES{
	height: 100%; 
	width: 100%
}
-->
</style>
 
</head>
<frameset>
    <frame frameborder="0" name="main" title="<?=$host?>" noresize="noresize" src="<?=$url?>"/>
    <noframes>
    <body>
 
<a href="<?=$url?>">Klicken Sie hier, da Ihr Browser keine Frames unterstu&uuml;zt</a>
 
    </body>
    </noframes>
</frameset>
</html>
 
Written by Alexander Kaletsch in: Allgemein, PHP, Snippets | Schlagwörter:,
Jun
25
2008
3

iCal

Die Klasse habe ich zwar schon vor einigen Monaten geschrieben, aber Dorian (http://www.proksch-it.de/) hat mich dazu bewogen, sie doch noch zu veröffentlichen, da er sie nun selbst verwendet.

Eine minimalistische Klasse für die Generierung von iCal Files.

Ziel ist: Wenig Features und wenig Probleme :)

 
class iCal{
	private $valid_elems = array("author", "start", "end", "topic", "msg", "location");
	private $min_elems = array("author", "start", "end",  "topic", "msg");
 
	public function __construct($values = array()){
		foreach($values as $key => $value){
			$this->set($key, $value);
		}
	}
 
	public function __set($key, $value){
		if(!in_array($key, $this->valid_elems)) throw new Exception("Element nicht zugelassen");
 
		$this->$key = $value;
	}
 
	public function __get($key){
		if(!in_array($key, $this->valid_elems)) throw new Exception("Element nicht vorhanden");
		return isset($this->$key) ? $this->$key : null;
	}
 
	public function __toString(){
		foreach($this->min_elems as $value){
			if($this->$value === null) throw new Exception("Nicht alle Pflichtelemente angegeben");
		}
 
		if(headers_sent()) throw new Exception("Header wurden bereits gesendet!");
 
		header('Content-Type: text/Calendar; charset=UTF-8');
		header('Content-Disposition: attachment; filename=iCal_' . date('Y-m-d_H-m-s') . '.ics');
 
		$output = "";
		$output  = (string) "BEGIN:VCALENDAR\r\n";
		$output .= 'PRODID:' . '#//PHP/AKCD//DE' . "\r\n";
		$output .= "VERSION:2.0\r\n";
		$output .= "METHOD:PUBLISH\r\n";
		$output .= "BEGIN:VEVENT\r\n";
		$output .= "DTSTART:". gmdate('Ymd\THi00\Z', $this->start) ."\r\n";
		$output .= "DTEND:". gmdate('Ymd\THi00\Z', $this->end) ."\r\n";
		if($this->location !== null) $output .= "LOCATION" . $this->quotedPrintableEncode($this->location) ."\r\n";
		$output .= "TRANSP:OPAQUE\r\n";
		$output .= "SEQUENCE:0\r\n";
		$output .= "UID:". md5("ICAL".$this->start.rand(1,5000).$this->end)."\r\n";
		$output .= "DTSTAMP:".gmdate('Ymd\THi00\Z',time())."\r\n";
		$output .= "CATEGORIES".$this->quotedPrintableEncode($this->author)."\r\n";
		$output .= "DESCRIPTION".$this->quotedPrintableEncode($this->msg)."\r\n";
		$output .= "SUMMARY".$this->quotedPrintableEncode($this->topic)."\r\n";
		$output .= "PRIORITY:5\r\n";
		$output .= "CLASS:PUBLIC\r\n";
		$output .= "STATUS:CONFIRMED\r\n";
		$output .= "END:VEVENT\r\n";
		$output .= "END:VCALENDAR\r\n";
 
		return $output;
	}
 
	private function quotedPrintableEncode($msg, $lang = "de"){
		$msg = preg_replace('/<a href="(.*)">.*<\/a>/i', "$1", $msg);
		$msg = str_replace("€", "Euro", $msg);
		$msg = ereg_replace("(\r\n|\n|\r)", "=0D=0A", $msg);
		return ";LANGUAGE=de;ENCODING=QUOTED-PRINTABLE:" . $msg;
	}
}
 

Sample:

 
$iCal = new iCal(); 
 
$iCal->start	= time() + (24 * 60 * 60);
$iCal->end	= time() + (24 * 60 * 60 * 3);
$iCal->author	= "Alexander-Kaletsch.de";
$iCal->msg	= utf8_encode('Hallo <img src='http://www.patworx.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ');
$iCal->location	= utf8_encode('http://www.alexander-kaletsch.de');
$iCal->topic	= utf8_encode('Visit Alexander-Kaletsch.de');
 
echo $iCal;
 

Wer unbedingt mehr Features benötigt sollte sich die iCal Klassen von Michael Wimmer (http://www.flamino.com) anschauen.

Written by Alexander Kaletsch in: PHP, Snippets | Schlagwörter:
Mai
07
2008
2

Kleine Helfer

Hin und wieder möchte man übergebene Werte gleich als Session-Variablen speichern... hab mir hierfür 'ne kleine Helferfunktion geschrieben, welche mit Hilfe der hier schon einmal vorgestellten get_var()-Funktion genau das durchführt, oder `false´ zurückgibt.

/**
 * Checks if a Variable is submitted, and if so, puts it as session var
 * if $allowed_values -> checks if value is allowed to be set
 *
 * @param string $var
 * @param array $allowed_values
 * @return bool
 */
function check_and_set_session_var($var, $allowed_values = NULL) {
	$do = false;
	if (get_var($var)) {
		if (is_array($allowed_values)) {
			if (in_array(get_var($var),$allowed_values)) {
				$do = true;
			}
		} else {
			$do = true;
		}
	}
	if ($do === true) {
		$_SESSION[$var] = get_var($var);
		return true;
	} else {
		return false;
	}
}

Auch ganz hilfreich ist vielleicht der folgende Einzeiler, der 'nen Link auf eine URL erstellt und eventuell übergebene Parameter anhängt:

/**
 * Create a simple link with some parameters
 *
 * @param array $param
 * @param string $url
 * @return string
 */
function c_link($param = NULL, $url = 'index.php') {
	return $url . ((is_array($param) != '') ? '?' . join('&amp;',$param) : NULL);
}
 

Die Parameter in der Form array("parameter=wert", "parameter2=wert") übergeben werden, vll. baue ich auch noch eine Prüfung ein, ob das übergebene Array überhaupt als GET angehängt werden kann.

Written by Patrick Weinstein in: PHP, Snippets | Schlagwörter:, , ,
Jan
15
2008
2

Smarty Plugin: jsencrypt

Einfach aus der mailto-funktion geklaut... kann jetzt auf alle Strings angewendet werden!

Usage: {"TEXT"|jsencrypt}

 
<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
 
/**
 * Smarty Java-Script Encrypter modifier plugin
 *
 * Type:     modifier<br>
 * Name:     jsencrypt<br>
 * Purpose:  Does a simple Java-Script Encryption..
 * @author   Alexander Kaletsch <mail at alexander-kaletsch dot de>
 * @param string
 * @return string
 */
function smarty_modifier_jsencrypt($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
{
	$string = "document.write('$string');";
 
	$js_encode = '';
	for ($x=0; $x < strlen($string); $x++) {
		$js_encode .= '%' . bin2hex($string[$x]);
	}
 
	return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
}
 
/* vim: set expandtab: */
 
?>
 
Written by Alexander Kaletsch in: PHP, Smarty, Snippets |
Dez
09
2007
2

Smarty plugin: lang

Idee: Simplen Language Swicher für kleine Variablen die direkt im Template gespeichert werden sollen.
Beispiel: {lang en="Given name" de="Vorname"}

Dateiname: function.lang.php
Dateilocation: Smarty/plugins/

 
<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
 
/**
 * Smarty {lang} function plugin
 *
 * Type:     function<br>
 * Name:     lang<br>
 * Purpose:  Very simple language switcher...<br>
 * @author Alexander Kaletsch <mail at alexander-kaletsch dot de>
 * @param array
 * @param Smarty
 */
function smarty_function_lang($params, &$smarty)
{
	global $lang, $default_lang;
	if($default_lang == "") $default_lang = "de";
 
    if (!isset($params[$default_lang])) {
        $smarty->trigger_error("lang: missing '".$default_lang."' (default) parameter");
        return;
    }
 
	if(isset($params[$lang]) && $params[$lang] != ""){
		return $params[$lang];
	} else {
		return $params[$default_lang];
	}
}
 
?>
 
Written by Alexander Kaletsch in: PHP, Smarty, Snippets |
Nov
09
2007
2

Datumsparser für jQuery.tablesorter

Hier ein kleiner Parser für non-standard dates, den ich auf www.birgit-kaletsch.de verwende:

 
$.tablesorter.addParser({
	// Datumsparser.
	// Hier verwendet: '[Wochentag]s, UhrzeitVon - UhrzeitBis';
	// Idee: 	Wochentag durch zahl von 0-6 ersetzen
	// 			Uhrzeit als rein Zahl
	// =&gt; Leichtes numerisches Sortieren möglich
	// Skript kann sehr leicht auf andere Daten übertragen werden...
       id: 'wochentage',
       is: function(s) {
           return false;
       },
       format: function(s) {
       	Wochentage = new Array("Montags", "Dienstags", "Mittwochs", "Donnerstags", "Freitags", "Samstags", "Sonntags");
 
       	// Wochentag durch entsprechende Zahl ersetzen
       	for(var i = 0; i &lt; Wochentage.length; i++){
       		s = s.replace(Wochentage[i], i);
       	}
 
       	// Alles auser Zahlen entfernen
       	s = s.replace(/\D/ig, "");
 
       	return s;
       },
       type: 'numeric'
   });
Nov
06
2007
2

xajax und Umlaute

Bei Verwendung von xajax zur Übertragung von Formulardaten kann es, trotz konsequenten Setzens des Zeichensatzes auf UTF-8, zu falsch dargestellten Umlauten kommen. Abhilfe sollte in diesem Fall eine kleine PHP-Funktion schaffen:

 
function encode($fehlerhafterstring) {
	$detect = mb_detect_encoding($fehlerhafterstring, "UTF-8, ISO-8859-1, ISO-8859-15", true);
	return mb_convert_encoding($fehlerhafterstring, "ISO-8859-1", $detect);
}
Okt
25
2007
3

Snippet: Variablen holen

Kleines Helferchen um übermittelte Variablen auszulesen. Gibt entweder den Wert oder `false` zurück.

 
function get_var($variable, $trim=true, $art=NULL) {
	switch ($art) {
		case "GET":
			$ret = (isset($_GET[$variable])) ? $_GET[$variable] : false;
		break;
		case "POST":
			$ret = (isset($_POST[$variable])) ? $_POST[$variable] : false;
		break;
		case NULL:
			$ret = (isset($_REQUEST[$variable])) ? $_REQUEST[$variable] : false;
		break;
	}
	return (isset($trim) &amp;&amp; isset($ret)) ? trim($ret) : $ret;
}

Usage:

 
$var = get_var("var", true, "POST");
Written by Patrick Weinstein in: PHP, Snippets |
Okt
25
2007
3

Flatten an array with php 4 (without references)

Orginal Function found @ http://de2.php.net/manual/de/ref.array.php

As References aren't working with PHP4, here a little down-hack:

 
function array_flatten($array, $preserve_keys = 1) {
	$newArray = Array();
 
	foreach ($array as $key =&gt; $child) {
		if (is_array($child)) {
			 foreach(array_flatten($child, $preserve_keys) as $kiddi){
			 	$newArray[] = $kiddi;
			 }
		} elseif ($preserve_keys + is_string($key) &gt; 1) {
			$newArray[$key] = $child;
		} else {
			$newArray[] = $child;
		}
	}
	for ($i=0 ; $i&lt;=count($newArray);$i++) {
		if ($newArray[$i]== "") {
			unset ( $newArray[$i] );
		}
	}
	return $newArray;
}
Written by Alexander Kaletsch in: PHP, Snippets |

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com