Autor Zpráva
Banana
Profil *
Mám stránku a u ní přes proměnné v url vkládám pomocí include další stránky, pochopitelně chci, aby se měnil titulek, ale když do titulku dosadím jednoduché echo $titulek a do vkládané stránky napíšu $titulek="Titulek", tak se titulek stránky nezobrazí, samozřejmě protože na server dorazí nejdřív hlavička, kde je ta proměnná titulek, ale jelikož ještě žádná není, není žádný titulek a hodnota proměnné dorazí až potom, ptám se tedy jak donutit server čekat na proměnnou, nebo jak to řešit?
Str4wberry
Profil
Nejčastější potíže s PHP (FAQ) » Jak předat proměnnou vkládanému souboru
Banana
Profil *
To mi ale nefunguje - strukturu mám nějak takto :
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>     
  <head>      
    <meta http-equiv="content-type" content="text/html; charset=utf-8">      
    <link rel="stylesheet" type="text/css" href="/style.css" media="screen" > 
    <?php 
    echo '<title> '. $title .'</title>';
    ?>              
   </head>
<body>                  
        <div id="obsah">            
          <?php
 $title = 'Titulek'
  include '/obsah.php';
?>             
          </div>                          
  </body>
</html>
a titulek stále prázdnej
Davex
Profil
Banana:
a titulek stále prázdnej
Proměnnou $title vypisuješ v okamžiku, kdy ještě neexistuje. Musí se změnit pořadí - nejdřív nastavit proměnnou, a pak jí teprve vypsat. Na začátku si v rozhodovací logice ulož jméno includovaného souboru také do proměnné a HTML kód stránky posílej úplně nakonec.
Banana
Profil *
Tomu nerozumím, nemohl byste prosím upravit kód výše do podoby takové, jaké myslíte?
Str4wberry
Profil
A četl jsi pozorně?

Máš různé možnosti:

1) Uložit si výstup vkládaného souboru do proměnné, vložit jej před samotnou HTML kostrou stránky a v ní tu proměnnou vypsat.
stranka.php:
$titulek = "Název stránky";
$obsah = <<<EOT
<h1>Název stránky</h1>
<p>Test.
EOT;        
index.php:
<?php include "stranka.php" ?>
<title><?=$titulek?></title>
<div id=obsah>
  <?=$obsah?>
</div>

2) Vytvořit si nějakou funkci, která titulek dosadí nezávisle na vkládaném souboru (podle stejného klíče jako se vkládá obsah):
function zobrazTitulek($adresa) {
  $titulky = array(
    "uvod" => "Úvodní strana",
    "neco" => "Další strana"
  );
  return in_array($adresa, array_keys($titulky)) ? $titulky[$adresa] : "Nevím jaká strana";
}
<title><?php echo zobrazTitulek($_GET["strana"]) ?></title>

3) Volat si ve vkládaném souboru funkci hlavicka("Titulek") s předaným textem titulku, která vrátí HTML kód, co má být před samotným obsahem.

4) Vkládat do obsahu soubory s hlavičkou, navigací nebo patičkou.
<?php include "hlavicka.php"; ?>
<div id=obsah>
  <title>Titulek stránky</title>
  <p>Text stránky
</div>
<?php include "navigace.php"; ?>
<?php include "paticka.php"; ?>

5) Využít toho, že prohlížeče zobrazí i <title> později v kódu.
<div id=obsah>
  <title>Titulek stránky</title>
  <h1>Nadpis stránky</h1>
</div>

6) Doplnit titulek JavaScriptem.
document.title = document.getElementsByTagName("h1")[0].innerHTML;

Postupy 5 a 6 doporučuji použít pouze v krajních případech.
Banana
Profil *
Nešlo by jednoduše vytvořit si nezávisle seznam proměnných, který se vloží před titulek, a pak se zavolá proměnná? Ono jelikož využívám proměnné v url, tak by šla dosadit rovnou i ta, ale šlo by teda případně něco jako
<?php
extract($_GET);
if ($url=="stranka1") {$title=="Stránka 1"}
elseif ($url=="stranka2") $title=="Stránka 2";
elseif ($url=="stranka3") $title=="Stránka 3";
          ?>
a pak
<?php 
    echo '<title> '. $title .'</title>';
    ?> 
Str4wberry
Profil
Tak v podstatě funguje řešení 2, akorát mi přijde napsané přehledněji.
Alphard
Profil
[#7] Banana
Tohle vlákno vidím až teď kvůli odkazu, ale musím i po měsíci dodat, že extract() s EXTR_OVERWRITE se mi jako ukázkový příklad vůbec nelíbí. Všechny před tím varuji.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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