Tlačítko zpět v PHP

Ukázka, jakým způsobem lze řešit tlačítko zpět. Filosofické úvahy typu "proč suplovat na stránkách funkci prohlížečů" pominu a ukážu pouze praktické řešení s alternativou v javascriptu.

Vystačíte-li si s javascriptem, stačí udělat velmi jednoduchý odkaz.

<a href="javascript:history.go(-1)">Zpet</a>

Následující kód se podívá do historie prohlížeče a zobrazí předposlední zobrazenou stránku.

Jistě, je to řešení. Ale má to malinkou vadu na kráse. To, že si javascript může člověk vypnout sice je argument, ale v dnešní době by si takový člověk moc stránek asi nezobrazil.

Dalším argumentem proti javascriptu může být fakt, že návštěvník přišel z vyhledávače nebo katalogu. Výše zmíněný kód by návštěvníka po stisku odkazu „zpět“ vrátil na vyhledávač, což asi také např. majitel eshopu nechce. I tento problém lze vyřešit pomocí javasciptu.

<a href="javascript:history.go('pecan.cz')">Zpet</a>

Tento kód návštěvníka vrátí na poslední navštívenou stránku, která obsahuje „pecan.cz“. Takový odkaz „zpět“ ale může vést za určitých okolností ke zmatení návštěvníka.

PHP

Následující řešení v php bude zobrazovat odkaz zpět pouze tehdy, má-li to význam.

Využijeme sessions a dvě funkce, které se nám budou o sessions starat. Funkce budou uložené v externím souboru funkce.php.

<?php
/**
* Správa session, zaznamenávání historie navštívených stránek.
*/
function GoBackHandler()
{
  // spočítáme počet klíčů v poli
  $pocet = count($_SESSION['BACK_URL']);

  // pokud není poslední položka stejná jako aktuální stránka budeme pokračovat
  if($_SESSION['BACK_URL'][$pocet - 1] != $_SERVER['REQUEST_URI'])
  {
    // pokud se nejedná o krok zpět, přidáme aktuální stránku do session
    if(!isset($_GET['GoBack']))
    {
      $_SESSION['BACK_URL'][] = $_SERVER['REQUEST_URI'];
    }
    else
    {
      // jedná se o krok zpět, poslední položku v poli tedy chceme smazat.
      if(is_array($_SESSION['BACK_URL']))
      {
        // smažeme poslední položku v poli.
        array_pop($_SESSION['BACK_URL']);
      }
    }
  }
}// GoBackHandler


/**
* Funkce vrací odkaz na poslední navštívenou stránku.
* @return string
*/
function GoBackLink()
{
  // je pole?
  if(is_array($_SESSION['BACK_URL']))
  {

    /*
    echo "<pre>";
    var_dump($_SESSION['BACK_URL']); // pomoc při testování - echuje obsah session
    echo "</pre>";
    */


    // spočítá počet prvků v poli a vrátí nám klíč předposledního pole.
    $last = count($_SESSION['BACK_URL']) - 2;

    // pokud takový klíč pole existuje, vypíše odkaz zpět
    if(array_key_exists($last, $_SESSION['BACK_URL']))
    {
      // Spočítáme, kolik je v posledním odkazu otazníků. Do odkazu potřebujeme dát informaci, že se jedná o krok zpět.
      $question_mark  = substr_count($_SESSION['BACK_URL'][$last],"?");
      if($question_mark  >= 1){
        $QueryString = "&GoBack";
      }else{
        $QueryString = "?GoBack";
      }

      // Vrátíme odkaz na stránku zpět.
      return "<a href='".$_SESSION['BACK_URL'][$last].$QueryString."'>Zpět</a>";
    }
  }
  return false;
} // GoBackLink
?>

Praktická ukázka použití funkcí:

<?php
  session_start(); // nastartujeme session - musí být na každé stránce!
  include_once "funkce.php";

  GoBackHandler(); // Správa historie.
?>
<html>
  <head>
    <title>Zpět v php</title>
  </head>
  <body>
    Text....
    <?php
      echo GoBackLink(); // zobrazení odkazu "Zpět"
    ?>
  </body>
</html>

Funkční online ukázku naleznete na adrese pecan.cz/ukaz­ky/zpet.

Stažení ukázkového příkladu – zde.


<Starší | tento článek | Novější

Napsáno: 20. 5. 2008, 13:09 | Přečteno: 49737x | Kategorie: PHP Skripty | Napsal: peCan.cz |
Víš kdy má blecha největší strach? ??? Když skáče z jedné půlky prdele na druhou.
Petr Graubner | ICQ- 264912843, Jabber - pecan27@njs.netlab.cz | RSS | Šlape na miniRS | Styl CoolStyle | Zpracováno za: 0.117s | Počet SQL dotazů ve fóru: 1 | Admin