Voorwaardelijke paginaopbouw

Status
Niet open voor verdere reacties.

Toegang

Gebruiker
Lid geworden
10 jun 2003
Berichten
58
Ik ben een meertalige website met frames aan het opzetten met behulp van php4x. De taalafhankelijke teksten plaats ik in arrays, die ik later, afhankelijk van de gekozen taal, oproep.

Bv. $welkom=array(‘hallo’,’hello’,’bien venue’,’buenos dias’)

Om de taal te kiezen plaats ik de vlaggetjes van de landen. Als een bezoeker op de vlag van zijn keuze klikt moet de site ververst worden in die taal. Ik heb het idee dat het met post (van html of php of …) gedaan moet worden maar weet niet waar de klepel hangt en ik kan hem ook niet vinden.

Hoe doe ik dit? Met welke commando's plaats ik de vlaggen? Hoe neem ik de verkregen informatie mee en hoe gebruik ik die vervolgens?
 
Zo zou ik het niet doen als ik jou was. Maar gebruik maken van verschillende `taal`-bestanden.

/includes/header.php
PHP:
<?php
session_start();

// Definieer eerst de toegestane talen met als eerste de standaard taal
$aTalen = array("nl","en","de","fr");


// Controleer of de taal handmatig wordt ingesteld
if (isset($_GET["taal"]) && in_array(strtolower($_GET["taal"]), $aTalen))
    $_SESSION["taalkeuze"] = strtolower($_GET["taal"]);

// Controleer of de taalkeuze in een sessie staat
if (!isset($_SESSION["taalkeuze"])) {

    // Controleer of er reeds een cookie is gezet
    if (isset($_COOKIE["taalkeuze"]))
        $_SESSION["taalkeuze"] = $_COOKIE["taalkeuze"];

    // Controleer of de browser een taal meestuurt
    elseif (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && in_array(strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $aTalen))
        $_SESSION["taalkeuze"] = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]);

    // Anders de standaard taal instellen
    else
        $_SESSION["taalkeuze"] = $aTalen[0];
    }

// De cookie elke keer 28 dagen vernieuwen
setcookie("taalkeuze", $_SESSION["taalkeuze"] ,time()+(28*24*60*60));

// Het taal-bestand includen
// --------------------------
// In dit voorbeeld:
// Nederlands = taal.nl.inc.php
// Engels     = taal.en.inc.php
// Duits      = taal.du.inc.php
// Frans      = taal.fr.inc.php
include("./../language/taal." . $_SESSION["taalkeuze"] . ".inc.php");
?>

/language/taal.nl.inc.php
PHP:
<?php
$lang['Welcome'] = 'Welkom op deze site.';
$lang['Taal'] = 'Nederlands';
$lang['Construction'] = 'Wij zijn nog bezig met de site aan 't maken.';
?>

/language/taal.en.inc.php
PHP:
<?php
$lang['Welcome'] = 'Welkome to this site.';
$lang['Taal'] = 'English';
$lang['Construction'] = 'We\'re still working on the site.';
?>

/index.php
PHP:
<?php
include("./includes/header.php");
require("./templates/lala/header.php");

echo "<a href=\"?taal=nl\">NL</a> | <a href=\"?taal=en\">EN</a><br /><br />
". $lang['Welcome'] ."<br /><br />
". $lang['Construction'] ."<br />";

require("./templates/lala/footer.php");
?>
 
Begreep eerst niet helemaal wat je allemaal aan het doen was. Toen een paar simpele copy pastes uitgevoerd en ja ik krijg antwoord. Dank je wel.

Maar ...
er ligt nog een adder in het gras, zijn naam is FRAMES. Alleen in mijn navigatieframe verandert de tekst naar de gewenste taal; zowel mijn topframe als contentframe zijn Oost-Indisch doof! Zelfs als ik naderhand de deelvensters expliciet ververs.

Heb inmiddels heel wat sites bezocht maar nog geen werkende oplossing gevonden. Hoe?
 
Begreep eerst niet helemaal wat je allemaal aan het doen was. Toen een paar simpele copy pastes uitgevoerd en ja ik krijg antwoord. Dank je wel.

Maar ...
er ligt nog een adder in het gras, zijn naam is FRAMES. Alleen in mijn navigatieframe verandert de tekst naar de gewenste taal; zowel mijn topframe als contentframe zijn Oost-Indisch doof! Zelfs als ik naderhand de deelvensters expliciet ververs.

Heb inmiddels heel wat sites bezocht maar nog geen werkende oplossing gevonden. Hoe?

Mja als ik jou was zou ik geen frames gebruiken. Vrijwel alleen nadelen. Maar gebruik maken van die require() functie zoals je bij die "/index.php" ziet die ik ff snel had gemaakt. Dan kan "./templates/lala/header.php" de navigatieframe en de topframe bevatten. En die footer de footer als die er is.
 
Dank voor je reactie, maar ik kan je niet helemaal volgen. Het eerste punt is duidelijk, frames geven alleen maar problemen. Gebruik van include / require om een standaard deel in elke pagina op te halen is ook duidelijk, maar het layout probleem blijft.

Ik wil ook wel af van de frames maar dan moet ik wel weten hoe. De frames gebruik ik om aan een gewenste layout te komen. Links over het hele scherm de navigatiekolom en over het resterende deel rechts een header- en hoofd-frame. Dat hoofd-frame krijgt dan afhankelijk van de beschikbare ruimte (afhankelijk van schermresolutie en/of monitorvullend of niet) een scrollbar. Met tabellen werken is dan geen optie omdat die geen variabele afmetingen kennen.

