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';
}
?>

De urls van de dynamische paginas kloppen ook gewoon. Het taal switch linkje gaat hiernaartoe bij bijvoorbeeld over ons: http://website.com/over-ons.html?lang=fr in plaats van http://website.com/content.php?lang=fr

Hier nog een stuk van mijn htaccess mocht dat het iets duidelijker maken:

<?
DirectoryIndex
RewriteEngine on

#Indexes uitzetten
Options -Indexes

#Cross site access toestaan
Header set Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"

#CMS rewrite
RewriteRule ^cms/$ /cms/administrator [L]

#Website naam

DirectoryIndex index.php

RewriteRule ^(.*).html content.php?alias=$1 [L]

?>
Waarom gebruik je de short-php tags (<?), en niet de volledige php-tags (<?php)?

Deze kunnen door de hosting eventueel worden uitgezet, en daarmee zal je hele script niet meer werken, en leesbaar worden voor iedereen.
**quoteknip**
Die gebruik ik om het in code formaat op deze site neer te zetten. Veel sneller dan elke keer [kode] (met een c maar anders maakt hij gelijk van alle tekst code) typen. Plus als ik 2 stukken code wil splitsen dan werkt dat niet, dus dan maar zo.

Dat bedoelt Arient niet.. Je gebruikt [ignore](<?)[/ignore] in je code en niet [ignore](<?php)[/ignore] bijvoorbeeld bij [ignore]<a href="<? echo $actual_link; ?>?lang=en">...[/ignore] [ignore](<?)[/ignore] word niet op elke server ondersteund, gebruik daarom gewoon [ignore](<?php)[/ignore].

Wat is de code van content.php?
Ik zie het ook bij je echo's staan, dus ik hoop dat je de korte notatie niet in de praktijk gebruikt.

Verder is het niet nodig om voorlaatste berichten integraal te quoten. Je kan prima gebruik maken van het grote "Snel reageren" invoerveld onderaan het topic.
Joakim Broden op 07/02/2017 11:56:45

Dat bedoelt Arient niet.. Je gebruikt [ignore](<?)[/ignore] in je code en niet [ignore](<?php)[/ignore] bijvoorbeeld bij [ignore]<a href="<? echo $actual_link; ?>?lang=en">...[/ignore] [ignore](<?)[/ignore] word niet op elke server ondersteund, gebruik daarom gewoon [ignore](<?php)[/ignore].

Wat is de code van content.php?

Op mijn server wel, lijkt me dat het juist alleen maar meer ondersteuning zal gaan krijgen ipv van minder toch? Scheelt toch wat typwerk.

Die code is niet relevant voor dit probleem. Hier het stuk php op die pagina, voor de rest overal wat echos op de pagina:

<?
include 'includes/header.php';

if(isset($_GET['alias'])) {
$content = "SELECT * FROM `lb_content` WHERE alias = '".$conn->real_escape_string($_GET['alias'])."' AND state = 1 ORDER BY ordering";
$contentcon = $conn->query($content);
$counter = "UPDATE lb_content SET hits=hits+1 WHERE alias = '".$_GET['alias']."'";
$countercon = $conn->query($counter);
$contentcr = array();
while ($contentcr[] = $contentcon->fetch_array());

// content categories
$categorie = "SELECT * FROM `lb_categories` WHERE alias = '".$conn->real_escape_string($_GET['alias'])."' AND published = 1";
$categoriecon = $conn->query($categorie);
$categoriecr = array();
while ($categoriecr[] = $categoriecon->fetch_array());

$contentimages = $contentcr[0]['images'];
$contentimg = json_decode($contentimages);

if($contentimg->image_intro != ''){
$image = '<img class="img-responsive" src="cms/'.$contentimg->image_intro.'">';
}else{
$image = '';
}

$categorietimages = $categoriecr[0]['params'];
$catimg = json_decode($categorietimages);

if($catimg->image != ''){
$image1 = '<img class="img-responsive" src="cms/'.$catimg->image.'">';
}else{
$image1 = '';
}
}
?>


Toevoeging op 07/02/2017 12:03:21:

@arien ah zal ik doen.
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?
>> lijkt me dat het juist alleen maar meer ondersteuning zal gaan krijgen ipv van minder toch?

Nee.
Je hebt in je .htaccess ook QSA gebruikt voor je rewriterule die naar content.php leidt?
Also,
>> lijkt me dat het juist alleen maar meer ondersteuning zal gaan krijgen ipv van minder toch?
Ooit gehoord van deprecation?
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?
van php.net:
"PHP also allows for short open tag <¿ (which is discouraged since it is only available if enabled using the short_open_tag php.ini configuration file directive, or if PHP was configured with the --enable-short-tags option).
"

En als je dan per se voor "kort" wilt gaan, dan kun je wel altijd gebruiken


<?= 'hello world'; ?>


http://php.net/manual/en/language.basic-syntax.phptags.php

Reageren