Jednoduchý systém zobrazování novinek bez databáze

Úvod do problému

Při úpravách stránek můžete mít potřebu na Vašich stránkách zobrazovat seznam novinek, ať už se jedná o novinky typu úprav na stránkách nebo o zobrazování novinek v nabídce produktů a podobně (viz například většina stránek mého webu).

Pokud nemáte zkušenosti s používáním databáze (tak jako já) nebo pokud ji nechcete nebo nemůžete použít, ale přesto máte možnost používat PHP, pak je následující řešení určeno právě pro Vás.

Řešení problému

Problém budeme řešit tak, že si vytvoříme jeden textový soubor, který bude obsahovat všechny novinky a dále vytvoříme funkci, která bude novinky z tohoto souboru číst a zobrazovat je.

Vytvořil jsem funkci GetNews, která tuto činnost zajišťuje. Funkce má dva parametry - $dataFile a $All. Parametr $dataFile definuje cestu k textovému souboru s novinkami, parametr $All určuje, zda se mají zobrazit všechny novinky ze souboru nebo jen jejich část.

Vzhled funkce

<?php
//deklarace proměnné se jménem souboru novinek
$dataFile = "./news.txt";

/*
Proměnná $dataFile definuje jméno datového souboru (např. news.txt) a měla by být deklarována ve stránce,
kde se má funkce použít (teď je použita zde, ale může být kdekoliv jinde před vlastním použitím funkce).

Struktura souboru je následující:
#nadpis - to co bude napsáno tady se vloží do <h4></h4>
text novinky <a href="odkaz">odkaz</a> atd. - to co bude napsáno tady se vloží do <p></p>

Proměnná $All je typu boolean a určuje, zda se má zobrazit jen prvních X (v tomto příkladu 3) novinek
nebo všechny (když je True, tak se zobrazí všechny)
*/

function GetNews($dataFile, $All)
{
  $dataCnt = 0;

  //kontrola existence souboru
  if (File_Exists($dataFile)):
    //otevreni souboru
    $fp = FOpen($dataFile, "r");
    //pokud byla chyba, tak konec
    if (!$fp) return;
    //nacitam v cyklu radky souboru
    do
    {
      //nacteni radku
      $Row = FGetS($fp, 32700);
      //pokud byla chyba, tak konec cyklu
      if (!$Row) break;
      //odstraneni prebytecnych mezer
      $Row = Chop($Row);
      //pokud je retezec neprazdny, tak pracuj
      if (StrLen($Row) > 0):
        //kdyz je na prvni pozici #, je to nadpis
        if (SubStr($Row, 0, 1)=="#"):
          //zpracovani nadpisu
          //inkrementace poctu nadpisu

          $dataCnt = $dataCnt + 1;
          //pokud je vic jak trti, tak konec cyklu
          if (!$All and ($dataCnt > 3)) break;
          //odstraneni prvniho znaku
          $Row = Chop(SubStr($Row, 1, StrLen($Row)));
          //vypsani nadpisu - h3 je mozne zmenit na jiny typ nadpisu
?>
        <h3><?php echo $Row; ?></h3>
<?php
        else:
          //pokud neni nadpis, vypis text jako odstavec
?>
        <p><?php echo $Row; ?></p>
<?php
        endif;
      endif;
      //když se nezobrazují všechny novinky, tak po třetí novince skončím
      if (!$All and ($dataCnt > 3)) break;
    //ctu radky az do konce souboru
    } while (!FEof($fp));
    //zavreni souboru
    FClose($fp);
    //pokud se zobrazuje jen cast ($All == False)
    if (!$All):
      //a pokud je pocet nadpisu ruzny od 0
      if ($dataCnt<>0):
      //vypis odkaz na vsechny novinky
?>
        <p><a href="novinky.php">Zobrazit všechny novinky</a></p>
<?php else:
      //nebyly zadne nadpisy = nejsou novinky
?>
        <p>V současné době nejsou k dispozici žádné novinky.</p>
<?php
      endif;
    else:
      //zobrazuji se vsechny novinky, ale
      if ($dataCnt==0):
      //nebyly zadne nadpisy = nejsou novinky
?>
        <p>V současné době nejsou k dispozici žádné novinky.</p>
<?php
      endif;
    endif;
  else:
  //vypis chyby
?>
        <p>Seznam novinek se nepodařilo načíst.</p>
<?php
    return;
  endif;
}
?>

Výsledek

Více informací o struktuře textového souboru s novinkami a o použití funkce získáte z ukázkového příkladu nebo si můžete stáhnout celý projekt (soubor novinky.zip).


Přeskočit na obsah


Navigace