Witam!
Na początku przedstawię sytuację a później efektu którego nie rozumiem.
Mam taką strukturę pliku wyświetlającego stronę oraz podstrony:
<?php
session_start();
$podstrona = '';
$style_dla_podstrony = '';
if ( (isset($_GET['c']) && ($_GET['c'] == 1) )
{
$podstrona = 'podstrona_1.php';
require_once("tablica_z_jezykiem_dla_podstrona_1.php");
require_once("tablica_ze_stylami_dla_podstrona_1.php"); }
else
{
$podstrona = 'start.php';
require_once("tablica_z_jezykiem_dla_start.php");
require_once("tablica_ze_stylami_dla_start.php");
}
?>
<html>
<head>
<?php foreach($style_dla_podstrony as $i) {
echo '<link rel="Stylesheet" type="text/css" href="css/' .$i. '.css"/>'
} ?>
</head>
<body>
<main>
<article>
<?php require_once($podstrona); ?>
</article>
</main>
</body>
Wyjaśnienie, każda podstrona różni się zawartością w środku, pasek nawigacyjny jest ten sam dla każdej podstrony więc to która podstrona jest wczytywana podaję w parametrze GET. Dla każdej podstrony mam osobną tablicę z językiem polskim i angielskim oraz ze stylami dla zawartości aby nie wczytywać ich dla podstrony która ich nie będzie używała. Jeżeli użytkownik wybrał język polski to wypełniam tą tablicę zdaniami, wyrazami w języku polskim jeżeli użytkownik wybrał język angielski to wypełniam tą tablicę językiem angielskim ta tablica to $lang ( identyczna nazwa dla każdej podstrony ). Wyświetlam tekst z tej tablicy w taki sposób: <?php echo '<p>' . $lang['tekst'] . '</p'>; ?>. Plik .php w który jest tablica z językiem wygląda tak:
<?php
$lang = Array();
$lang['text'] = "To jest napis po polsku";
// ...
// ...
?>
Dla innego języka jest identyczny tylko różnica polega na tym że jest w innym języku.
Przedstawienie problemu:
Dlaczego sokoro tworzę tablicę $lang na początku pliku z językiem dla którego jest globalna i dołączam je za pomocą require_once w instrukcji warunkowej to ona w dalszej części kodu php istnieje ? Nie powinna zostać usunięta ? Jeżeli plik z językiem dołączę w funkcji w identyczny sposób to już tej zmiennej nie będzie. Rozwiązanie to dodać do głównego pliku $lang i później w pliku językiem podać prefiks global ale dlaczego tak jest ?
Identycznie z session_start(), tej instrukcji muszę użyć na początku każdego pliku php który korzysta z tablicy $_SESSION ale gdy na początku pliku dodam tą instrukcję a później dołączę plik za pomocą np. require_once to w tym dołączonym pliku korzystanie z tej tablicy nie sprawia problemu bez użycia session_start czy to jest normalne ? Co jeżeli mieszam HTML z php w sposób "brutalny" tzn.
<label><?php echo $lang['text_dla_label] ; ?></label>
<input type="text" name="napis">
<input type="submit" value= <?php echo '"' . $lang['napis_na_przycisku'] . '"'; ?> >
Plik z takimi instrukcjami jest dołączony do pliku za pomocą require_once na początku piku w którym jest session start i taki plik działa bez problemu ale czy nie jest to zakazane i w każdym bloku <?php ?> powinno być session_start() ?
Swoją drogą to zamiast mieszać tak php z HTML to chyba lepiej już zapakować to w jedną instrukcję php wyświetlającą cały napis/przycisk.
Z poważaniem.