Door
Snelle Jaap
op 07-02-2017 11:37
gewijzigd op 07-02-2017 14:52
3.241 views
Ik heb een stukje code om van taal te switchen op mijn site. Dat werkt prima behalve op dynamische pagina's. Als ik bijvoorbeeld de taal aanpas op de index.php dan onthoud hij dat overal maar ik kan de taal alleen aanpassen op index.php contact.php en andere vaste paginas.
Als ik de taal wil aanpassen op bijvoorbeeld service-naam.html (in werkelijkheid content.php op de server) dan gebeurd er niets. Hij blijft altijd op de taal die al gekozen is op een niet dynamische pagina.
Waar kan dat aan liggen?
Hier het stuk waarmee je de taal kiest:
<?
$actual_link = 'http://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?');
<a href="<? echo $actual_link; ?>?lang=en" class="btn-selector">EN</a>
<ul>
<li class="active"><a href="<? echo $actual_link; ?>?lang=en">EN</a></li>
<li><a href="<? echo $actual_link; ?>?lang=fr">FR</a></li>
<li><a href="<? echo $actual_link; ?>?lang=nl">NL</a></li>
</ul>
?>
En dit staat bovenaan mijn connection file:
<?
session_start();
if ($_GET['lang'] != '') {
$_SESSION['lang'] = $_GET['lang'];
} else if ($_SESSION['lang'] == '') {
$_SESSION['lang'] = 'nl';
}
?>
Ik snap dat jou echt niet.
Wat is nou 3 letters meer tikken zoveel sneller als short hand werken?
Terwijl als je short hand doet je niet de if-jes en else-jes e.d. niet mee pakt.
Op zich kan ik short hand wel waarderen.
Als je een flinke lap html met php moet mixen, dan is het mooi dat je die twee op die manier mooi kan scheiden.
Ik vind het overigens wel een typische vraag die je hebt.
Heb je die website niet zelf gemaakt? Omdat je niet weet hoe dit werkt?
Ik heb de site wel zelf gemaakt maar kom niet uit dit probleem. Hoezo een typische vraag? Ik vind het meer typisch dat iedereen neurotisch zit te reageren op het gebruik van een afgekorte php tag dan inhoudelijk op de vraag in te gaan.
Op paginas die een gerewrite url hebben werkt het aanpassen van talen niet en ik kom er niet achter waarom niet. Waarom is dat een typische vraag?
Toevoeging op 07/02/2017 14:26:40:
Frank Nietbelangrijk op 07/02/2017 12:05:32
Gokje: De inhoud van je dynamische pagina's komen uit de database? En waarschijnlijk is de database niet ingericht om de content in verschillende talen op te slaan -of- zijn de andere talen niet aangemaakt in de database?
Nee het gaat om vaste stukken op de pagina. Geen tekst uit de database. De tekst wordt ingeladen uit een talen bestand (lang.php).
Ik vond 'm typisch omdat het een systeem is wat je dus zelf hebt gemaakt ... maar dus niet weet hoe het werkt. Als het op basis was van een voor jouw onbekend framework was, of als de site door iemand anders was gemaakt dan had ik het wat beter kunnen plaatsen. Het klonk me nu een beetje vreemd in de oren ... maar wellicht ligt dat aan mij.
Maar goed, dan is het dus een kwestie van even debuggen. Wordt op de pagina's waar het niet lukt de juiste code ingeladen? En is op diezelfde pagina's de betreffende $_GET parameter bekend. Dat zou je alvast eens kunnen onderzoeken.
Op paginas die een gerewrite url hebben werkt het aanpassen van talen niet en ik kom er niet achter waarom niet.
Volgens mij gaf Ben daarop al een antwoord: heb je QSA in de rewrite rule gebruikt? Die heb je namelijk nodig voor een query string append: het doorgeven van de querystring achter ? in de URL.
Waar word je content geset? Je haalt teksten uit lang.php maar waar word dit gedaan, werken de sessies wel in je dynamische pagina's (geen header allready sent)? Heb je een fout melding?
Ik vond 'm typisch omdat het een systeem is wat je dus zelf hebt gemaakt ... maar dus niet weet hoe het werkt. Als het op basis was van een voor jouw onbekend framework was, of als de site door iemand anders was gemaakt dan had ik het wat beter kunnen plaatsen. Het klonk me nu een beetje vreemd in de oren ... maar wellicht ligt dat aan mij.
Maar goed, dan is het dus een kwestie van even debuggen. Wordt op de pagina's waar het niet lukt de juiste code ingeladen? En is op diezelfde pagina's de betreffende $_GET parameter bekend. Dat zou je alvast eens kunnen onderzoeken.
Ik weet wel hoe het werkt maar loop nu tegen een probleem aan waarvan ik de oorzaak niet weet. De get waarde wordt gewoon getoond wanneer ik die echo (de inhoud van de session). Maar hij wordt niet aangepast als ik op een andere taal klik. Wanneer ik naar de index ga en de taal bijvoorbeeld op frans zet, dan echoed die gewoon fr en is de taal frans ook als ik naar een dynamische pagina ga maar wil ik dan weer de taal updaten, kan dit niet. Alleen op vaste paginas kan ik de taal updaten. De sessie waarde blijft op fr (laatst gekozen taal) staan ook wanneer ik de taal zet op NL of EN op een dynamische pagina.
Dit geeft een internal server error 500. Moet er wel bijzeggen dat ik meer htaccess regels heb die naar andere bestanden gaan zoals project pages maar als ik dat stukje bij alle regels zet heb ik die error alsnog.
@Ben en @Ward sturen je volgens mij al in de goede richting en zoals @Ward zegt: dump de inhoud van $_GET eens.
EDIT: en als dat er allemaal goed uitziet zit de fout ergens anders in je code.
Je zou je ook kunnen afvragen: waaruit blijkt dat iets niet werkt zoals het zou moeten werken en gebruik dat eens als startpunt van je zoektocht.
Als de GET waarde gewoon weer gegeven word werkt dit dus, neem dus aan dat het niet aan .htaccess ligt.
Joakim Broden op 07/02/2017 14:45:38
Waar word je content geset? Je haalt teksten uit lang.php maar waar word dit gedaan, werken de sessies wel in je dynamische pagina's (geen header allready sent)? Heb je een fout melding?