Autor Zpráva
shaman171
Profil
Ahoj,
potřeboval bych udělat měnící se text na stránce. Mám kód, který mi zobrazuje výpis *ini souboru, kde každý řádek je na každý den, přiložím kód:
<?php
$data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini');//načte pole, kde číslo dne bude asociativní klíč
$dates = array();


$days = array(
    1    => 'ledna',
    'února',
    'března',
    'dubna',
    'května',
    'června',
    'července',
    'srpna',
    'září',
    'října',
    'listopadu',
    'prosince',
);



$today_date = date("Ymd"); 
foreach ($data as $i => $line) 
{
    $likeunix = str_replace("-", "", $i);
    $unix     = strtotime($i);
    

    
    if ($today_date <= $likeunix)
    {
        
        $day      = date("d", $unix);
        $month    = date("m", $unix);
        $year     = date("Y", $unix);    
        
        if ($month{0} == '0')
            $month = substr($month, 1);
            
        echo $line . "<br />";
    }
    
    
}
?>

A soubor *ini vypada:
2012-06-17 =  " hrušky  "                            
2012-06-24 =  " banány  "               
2012-08-19 =  " kiwi  "    
2012-09-30 =  " jahody  "  
2012-10-07 =  " jablka  " 

No a na internetu jsem si našel jak udělat ten měnící se text.

Ale teďka bych to potřeboval spojit, tedy ve výsledku by to mělo fungovat tak, že ten PHP kód by načetl do proměnných ty řádky z *ini souboru, které jsou aktuální, tedy od toho určitého dne až do konce a ten zbylý kód je v určitém intervalu měnil tak, aby vždycky byl vidět jen jeden řádek a cyklicky by se opakovaly.
Snad jsem to vysvětlil dostatečně.
Mockrát děkuju za každou radu.
Darker
Profil
Budeš muset asociativní pole vrácené INI parserem procházet cyklem for - pomocí array_keys() a array_values() si uděláš dvě pole která pro stejný index vrátí odpovídající datum a ovoce.
Pak budeš moci ověřovat, zda je aktuální datum mezi zkoumaným a příštím ($i+1) datumem.

shaman171:
if ($month{0} == '0')
date() má pro většinu časových hodnot i parametry bez přidaných nul:
n - Numeric representation of a month, without leading zeros - 1 through 12
shaman171
Profil
No problém je, že já vůbec nevím co jsi mi napsal, ten kód mi už někdo jiný udělal a já si ho jen doupravil se základníma znalostma co mám. Nemůžeš mi řešení nějak nastínit?
Děkuju moc
Darker
Profil
shaman171:
Nemůžeš mi řešení nějak nastínit?
Mám za to, že to co jsem stvořil je docela sytý stín. Vzhledem k tomu, že nevím čeho se přesně snažíš docílit (s datumy danými na ROK to asi cyklení nebude, že), prozačátek bych zkusil strčit break na konec if. Konkrétně za ř. 41 (ale před závorku).
To by mělo způsobit, že se vždy vypíše jen první hodnota, která odpovídá pak break cyklus ukončí.
Navrhl bych to už předtím, ale napadlo mě to až teď.
shaman171
Profil
Kód který tam je teď mi vždycky vypíše obsah toho ini souboru pod sebe všechny datumy co tam jsou, je tam vždy max 10 datumů dopředu. A vypíše je to prostě pod sebe ale já bych potřeboval, aby mi ten kód ke každému řádku přiřadil proměnnou a ty já bych poté načítal tím java scroptem a udělal bych si z toho ten měnící se text.

