Taal veranderd niet op dynamische 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:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$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>
?>
$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:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
session_start();
if ($_GET['lang'] != '') {
$_SESSION['lang'] = $_GET['lang'];
} else if ($_SESSION['lang'] == '') {
$_SESSION['lang'] = 'nl';
}
?>
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
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]
?>
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]
?>
Gewijzigd op 07/02/2017 14:52:24 door Snelle Jaap
Deze kunnen door de hosting eventueel worden uitgezet, en daarmee zal je hele script niet meer werken, en leesbaar worden voor iedereen.
Gewijzigd op 07/02/2017 11:41:26 door - Ariën -
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.
Gewijzigd op 07/02/2017 11:55:55 door - Ariën -
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.
Gewijzigd op 07/02/2017 11:58:57 door - Ariën -
Joakim Broden op 07/02/2017 11:56:45:
Dat bedoelt Arient niet.. Je gebruikt (<?) in je code en niet (<?php) bijvoorbeeld bij <a href="<? echo $actual_link; ?>?lang=en">... (<?) word niet op elke server ondersteund, gebruik daarom gewoon (<?php).
Wat is de code van content.php?
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?
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 = '';
}
}
?>
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.
Gewijzigd op 07/02/2017 12:06:23 door Frank Nietbelangrijk
Nee.
Also,
>> lijkt me dat het juist alleen maar meer ondersteuning zal gaan krijgen ipv van minder toch?
Ooit gehoord van deprecation?
Gewijzigd op 07/02/2017 12:07:26 door Ben van Velzen
Heb je die website niet zelf gemaakt? Omdat je niet weet hoe dit werkt?
"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
http://php.net/manual/en/language.basic-syntax.phptags.php
Gewijzigd op 07/02/2017 12:39:59 door Ivo P
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.
Ozzie PHP op 07/02/2017 12:07:48:
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?
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).
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.
Snelle Jaap op 07/02/2017 14:25:29:
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.
Dump eerst eens $_GET om te kijken wat erin zit.
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?
Ozzie PHP op 07/02/2017 14:37:34:
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.
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.
Ik heb mn htaccess er ook bijgezet trouwens.
Gewijzigd op 07/02/2017 14:54:11 door Snelle Jaap
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.
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.
Gewijzigd op 07/02/2017 15:21:17 door Thomas van den Heuvel
Ozzie PHP op 07/02/2017 15:00:16:
Probeer in je htaccess eens dit dan ...
... content.php?alias=$1 [QSA, L]
... content.php?alias=$1 [QSA, L]
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?
Nogmaals, misschien dat we dan wat kunnen vinden.