Responsive Design: Media Query

Unter Responsive Design versteht man die dynamische Anpassung des Webseiten-Layouts an das Darstellungsmedium. Beispielsweise wird das GitHub-Ribbon in der oberen rechten Ecke erst ab einer Breite von 500 Pixeln angezeigt. Dafür ist dieser Code verantwortlich:

Style-Angabe

<style type="text/css"> @media all and (max-width: 500px) { #github_ribbon { display:none; } } </style>

HTML

<a href="https://github.com/sklueh"><img id="github_ribbon" style="z-index:2; position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png" alt="Fork me on GitHub"></a>

50 hilfreiche Werkzeuge zum Thema Responsive Design:
50 fantastic tools for responsive web design

Lightweight Validator in PHP

Ziel war es, mit wenig Zeilen einen möglichst einfach zu verwendenden Validator zu schaffen, der sich zudem einfach erweitern lässt und ohne viele Abhängigkeiten auskommt. Daraus entstanden ist folgendes:

Anwendungsbeispiel:

//Anwendungsbeispiel
$oValidator = new Validator();

$oValidator->isValid("http://sklueh.de", 'url'); //true
$oValidator->isValid("http:/%$$^1sklueh.de", 'url');//false
$oValidator->isValid("http://sklueh.de", 'url|min_length[16]|max_length[20]|required'); //true
$oValidator->isValid("http://sklueh.de", 'url|min_length[17]|max_length[20]|required'); //false
$oValidator->isValid("http://sklueh.de", 'url|min_length[10]|max_length[15]|required'); //false
$oValidator->isValid("39.91", 'greater_than[39.90]'); //true
$oValidator->isValid("40", 'greater_than[39.90]'); //true
$oValidator->isValid("39.90", 'greater_than[39.90]'); //false
$oValidator->isValid('2', 'match[1,2]'); //true
$oValidator->isValid('3', 'match[1,2,5,7]'); //false
$oValidator->isValid('o_O?', 'match[lol,rofl,o_O?,lololol,l000000l]'); //true
$oValidator->isValid(md5('my_password'), 'equals['.md5('my_password').']'); //true
$oValidator->isValid(md5('my_password'), 'equals['.md5('my_wrong_password').']'); //false
$oValidator->isValid("1.1.2012", 'date'); //true
$oValidator->isValid("30.2.2012", 'date'); //false
$oValidator->isValid("2.2012", 'date'); //false

Validator
Diese Klasse kümmert sich um die Interpretation der Suchmuster.

class Validator
{
    public function isValid($mValue, $mPattern)
    {
        $aPatterns = explode("|", $mPattern);
       
        foreach( (array) $aPatterns as $sRule) //Alle definierten Regeln durchlaufen
        {
            $aRuleParams = $this->detachParams("[", "]", $sRule); //Zusätzliche Parameter von dem Regel-String lösen
            $oReflectionMethod = new ReflectionMethod($sValidationClass = "ValidatorRules", 'check_'.$sRule);
            if(!$oReflectionMethod->invoke(new $sValidationClass(), $mValue, $aRuleParams)) return false; //Methode für Validierung aufrufen
        } return true;
    }
   
    public function detachParams($cFirstChar, $cSecondChar, &$sRule)
    {
        preg_match_all("/\".$cFirstChar."(.*?)\".$cSecondChar."/", $sRule, $aMatches);
        $sRule = preg_replace("
/\\[(.*?)\\]/", "", $sRule);
        return $aMatches[1];
    }
}

Lightweight Validator in PHP weiterlesen

PGSQL: Duplikate in einer Tabelle finden

Das folgende SQL Statement ermittelt alle Duplikate in einer Tabelle. Vorraussetzung hierfür ist, dass sich die Spalte mit dem Primärschlüssel an erster Stelle befindet.

SELECT
    *
FROM
(  
  SELECT
  COUNT(substr(tmp.*::text, strpos(tmp.*::text, ','))) AS duplicate_count,
        substr(tmp.*::text, strpos(tmp.*::text, ',')) AS duplicate_entry
  FROM
      my_table AS tmp
  GROUP BY duplicate_entry
)
AS subquery
WHERE duplicate_count > 1
GROUP BY duplicate_count, duplicate_entry

Alle Elemente eines mehrdimensionalen Arrays durchlaufen und bearbeiten

Wenn mit den Werten eines mehrdimensionalen Arrays gearbeitet wird, dann kommen häufig Schleifen zum Einsatz. Das kann bei großen verschachtelten Arrays viel „Schreibarbeit“ bedeuten. Die PHP-Funktion „array_walk_recursive“ vereinfacht das Ganze. In dem nachfolgenden Beispiel werden alle Werte des Arrays in base64 kodiert.

Code:

$aData = array();
$aData['ebene1']            = array_fill(0, 2, 'Wert1');
$aData['ebene1']['ebene2']  = array_fill(0, 2, 'Wert2');

var_dump($aData);

/**
 * Ausgabe (vorher)
 array(1) { ["ebene1"]=> array(3)
                         {[0]=> string(5) "Wert1"
                          [1]=> string(5) "Wert1"
                          ["ebene2"]=> array(2)
                                       {[0]=> string(5) "Wert2"
                                        [1]=> string(5) "Wert2"}}
}
*/


function encodeToBase64(&$aItem, $mKey)
{
    $aItem = base64_encode($aItem);
}

array_walk_recursive($aData, "encodeToBase64");

var_dump($aData);

/*
 * Ausgabe (nachher):
array(1) { ["ebene1"]=> array(3)
                        {[0]=> string(8) "V2VydDE="
                         [1]=> string(8) "V2VydDE="
                         ["ebene2"]=> array(2)
                                      {[0]=> string(8) "V2VydDI="
                                       [1]=> string(8) "V2VydDI="}}
}
*/

PHP: Text zwischen zwei Zeichen extrahieren

Die folgende Methode extrahiert einen beliebigen Text zwischen zwei definierten Zeichen.

Code:

function extractStringBetween($cFirstChar, $cSecondChar, $sString)
{
    preg_match_all("/\".$cFirstChar."(.*?)\".$cSecondChar."/", $sString, $aMatches);
    return $aMatches[1];
}

$sMyString = "
Bitte alle eingeklammerten Begriffe extrahieren: [Symfony] [CodeIgniter] #PHP# [Zend]";

var_dump(extractStringBetween("[", "]", $sMyString));

/*
 * Ausgabe:
 *
array(3)
{
  [0]=>
  string(7) "Symfony"
  [1]=>
  string(11) "CodeIgniter"
  [2]=>
  string(4) "Zend"
}
*/