A nebo úplně jinak, mám *ini soubor toho tvaru který je popsán výše a potřebuju udělat, aby nějaký kód načítal jednotlivé řádký od aktuálního data do budoucnosti a udělal z nich měnící se text na stránkách, kdy bude vždycky vidět jen jeden řádek (prostě bude problikávat kiwi -> zmizí a objeví se jahody ty zmizí a objeví se banány atd atd..
Možná to tím mým řešením je moc složitý a šlo by to udělat jednodušeji.
Darker
Profil
Prostě vybereš jednotlivé hodnoty, které vyhovují, ty nacpeš do pole a vypíšeš jako json:
/*...*/
$cyklene = array();
foreach ($data as $i => $line) 
{
/*...*/
    if ($today_date <= $likeunix)
    {
        
        $day      = date("d", $unix);
        $month    = date("n", $unix);
        $year     = date("Y", $unix);    
        

        $cyklene[]=$line;    
        echo $line . "<br />";
    }
    
    
}
echo "<script>var CYKLI = ".json_encode($cyklene).";</script>\n";
Pak budeš mít js funkci:
function cykli(pauza,id) {
  if(id==null||window.CYKLI[id]==null)   //Kontrola zda id existuje a je použitelné
    id=0;
  document.getElementById("cykleny").innerHTML = window.CYKLI[id];
  setTimeout(function() {cykli(pauza,id+1);}, pauza);
}
A HTML:
<div class="zbytecna_a_otravna_animace">Máme rádi<span id="cykleny"></span></div>
shaman171
Profil
Mockrát děkuju, jen ten PHP dokument není celý že? Místo těch tečkovanejch komentářu má něco být, ale já nemůžu přijít na to jaké části stávajícího kódu tam přijdou.
Mockrát děkuju za trpělivost.
Darker
Profil
shaman171:
jaké části stávajícího kódu tam přijdou.
Přesně ty co jsou v [#1], ale ne v [#6].
shaman171
Profil
Mohl by pak výsledný soubor vypadat takto?
<script type="text/javascript" language="javascript">
function cykli(pauza,id) {
  if(id==null||window.CYKLI[id]==null)   //Kontrola zda id existuje a je použitelné
    id=0;
  document.getElementById("cykleny").innerHTML = window.CYKLI[id];
  setTimeout(function() {cykli(pauza,id+1);}, pauza);
}
</script>

<?php
$data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini');//načte pole, kde číslo dne bude asociativní klíč
$dates = array();


$days = array(
    1    => 'ledna',
    'února',
    'března',
    'dubna',
    'května',
    'června',
    'července',
    'srpna',
    'září',
    'října',
    'listopadu',
    'prosince',
);



$cyklene = array();
foreach ($data as $i => $line) 
{
    $likeunix = str_replace("-", "", $i);
    $unix     = strtotime($i);
    

    
    if ($today_date <= $likeunix)
    {
        
        $day      = date("d", $unix);
        $month    = date("n", $unix);
        $year     = date("Y", $unix);    
        
 
        $cyklene[]=$line;    
        echo $line . "<br />";
    }
    
    
}
echo "<script>var CYKLI = ".json_encode($cyklene).";</script>\n"; 
echo "<div class=\"zbytecna_a_otravna_animace\">Máme rádi<span id=\"cykleny\"></span></div>";
?>

Nicméně to takto nefunguje a vypíše to celý ini soubor
Darker
Profil
shaman171:
Nevidím tam nikde break, o kterém jsem mluvil. Takže asi není čemu se divit.
shaman171
Profil
Přidal jsem na řádek 50 před závorku "break;", pak to nenačte celý ini soubor, ale jen jeho prnví řádek a k tomu to vypíše "Máme rádi". Nějak tomu nerozumím.
Darker
Profil
shaman171:
Nějak tomu nerozumím.
Špatně jsem pochopil, které hodnoty se mají vypsat. Ty se snažíš vypsat všechny hodnoty VĚTŠÍ než aktuální datum. V tom případě žádný break není potřeba a ty máš patrně blbě porovnávání.
Taky ses vykašlal na ř. 23 z [#1].
shaman171
Profil
Když jsem to upravil, odstranil break; a přidal řádek 23 z [1] tak to funguje jako na úplném začátku, vypíše to hodnoty větší než aktuální datum, ale jen je to vypíše a nic se nemění.
Darker
Profil
O tom pochybuji. Můžeš odstranit řádek 46, ten tam byl asi jen pro testování.
Jestli to vypíše/nevypíše jsou netuším, každopádně nikde nespouštíš javascriptovou funkci cykli(). Takže se nic neděje.
shaman171
Profil
Nevím přesně co myslíš řádkem 46, prootže tady je prázdný?
Aha a jak spustím tu funkci?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: