9/25/2011

Výpočet hash objektu v PHP

Funkce spl_object_hash() má jednu nevýhodu, její výsledek se v čase mění. Pokud objekt naplníte stejnými hodnotami, dostanete při dvou requestech dva různé výsledky. Což nemusí být vždy žádoucí. Někdy potřebujete objekt identifikovat na základě jeho vnitřních hodnot pomocí neměnného řetězce. Takový hash můžete snadno získat například takto:

class Foo {
 private $p;
 public function setProperty($p) {
  $this->p = $p;
 }
 // vypocita hash objektu na zaklade hodnot jeho propert
 public function __toString() {
  return md5(http_build_query(get_object_vars($this)));
 }
}

Pro vypsání/získání hash pak stačí:

$bar = new Foo();
$bar->setProperty('25');
echo $bar;
$hash = (string) $bar;

#PHP

6/20/2011

Case insensitive in_array v PHP

PHP funkce in_array je case sensitive - což se nemusí vždy hodit. Občas potřebujete prohledat pole a nezáleží Vám na velikosti písmen u jeho prvků:

$array = array('a', 'B', 'cE');

function inArrayCaseInsensitive($needle, $array) {
 return (bool) preg_grep('/^' . preg_quote($needle, '/') . '$/i', $array);
}

inArrayCaseInsensitive('a', $array); // true
inArrayCaseInsensitive('A', $array); // true
inArrayCaseInsensitive('ce', $array); // true
inArrayCaseInsensitive('be', $array); // false

Funkce preg_grep má ještě zajímavý přepínač PREG_GREP_INVERT. Tímto přepínačem odfiltrujete všechny hodnoty v poli, které neodpovídají zadanému regulárnímu výrazu. Filtrace zachovává klíče pole.

$array = array('a', 'A', 'cE');

function filterArrayValues($needle, $array) {
 return preg_grep('/^' . preg_quote($needle, '/') . '$/i', $array, PREG_GREP_INVERT);
}

print_r(filterArrayValues('a', $array)); // vypíše jen cE

#PHP

4/13/2011

Snadné připojení k FTP pomocí PHP

Mám v oblibě zkrácený zápis připojení k FTP. PHP tento způsob zápisu připojení bohužel nepodporuje. Proto jsem napsal jednoduchou funkci, která patřičně rozebere zaslanou adresu, vytvoří nové připojení, přihlásí uživatele a změní cestu.

/**
 * Vraci ID FTP pripojeni na zaklade zadane URL
 * ftp://username:password@sld.domain.tld:21/path1/path2/
 */
function getFtpConnection($uri)
{  
  preg_match("/(?P<protocol>ftps?:\/\/)(?P<username>.*?):(?P<password>.*?)@(?P<url>.*?):?(?P<port>[1-9]+)?(?<dir>\/.*)/i", $uri, $match);
  $conn = ftp_connect($match['url'], empty($match['port']) ? 21 : (int)$match['port']) or die("Couldn't connect to " . $match['url']);
  if (ftp_login($conn, $match['username'], $match['password'])) {
    ftp_chdir($conn, $match['dir']);
    return $conn;
  }

  return null;
}

Výstupem funkce je samozřejmě ID připojení, se kterým pak můžete normálně pracovat dál. Funkci najdete také zde: https://gist.github.com/998091

#PHP

3/27/2011

Snadné vložené YouTube videa pomocí PHP

Následující PHP kód zamění jakýkoliv odkazu na YouTube video za vložený přehrávač. Prostřednictvím jediného regulárního výrazu se dokáží automaticky nahradit celkem čtyři různé formáty URL adresy za embed video přehrávač.

function youtube($string)
{
  return preg_replace(
    '#(http://(www.)?youtube.com)?/(v/|watch\?v\=)([-|~_0-9A-Za-z]+)&?.*?#i',
    '<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/$4" frameborder="0" allowfullscreen></iframe>',
    $string
  );
}

echo youtube('http://www.youtube.com/watch?v=VWsjWCt1PsQ');
echo youtube('http://youtube.com/watch?v=VWsjWCt1PsQ');
echo youtube('http://youtube.com/v/VWsjWCt1PsQ');
echo youtube('http://www.youtube.com/v/VWsjWCt1PsQ');

#PHP #YouTube

11/15/2010

Zvýraznění právě hledaných slov ve Wordpress

Několik následujících řádků kódu obalí všechna právě vyhledávaná klíčová slova do značky STRONG (class search-keyword). Kód je možné vložit do function.php ve Vašem template. Nebo jej můžete vložit rovnou do search.php někde těsně za volání funkce get_header(). Předpokladem samozřejmě je, že využíváte standardních vyhledávacích funkcí Wordpress.

function omSearchHeighlight($text) {
    $keys = explode(" ", get_search_query());
    $text = preg_replace('/('.implode('|', $keys) .')/iu', '<strong class="search-keyword">\0</strong>', $text);
    return $text;
}