Hoe dan wel???
 
Dank voor je reactie, maar ik kan je niet helemaal volgen. Het eerste punt is duidelijk, frames geven alleen maar problemen. Gebruik van include / require om een standaard deel in elke pagina op te halen is ook duidelijk, maar het layout probleem blijft.

Ik wil ook wel af van de frames maar dan moet ik wel weten hoe. De frames gebruik ik om aan een gewenste layout te komen. Links over het hele scherm de navigatiekolom en over het resterende deel rechts een header- en hoofd-frame. Dat hoofd-frame krijgt dan afhankelijk van de beschikbare ruimte (afhankelijk van schermresolutie en/of monitorvullend of niet) een scrollbar. Met tabellen werken is dan geen optie omdat die geen variabele afmetingen kennen.

Hoe dan wel???
In de <head>:
PHP:
<link rel="stylesheet" href="./style.css" type="text/css">

In de <body>:
PHP:
<table>
  <tr>
    <td width="20%">Navigatie</td>
    <td width="80%">
      <table>
        <tr>
          <td width="20%">Header</td>
        </tr>
        <tr>
          <td width=500 height=450>
            <div id="maincontent" class="content">Content</div>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>

En dan in de CSS:
Code:
#maincontent{
  width: 500;
  height: 100%;
  position: relative;
}
.content{
  overflow: auto;
  background-color: #DEDEDE;
  color: #6E6E6E;
  scrollbar-face-color: #DEDEDE;
  scrollbar-highlight-color: #F4F2F2;
  scrollbar-3dlight-color: #F4F2F2;
  scrollbar-shadow-color: #DEDEDE;
  scrollbar-darkshadow-color: #6E6E6E;
  scrollbar-track-color: #DEDEDE;
  scrollbar-arrow-color: #6E6E6E;
}

Maar dit weet ik ook niet helemaal dat is meer een kwestie van uitproberen denk :p. Maar nu onstaat er dus een box met scrollbar als de breedte 500 en de hoogte 450 is.
 
Dank je wel :thumb:,

Ik ga er mee aan de slag, en zal hoe dan ook nog reageren. Hopelijk door deze vraag als opgelost aan te kunnen merken, met vermelding / bevestiging van de werkende oplossing.
 
Om nog even terug te komen op die taal script. Iemand mailde me en zei dat hij er problemen mee had. Ik had em namelijk ook niet getest. Maar zo werkt ie wel:

includes/header.php
PHP:
<?php
session_start();

// Definieer eerst de toegestane talen met als eerste de standaard taal
$aTalen = array("nl","en","de","fr");


// Controleer of de taal handmatig wordt ingesteld
if (isset($_GET["taal"]) && in_array(strtolower($_GET["taal"]), $aTalen))
    $_SESSION["taalkeuze"] = strtolower($_GET["taal"]);

// Controleer of de taalkeuze in een sessie staat
if (!isset($_SESSION["taalkeuze"])) {

    // Controleer of er reeds een cookie is gezet
    if (isset($_COOKIE["taalkeuze"]))
        $_SESSION["taalkeuze"] = $_COOKIE["taalkeuze"];

    // Controleer of de browser een taal meestuurt
    elseif (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && in_array(strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $aTalen))
        $_SESSION["taalkeuze"] = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]);

    // Anders de standaard taal instellen
    else
        $_SESSION["taalkeuze"] = $aTalen[0];
}

// De cookie elke keer 28 dagen vernieuwen
setcookie("taalkeuze", $_SESSION["taalkeuze"] ,time()+(28*24*60*60));

// Het taal-bestand includen
// --------------------------
// In dit voorbeeld:
// Nederlands = taal.nl.inc.php
// Engels     = taal.en.inc.php
// Duits      = taal.du.inc.php
// Frans      = taal.fr.inc.php
include("./language/taal." . $_SESSION["taalkeuze"] . ".inc.php");
?>

language/taal.nl.inc.php
PHP:
<?php
// let op dat je voor ' een \ doet bij de tekst.
$lang['Welcome'] = 'Welkom op deze site.';
$lang['Taal'] = 'Nederlands';
$lang['Construction'] = 'Wij zijn nog bezig met de site aan \'t maken.';
?>

language/taal.eng.inc.php
PHP:
<?php
// let op dat je voor ' een \ doet bij de tekst.
$lang['Welcome'] = 'Welkome to this site.';
$lang['Taal'] = 'English';
$lang['Construction'] = 'We\'re still working on the site.';
?>

index.php
PHP:
<?php
include("./includes/header.php");

echo "<a href=\"?taal=nl\">NL</a> | <a href=\"?taal=en\">EN</a><br /><br />
". $lang['Welcome'] ."<br /><br />
". $lang['Construction'] ."<br />";

?>
 
Ik zie het al: het bestand language/taal.eng.inc.php moet heten language/taal.en.inc.php (en ipv eng)


Hallo Kleinnico,

Ik doe alles precies zoals je aangeeft, echter het NL linkje doet het wel, maar het EN linkje geeft een lege pagina. Zit er misschien nog een foutje in?

Bertus.

- - - - - - - - - - - - - -

Om nog even terug te komen op die taal script. Iemand mailde me en zei dat hij er problemen mee had. Ik had em namelijk ook niet getest. Maar zo werkt ie wel:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan