Autor Zpráva
tomsonrecord
Profil
Dobrý den,
načítám více souborů se stejnými proměnnými do index.php
<?php
include "./01.php";
include "./02.php";
include "./03.php";
?>

struktura include souborů:
<?php
$CISLO = '01';
$NADPIS = 'NADPIS 01';
$ABSTRAKT = 'ABSTRAKT 01';
$ODSTAVEC1 = 'PRVNÍ ODSTAVEC 01';
?>

Jak prosím roztřídit proměnné, aby je bylo možné separovaně použít v rámci index.php?

např. takto:

<body>
//clanek 01 s proměnnými z 01.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>

//clanek 02 s proměnnými z 02.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>

//clanek 03 s proměnnými z 03.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>
</body>


Děkuji.
ts_istudio
Profil
tomsonrecord:

Nad každé
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>

dej include jednoho z těch souborů.
Sir Tom
Profil
tomsonrecord:
Také dobrý den,

použij řešení ts_istudio, nebo (lépe) zkus pouvažovat o změně struktury vkládaných informací - např. můžeš použít databázi (MySQL), popř. XML.
tomsonrecord
Profil
ts_istudio:
Děkuji, paráda. :)
Sir Tom:
XML ani MySQL bohužel neumím :(
Prozatím zkoumám vody PHP
tom.rossi
Profil *
foreach(glob(dirname(__FILE__).'/*.php') as $item){
  include_once($item);
  echo sprintf('<h1>%s</h1>',$nadpis);
  echo sprintf('<p>%s</p>',$abstrakt);
  echo sprintf('<p>%s</p><hr />',$odstavec1);
}



Předchozí příklad by includoval všechny *.php, což není to pravé ořechové, ale pokud dáš vkládaným souborům nějaký prefix nebo suffix (třeba inc), který budou mít pouze soubory určené k vložení, dá se to dobře použit a pak už ti jen stačí dohrávat do příslušné složky soubory s sufixem inc bez toho abys musel kvůli každému upravovat kód. V tom případě je ale nutné upravit šablonu pro procházení souborů:
foreach(glob(dirname(__FILE__).'/*.inc.php') as $item){
  include_once($item);
  echo sprintf('<h1>%s</h1>',$nadpis);
  echo sprintf('<p>%s</p>',$abstrakt);
  echo sprintf('<p>%s</p><hr />',$odstavec1);
}



No a nakonec kombinace echo a sprintf je zbytečná, páč v když to jdde rovnou na výstup stačí použít printf. Njn práce kvapná málo platná. Jdu si raděj hledět svého :-) Good luck při dalších pokusech s PHP
Joker
Profil
tom.rossi:
Jednak to nebude fungovat a jednak to teoreticky do skriptu vloží všechny PHP soubory nacházející se ve stejném adresáři, takže jaký to má smysl?

Dodatek: Ani po úpravě to pořád nebude fungovat. Tazatelův skript musí vložit jen jeden soubor (ten správný), ne všechny.
tom.rossi
Profil *
Joker:
A vyzkoušel jsi to? ;-) (ten druhý příklad, první by tam nahrnul všechny php, přesně jak píšeš, ale to jsem vzápětí opravil)


Já to pochopil tak, že ma několik souborů a každý obsahuje stejnou proměnnou, ale s jinými hodnotami. Zkoušl jsi to patrně špatně. Je fakt, že jsem to psal z ruky, ale mělo by to jet. No dohadovat jsem se sem nepřišel.


Tak jsem to vyzkousel a funguje to paradne. Mozna sis jen neupravil velikost pisma v nazvu promennych ;-) Ja to tam nahrkal aniz bych si uvedomil, ze tazatel ma nazvy promennych velkymi pismeny.


