Black friday Black friday
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací
Pouze tento týden slevy až 80 % na programování v Javě

Diskuze: PHP - změna title

PHP PHP PHP - změna title American English version English version

Aktivity (1)
Avatar
Insight
Člen
Avatar
Insight:31.12.2018 15:33

Ahoj. Chtěl bych se zeptat, zda existuje nějaké lepší řešení změny titulku stránky. Mám 1 soubor, index.php, v něm natvrdo hlavičku a patičku. A obsah skládám z podstránek pomocí include();, ovšem title v jednotlivých podstránkách definovat nemůžu, jelikož je volám po hlavičce.

Zkusil jsem: Vytvořil jsem další .php soubor, který volám přímo v hlavičce. V něm mám switch, který mění title podle $_GET[];
takto:

if (isset($_GET['podstranka']))
  {
      $stranka = $_GET['podstranka'];
  }
  else
  {
      $stranka = 'prvni';
  }
  $titulek = "";

  switch($stranka)
  {
    case "prvni" :
      $titulek = "První stránka";
      break;

    case "druhy" :
      $titulek = "Druhá stránka";
      break;

echo('<title>' . $titulek . '</title>');

Hlavička v index.php vypadá následovně:

<head>
    <link rel="stylesheet" type="text/css" href="styly.css" />
    <?php
        include('sablony/titulek.php');
    ?>
</head>

Chci docílit: Existuje tedy nějaké lepší řešení?
Děkuji

Editováno 31.12.2018 15:35
 
Odpovědět 31.12.2018 15:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.12.2018 16:17

Cele to mas takove divne. Normalne si na to clovek vytvori funkci, ulozi do promene a vypise pres echo promenou.

--- inc/func.php ---
function titulek () {...}

--- stranka.php ---
$page = array();
$page['stranka '] = stranka($_GET);
$page['title'] = $page['stranka '];

Nebo lepe, udelej si na to class primo s funkcemi pro generovani stranky.

Jinak, slo by to tez resit pres pole.

$stranka_all = array(
'aaa.htm' => array('titulek'=>'xxx'),
'bbb.htm' => array('titulek'=>'xxx'),
'ccc.htm' => array('titulek'=>'xxx'),
'error.htm' => array('titulek'=>'xxx')
);
$x = isset($_GET['mmm']) ? $_GET['mmm']: '';
$x = isset($stranky_all[$x]) ? $x : 'error.htm';
$stranka = $stranky_all[$x];
 
Nahoru Odpovědět 31.12.2018 16:17
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Insight
Jirka Jr:8. ledna 14:03

pamatuju si, jak jsem taky takhle programoval a ten problém s titulkem mi taky způsoboval depresi :-)

problém je právě v tom, co jsi popsal.... tedy, že titulek vypisuješ dřív, než se vůbec začne vykonávat kód stránky

řešením je úplně oddělit výkonný kód od vypisování výstupu... tedy nejdřív všechno připravit do proměnných a pak teprve vsechno nacpat do html a poslat ven

výsledné pořadí provádění:

  1. kód stránky, který naplní proměnné včetně včetně titulku
  2. výpis hlavičky včetně titulku z proměnné
  3. výpis stránky pomocí již naplněných proměnných
  4. výpis patičky

timto máš kód podle honosných termínů MVC rozdělen na 3 části....

  1. index. php - controller
  2. stranky/$stran­ka.php - model
  3. sablony/... - view

a také je timto postupem zavedeno použití šablon

a teď malý příklad:

index. php

$stranky = ["home", "about", "kontakt", "produkty"] ;
$stranka = "home" ;
if( in_array($_REQUEST["stranka"], $stranky, true) === true)
{
    $stranka = $_REQUEST["stranka"] ;
}

$data = []; // inicializace pole promennych sablony
include("stranky/$stranka. php") ;

include("sablony/hlavicka. php");
include("sablony/stranky/$stranka. php");
include("sablony/paticka.php");

stranky/home. php

$data["titulek"] = "Vítej!":
$data["čas"] = "teď";

sablony/hlavicka. php

<html>
    <head>
         <link rel="stylesheet" type="text/css" href="styly.css" />
        <title>
            <?php echo $data["titulek"]; ?>
        </title>
</head>

sablony/stran­ky/home.php

<h1>Vítej u nás.</h1>
<p>
    Aktuální čas je právě <?php echo $data["cas"];  ?>
</p>

další level je zabalit kód do funkcí, aby se nám v globálním prostoru nepotulovaly proměnné

a další level je pohrát si s objekty a zabalit kód do tříd (pokud ovšem nejsi zarytý příznivec funkcionalniho paradigmatu :-) )

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 8. ledna 14:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.