add_filter('the_title','omSearchHeighlight');
add_filter('the_content','omSearchHeighlight');
add_filter('the_excerpt','omSearchHeighlight');

// nezapomeňte strong element nastylovat např.
// strong.search-keyword {background: #f3ff0f!important; color:#000!important;}

Výsledkem je malé, ale užitečné, vylepšení výsledků vyhledávání, které Vás navíc nestojí téměř žádnou námahu. Ještě malá poznámka na závěr: Kód nedbá na velikost písmen.

#CSS #PHP #Wordpress

4/16/2009

Význam barev

Všechny barvy ve vašem okolí na Vás nějak působí. Pokud navrhujete internetové stránky, je na to potřeba pamatovat dvojnásob. Barva dokáže návštěvníka oslovit a navodit ten správný pocit. Barvy se obecně dělí na barvy teplé, studené a neutrální

Teplé barvy jsou založené na odstínech žluté, hnědé, zeleno žluté a oranžové. Teplé barvy svoji podstatou vzrušují, mají tendenci upoutat pozornost. Na pomezí mezi teplou a studenou barvou je možné přiřadit odstíny zelené a fialové. Záleží jak moc obsahují červené nebo modré (RGB).

Studené barvy jsou založeny na odstínech modré, zelené, fialové, modro-zelené, modro-červené. Tyto barvy mají tendenci uklidňovat, tišit. Na rozdíl od teplých barev, se dají barvy studené celkem úspěšně aplikovat na velké plochy.

Mezi neutrální barvy patří bílá, šedá a černá. Pak celá řada barev, které obsahují velké množství šedé (barvy tmavé). Neutrální barvy dokáží zvýšit atraktivitu teplých barev. Velké množství barev je znepokojující (vezměte si např. kolotoče).

Pro webové stránky je lepší použít nižší množství barev (ideálně 3-4). Barvy jsou často a právem spojovány s konkrétními vlastnostmi (Psychologie barev):

  • Červená: síla, zastavit, chyba, upozornění, láska, pálí, vášeň, cílevědomost, krev
  • Růžová: roztomilé, naivní, dětské, sladké, něha
  • Oranžová: hřejivá, podzimní, kreativita, radost, moudrost, extravagance, energie
  • Žlutá: teplo, štěstí, slunce, fascinace, povzbuzení
  • Černá: temnota, smutek, zloba, noc, smrt, rafinovanost, elegance
  • Šedá: trudomyslnost, nevýraznost, neutralita
  • Bílá: čistota, nevinnost, zima, dokonalost, zvětšuje prostor, chladí
  • Hnědá: podzim, hlína, špína, země, příroda, zdravý rozum
  • Zelená: peníze, závist, příroda, ekologie, náklonnost, soucit, klid, jaro
  • Modrá: pokoj, klid, stabilita, voda, nebe, stálost, jednota, důvěra
  • Fialová: luxus, mystika, pokora, inspirace, šlechta

Modrá se tak logicky stává nejoblíbenější barvou firem (důvěra, klid, stabilita). Různé barvy se hodí k různým účelům. Například bílá je skvělá na pozadí, černá se zase používá pro text. Modrá dokáže dodat hloubku, červená dokáže upozornit atd. Všechno tohle mějte v hlavě (nebo na blogu :-)) pokud začínáte navrhovat web, komponujete mapu, připravujete reklamní letáky nebo se chystáte vymalovat byt.

#webdesign

2/16/2009

Proč je hodnocení hvězdičkama blbost

Většina současných moderních webů používá tzv. hodnocení obsahu pomocí hvězdiček (star rating). Na tom by nebylo nic špatného, je dobré znát názory ostatních, často Vám to pomůže v rozhodování.

  • ⭐️⭐️⭐️⭐️⭐️
  • ⭐️⭐️⭐️⭐️
  • ⭐️⭐️⭐️
  • ⭐

Jenže hvězdičkový koncept, tak jak je dneska používán, je postaven na velmi zavádějících datech.

Hned uvedu příklad, jak to myslím: Deset uživatelů zahlasuje 5 hvězdičkami, pro svůj oblíbený například Terminátor. A pro jiný film, například Forest Gump zahlasuje celkem 5000 osob, v průměru 4.5 ⭐️. Který film je favoritem?

Podle čistého hvězdičkového hodnocení, tak jak jej dnes používá většina současných serverů, je to Terminátor. Jenže to je špatně! Terminátor zaujal jen 10 lidí natolik, aby pro něj hlasovali, zatímco Forest Gump zaujal 5 000 lidí. Proto by měl být Forest Gump v žebříčku na prvním místě. Mnohem průkažnější by bylo, kdyby se do hodnocení promítl také počet hlasujících.

#webdesign #ux