rulu ruru

post Překlady v CodeIgniteru na stereoidech - generování souboru s překladem

March 2nd, 2009

Filed under: php — starenka @ 22:57
Tags: , , ,

Jestli je něco v CodeIgniteru strašná otrava, tak určitě překlad aplikace. Člověk do controlleru, nebo view napíše hlášku a musí jít ještě vytvořit do souboru s jazykem proměnou, kam už tedy konečně může napsat překlad. Při pár hláškách se to přežít dá, ale při větším množství to leze na nervy. Poslední dobou si pohrávám s Djangem a vygenerovaní PO pro gettext je pomoci makemessages je prostě geniální zrychlovák. (Pro neznalé ve zkratce: de-fakto to proleze zdrojáky a hlášky na překlad nasype do souboru).

Je tady nějakej knoflík, kterej to umí? A jestli ne, tak proč ne? Proč ne opravdu nevím, ale konflík jsem horkou jehlou sešil a hazím v plén. Skript proleze adresář s projektem v CI a do specifikovaného souboru pro zadaný jazyk dosype hlášky, které ještě v souboru nejsou. Nic míň, nic víc. Předesílám, že skript je psanej pro mojí potřebu, takže postrádá jistou dávku blbuvzdornosti (bez urážky).

Jak to funguje? Je nutné předat cestku k projektu (option -p), ve které se rekurzivně projdou všechny podadresáře (pomocí -e je možné některý vynechat) a ve zdrojákách (defautlně přípona .php - možno změnit ve zdroji skriptu) se hledají stringy použité při validaci (lang:moje_lajna) nebo volání “překládací funkce”. defaultně je to v CI lang(”moje_lajna”), nicméně já používám vlastní rychlejší alias “_t()”. Název funkce jde proto nastavit také ve skriptu. Pokud není lajna ještě v souboru s překladem (-f soubor, -l jazyk), přidá se na konec souboru. Další podrobnosti k optionům po zavolání skript.py -h. Skript ke stažení tady.

Popularity: 21% [?]

post Alenka v říši Excelu - jak dostat název sloupečku

November 3rd, 2008

Filed under: php, programming — starenka @ 21:49
Tags: , ,

Pokuď někdo generoval XLSko pomocí jinak dobře našláplýho projektu PHPExcel, jistojistě narazil na fakt, že data se ukladají po buňkách(!). Na tom zase není nic moc až tak tragickýho, až na fakt, že musíte nějak vygenerovat i souřadnici buňky. Já jsem zrovna potřeboval procházet buňky od A až po XY a tak vznikla tahle lehce retardovaná funkce. Budiž možná někomu prospěšná. PS. Pokud někdo přišel na způsob jak ukládat data třeba po sloupečkách nebo snad dokonce po řádkách, nechť mě osvítí v komentářích. 

function make_column_name($start_row,$add)
{
    $len = strlen($start_row);
    if(!is_int($add)) return false;
    if($len > 2 || $start_row == ) return false;
   
    $start_row = strtoupper($start_row);
    $last_ord = ord($start_row[$len-1]);
    $first_ord = ($len == 1)?false:ord($start_row[0]);
    $first_ret_ord = ($len == 1)?65:$first_ord;
    $to_z = 90-$last_ord;
   
    if($add <= $to_z) return ($first_ord)?chr($first_ord).chr($last_ord+$add):chr($last_ord+$add);
    else
    {
        $add -= ($to_z+1);
        return chr($first_ret_ord+floor($add/26)).chr(65+($add%26));
    }
}

Popularity: 11% [?]

post Primitivní konvertor měn dle ČNB v PHP

February 16th, 2008

Filed under: php — starenka @ 21:56
Tags: , ,

Tenhle týden jsem narazil na potřebu (někoho) mít na stránce blbůstku jménem “Konvertor měn”. Budiž. Je to hodně jednoduché a ne moc oštřené (např. to spoléhá to na slušnost při zadávání parametrů fce…), ale snad to někomu bude sloužit k inspiraci ;) Na začátku je třeba stáhnout data z České Národní Banky, která se uloží do lokálního souboru pro příští požadavky. Data rovnou přechroustáme do pole - co řádek, to položka.

$cache = ‘./cache/cnb_’.date(‘dmY’);
if(!$data = @file($cache))
{
    $uri = ‘http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=’.date(‘d.m.Y’);
    if(!$data = file($uri)) return false;
    else
    {
        $fh = @fopen($cache,‘w+’);
        @fwrite($fh,implode("\n",$data));
        @fclose($fh);
    }
}

Jakmile máme data, ořízneme první dva řádky v souboru, které nepotřebujeme, data projdeme a uložíme do asociativního pole, kde klíči jsou kódy měn a hodnotami jsou jejich kurzy vůči koruně (rate) za dané množství měny (amount) $struct('EUR' => array('amount'=>1,'rate'=>25.225),....). Posléze se už jen zdrojová měna přepočte na koruny a trojčlenka nám vyhodí kýžené číslo :)

$data = array_slice($data,2);
$struct = array();
foreach ($data as $item)
{
    $t = explode("|",$item);
    $struct[$t[3]] = array(‘amount’=>$t[2],‘rate’=>str_replace(‘,’,‘.’,$t[4]));
}

if($src != ‘CZK’) $inczk = (double)$amount/$struct[$src][‘amount’]*$struct[$src][‘rate’];
else $inczk = $amount;
if($tar != ‘CZK’) $div = (double)$struct[$tar][‘rate’]*$struct[$tar][‘amount’];
else $div = 1;

return (double)$inczk/$div;

Celá funkce je k dostání tady:

function get_xrate($amount,$src,$tar)
{
    if($src == ‘CZK’ &amp;&amp; $tar = ‘CZK’) return $amount;

    $cache = ‘./cache/cnb_’.date(‘dmY’);
    if(!$data = @file($cache))
    {
        $uri = ‘http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=’.date(‘d.m.Y’);
        if(!$data = file($uri)) return false;
        else
        {
            $fh = @fopen($cache,‘w+’);
            @fwrite($fh,implode("\n",$data));
            @fclose($fh);
        }
    }

    $data = array_slice($data,2);
    $struct = array();
    foreach ($data as $item)
    {
        $t = explode("|",$item);
        $struct[$t[3]] = array(‘amount’=>$t[2],‘rate’=>str_replace(‘,’,‘.’,$t[4]));
    }

    if($src != ‘CZK’) $inczk = (double)$amount/$struct[$src][‘amount’]*$struct[$src][‘rate’];
    else $inczk = $amount;
    if($tar != ‘CZK’) $div = (double)$struct[$tar][‘rate’]*$struct[$tar][‘amount’];
    else $div = 1;

    return (double)$inczk/$div;
}
 

Popularity: 23% [?]

ruldrurd
© starenka 2oo7, cute alien monster by noizcut, original theme by Laurentiu Piron - customized by starenka | proudly powered by WordPress