Načtení kategorií z heureky

Pokud chcete úspěšný eshop, budete pravděpodobně párovat u zboží kategorie s heurekou. K tomu potřebujete ideálně do databáze dostat všechny heureka kategorie, a následně je buď u kategorií nebo u zboží spárovat. Budu se nyní zabývat tím, jak dostat celý strom kategorií na lokální server do databáze.

V databázi předpokládám tabulku s názvem heureka_kategorie a s jediným sloupcem pojmenovaným nazev. Níže uvedený kód načte všechny kategorie heureky a uloží je do dočasného XML souboru na disku. Následně tento soubor zpracuje a všechny kategorie uloží do databáze, přičemž je ukládá jako textový řetězec včetně celé cesty, tzn. názvy kategorií odděleny oddělovačem |.

$file="http://www.heureka.cz/direct/xml-export/shops/heureka-sekce.xml";
$ch = curl_init($file);
$fp = @fopen("tmp/heureka.xml", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

function vetev($PARENT) {
  global $dbh;
  if (isset($PARENT->CATEGORY)) {
    foreach($PARENT->CATEGORY as $CHILD) {
      $CATEGORY_FULLNAME = isset($CHILD->CATEGORY_FULLNAME) ? $CHILD->CATEGORY_FULLNAME : "";
      $CATEGORY_FULLNAME = trim(str_replace("Heureka.cz |", "", $CATEGORY_FULLNAME));
      if ($CATEGORY_FULLNAME) $dbh->query("insert into heureka_kategorie (nazev) values ('".$CATEGORY_FULLNAME."')");
      vetev($CHILD);	
    }
  }
}

if (file_exists("tmp/heureka.xml")) {

$xml = file_get_contents("tmp/heureka.xml");
$HEUREKA = new SimpleXMLElement($xml);

try {
  $dbh = new PDO("mysql:host=localhost;dbname=nazevdatabaze;charset=utf8",'jmeno','heslo');
  $dbh->query("truncate table heureka_kategorie");
  vetev($HEUREKA);
  $dbh = null;
} catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    exit();
}

}

Načítání měnových kurzů z ČNB nebo ČSOB

Jelikož potřebuji na některých eshopech převádět české koruny na eura, napsal jsem si třídu, která dokáže aktuální kurzy načíst z ČNB nebo z ČSOB. Třídu můžete stáhnout zde.

Co umí? Dokáže načíst online měnový kurz pro jakoukoliv měnu, kterou má daná banka přístupnou na webu. A také načíst všechny tyto údaje do pole a vyhodit jej pro případ, že budete chtít zobrazit více kurzů.

Následující kód vypíše EUR kurz z ČNB:

require_once('kurzy.class.php');
$kurz = new Courses('CNB');
echo $kurz->showOneCourse('EUR');

Tento kód vypíše pole měnových kurzů z ČSOB:

require_once('kurzy.class.php');
$kurz = new Courses('CSOB');
var_dump($kurz->showCourses());

Jak jste jistě pochopili, pro vytvoření instance třídy se použije new Courses(‚nazev_banky‘) a existují dvě metody:

1. showOneCourse(‚mena‘)
– vrátí aktuální kurz pro jednu měnu
2. showCourses()
– vrátí pole kurzů ($pole[‚mena‘])

Název banky může nabývat hodnot ‚CNB‘ nebo ‚CSOB‘. Měna pak ‚EUR‘, ‚USD‘, ‚GBP‘, …

Na závěr doporučení, pokud byste aktualizovali přes tuto třídu kurzy online a třeba každou vteřinu, budete zatěžovat mateřský server banky a to se jim nemusí zrovna dvakrát líbit. Doporučuji proto kurzy skrz tuto třídu ukládat třeba do databáze a aktualizovat jednou za hodinu, nebo jednou za den, dle potřeby.

Odesílání e-mailů v PHP

Pro zasílání e-mailů jsem si oblíbil knihovnu swiftmailer. Je zdarma a je jednoduchá na použití. Umí samozřejmě odesílat i přílohy a využívat funkci mail() anebo přímo smtp server.

require_once('lib/swift_required.php');
$transport = Swift_SmtpTransport::newInstance('smtp.example.org',25)
  ->setUsername('username')
  ->setPassword('password')
;
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('predmet emailu');
$textzpravy = "Ahoj, posílám obrázek: <img src=".$message->embed(Swift_Image::fromPath('image.jpg')).">";
$message -> setFrom('emailodesilatele');
$message -> setBody($textzpravy);
$message -> setTo(array('emailprijemce'));
$result = $mailer -> send($message);

Jak detekovat přístup přes mobil

Existuje šikovná PHP knihovna Mobile Detect. Dokáže detekovat, zda je zařízení mobilem, nebo tabletem. Navíc umí poznat (aspoň se tím chlubí) zařízení dle výrobce, nebo prohlížeče. Můžete tak generovat stránky dle toho, jestli má návštěvník v ruce mobil, nebo sedí u PC. A to se může hodit :)

Tisk štítků s čárovým kódem v PHP

Pro tisk štítků s čárovým kódem, konkrétně EAN 13 a CODE 128, používám knihovnu Tomáše Horáčka Barcodepack. Obsahuje také třídy pro QR kódy, UPC, a ještě pár dalších (netestoval jsem).

Příklad pro uložení EAN kódu jako png obrázek:

require_once("/path/barcodepack/class.ean13.php");
$ean = new ean13(substr(1234567891234,0,-1));
imagepng($ean->draw(),"/path_to_save/image.png");

* EAN kód je třeba zbavit posledního čísla.

Stylování tabulek v css

Pohodlné a efektní ostylování řádků tabulky se nemusí dělat přes javascript, ale pomůže css. Vložte do css následující:

.tigra {
    border-collapse: collapse;
    margin: 0 auto;
}
.tigra th {
    padding: 0 3px;
}
.tigra td {
    vertical-align: middle;
}
.tigra tbody tr:nth-child(odd) {
    background: #e6eaeb;
}
.tigra tbody tr:nth-child(even) {
    background: #ffffff;
}
.tigra tbody tr:nth-child(2n+1):hover {
    background: #C3CCD0;
}
.tigra tbody tr:nth-child(2n):hover {
    background: #C3CCD0;
}

A pak v html dejte tabulku do třídy „tigra“.

<table class="tigra">
<thead>
<tr><th>sloupec 1</th><th>sloupec 2</th></tr>
</thead>
<tbody>
<tr><td>řádek 1</td><td>řádek 1</td></td>
<tr><td>řádek 2</td><td>řádek 2</td></td>
</tbody>
</table>

Load jQuery

Pokud používáte jQuery knihovnu, je vhodnější ji tahat z nějakého repozitáře. Jquery nabízí např. google.

Do stránky tedy vložte kód:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
if (!window.jQuery) {
document.write('<script src="/path/jquery.min.js"><\/script>');
}
</script>

A do lokálního adrersáře na vašem serveru si knihovnu stáhněte také (/path/jquery.min.js), a v případě, že se knihovnu nepodaří z googlu načíst, načte se z lokálu.