Takze tento kod ti musi fungovat:
foreach(glob(dirname(__FILE__).'/*.inc.php') as $item){
  include_once($item);
  printf('<h1>%s</h1>',$NADPIS);
  printf('<p>%s</p>',$ABSTRAKT);
  printf('<p>%s</p><hr />',$ODSTAVEC1);
}
Předpokladem samozřemě je, že ma inc soubory ve stejném adresáři jako tento soubor.


Joker:
příště opatrně s tvrzením, že něco nebude fungovat. Nejdřív to vyzkoušej a případně napiš proč si myslíš, že to nepojede, než začneš něčí nápad kritizovat. Troška diplomacie není občas na škodu ;-) Myslím, že jsem nepochopil zadání špatně protože výstupem mého kódu je přesně to, co tazatel popisuje tedy
<body>
//clanek 01 s proměnnými z 01.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>
 
//clanek 02 s proměnnými z 02.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>
 
//clanek 03 s proměnnými z 03.php
<?=$NADPIS?></h1>
<p><?=$ABSTRAKT?></p>
<p><?=$ODSTAVEC1?></p>
Joker
Profil
tom.rossi:
Já to pochopil tak, že ma několik souborů a každý obsahuje stejnou proměnnou, ale s jinými hodnotami.
Má několik souborů, ve kterých jsou uložené různé hodnoty těch proměnných.
Podle toho, jaký článek chce zobrazit, potřebuje vložit příslušný include soubor.
Tak jsem to pochopil já.

Tak jsem to vyzkousel a funguje to paradne.
Opravdu?
Já bych řekl, že když každý z těch souborů bude nastavovat hodnoty stejné sadě proměnných, budou výsledkem toho kódu hodnoty ze souboru, který se vloží jako poslední.

Oprava: Tak ne, bude to fungovat
tom.rossi
Profil *
Joker:
Tak si to VYZKOUŠEJ!!! Proč to asi proháním tím cyklem a include dávám dovnitř?! Probůh kuře chce učit slepici lítat. Trošku pokory doporučuju :-D


Pokud to pouštiím rovnou na výstup, tak bude výsledek takový, jaký chce tazatel. Pokud bych to dával do proměnné a teprve tu pouštěl po ukončení cyklu na výstup, tak pak by jsi za určítých okolností měl pravdu. Ale i tak si dovolím nesouhlasit. Viz:
$content = '';
foreach(glob(dirname(__FILE__).'/*.inc.php') as $item){
  include_once($item);
  $content.=sprintf('<h1>%s</h1>',$NADPIS);
  $content.=sprintf('<p>%s</p>',$ABSTRAKT);
  $content.=sprintf('<p>%s</p><hr />',$ODSTAVEC1);
}
echo $content;

vyhodí stejný výsledek jako můj předchozí kód. Pročpak? Víme?

Aby se to chovalo jak popisuješ try, tak by kód musel vypadat takhle:

foreach(glob(dirname(__FILE__).'/*.inc.php') as $item){
  $content = '';  
  include_once($item);
  $content.=sprintf('<h1>%s</h1>',$NADPIS);
  $content.=sprintf('<p>%s</p>',$ABSTRAKT);
  $content.=sprintf('<p>%s</p><hr />',$ODSTAVEC1);
}
echo $content;

Pokud by tam nebylo to .= tak se nezobrazi nic nez posledni polozka. Tedy obsah promenne $ODSTAVEC z posledniho clanku.
Je to marný, je to marný, je to marný... Než se začneš dohadovat doporučuji vyzkoušet. Toto mě umí vždycky pobavit :-D
1Pupik1989
Profil
tom.rossi:
Joker si myslel, že výstup je až za cyklem. Tím pádem by tam byla pouze poslední hodnota. :)
foreach(glob(dirname(__FILE__).'/*.inc.php') as $item){
  include_once($item);
}
printf('<h1>%s</h1>',$NADPIS);
printf('<p>%s</p>',$ABSTRAKT);
printf('<p>%s</p><hr />',$ODSTAVEC1);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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