Niet redirecten indien men zelf om taalwijziging vraagt
Momenteel ben ik bezig aan een tweetalige (nl/en) website.
Ik ga ervoor zorgen dat de mensen zowiso via 301 (.htaccess) redirect naar de www.domein.org/nl website terecht komen. Hierin heb ik in men index.php pagina een simpels script gezet waardoor mensen die hun taal niet op nl of nl-be naar de engelse versie worden ge-redirect.
Quote:
Nu zit ik wel met het probleem. Indien iemand op een Engelstalige pc zit toch op de Engelse site terecht komt. Als hij daar dan op een link zou klikken voor de Nederlandse versie, zal hij dus altijd terug verwezen worden naar de Engelse versie. Hoe kan ik zeggen dat dit script NIET mag werken indien men op de website ZELF geklikt heeft voor een andere taal?
Ter verduidelijking, ik kan me redden in php dmv van vergelijkingen en zaken uit te testen. Maar van scratch afbouwen en gedetailleerde kennis is niet echt in mijn hersenen aanwezig :)
Alvast bedankt voor enige moeite! :)
Als er op een taal wordt geklikt zet je dat in een session en kan je in bovenstaand toevoegen dat als de session op nl staat je naar nl gaat.
+ gaat dit niet in conflict komen met een andere mogelijke session naar een database toe die word geopend?
Gewijzigd op 26/01/2015 14:37:25 door Kevin InTervento
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
$default_lang = 'nl';
$_SESSION['taal'] = (isset($_SESSION['taal'])) ? $_SESSION['taal'] : $default_lang;
$_SESSION['taal'] = (isset($_GET['taal'])) ? $_GET['taal'] : $_SESSION['taal'];
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang_prefix = substr($lang, 0, 2);
if ($lang_prefix != $default_lang and $_SESSION['taal'] != $default_lang) {
header("Location: http://www.singant.org/en/");
}
?>
session_start();
$default_lang = 'nl';
$_SESSION['taal'] = (isset($_SESSION['taal'])) ? $_SESSION['taal'] : $default_lang;
$_SESSION['taal'] = (isset($_GET['taal'])) ? $_GET['taal'] : $_SESSION['taal'];
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang_prefix = substr($lang, 0, 2);
if ($lang_prefix != $default_lang and $_SESSION['taal'] != $default_lang) {
header("Location: http://www.singant.org/en/");
}
?>
En dan ergens in de pagina twee linken met ?taal=nl en ?taal=en er in.
Heb vermoed ik ergens gelezen dat ?taal=nl doorverwijzingen best wel eens voor verwarring kunnen zorgen bij zoekrobots...
Dan blokkeer je die URL's in robots.txt.
Inderdaad een optie, eens de site in productie gaat zal ik ook wel even met google webmaster tool bekijken hoe het zit en indien nodig die URL's toevoegen ;)
Daarnaast: zet altijd een exit; na je header('Location: ...'); aanroep anders wordt de rest van je script nog steeds uitgevoerd alvorens je geredirect wordt. In het gunstigste geval zorgt dit slechts voor het verspillen van resources (en het nodeloos versturen van output) en in het ongunstigste geval worden er bewerkingen uitgevoerd die niet uitgevoerd hadden mogen worden.
Voorbeeld:
Code (php)
QUERY OF DOOM wordt uitgevoerd, ook al heb je niet de juiste authorisatie.
En daarma word je netjes doorgestuurd :-).
Gewijzigd op 26/01/2015 15:32:06 door Thomas van den Heuvel
Thomas, ik snap je punt :) Nuja verder in die pagina staan er geen php codes meer welke voor output zorgen, enkel pure html :) Dus misschien dat die exit(); niet zo broodnodig zou zijn dan?
Plus het is makkelijker om elke keer hetzelfde te doen in plaats van je elke keer af te vragen of het nodig is.
Daarnaast, je bent een bewerking aan het doen waarna de pagina ververst dient te worden. Alle output die je dan nog genereert is overbodig, zoniet een verspilling. Afhankelijk van hoeveel moeite het kost om een pagina te renderen (hier hangen misschien meerdere queries aan vast) is deze verspilling groter.
Stel dat het een forum betrof zoals deze, dan ga je niet een hele pagina renderen bij het plaatsen van een reactie, enkel om je direct naar (een nieuwere variant van) dezelfde pagina door te sturen. Doe dit x het aantal bezoekers die je site op enig moment bekijkt, als al je code zo is opgezet dan wordt je site onnodig trager.
Het is een kleine moeite, en een goede gewoonte. Los daarvan, verwerkstappen zouden sowieso beter gescheiden moeten zijn (en eigenlijk helemaal los moeten staan) van output. Als dit soort code ergens in een bestand staat samen met je HTML-code voor de opbouw van je pagina dan is dit al niet optimaal omdat dit vaak verzandt in een brei van if-elseif-else statements.
Anyway /rant. :)
Mits ik in deze website gebruik maak van een iFrame (ik weet het ja een iFrame maar toch hou ik het liever zo).
Het probleem zit hem in het feit dat, als mensen via de zoekmachines of andere rechstreekse links naar de content pagina's zouden gaan, ik volgend javascript gebruik om toch de hele index frame te laden.
Quote:
<script type="text/javascript">
var fname="content"; //MAIN CONTENT AREA FRAME **NAME**
window.onload=function(){
var main=document.location.search;
if(main!='')top.frames[fname].document.location.href=main.substring(main.lastIndexOf('?')+1,main.length);
}
</script>
var fname="content"; //MAIN CONTENT AREA FRAME **NAME**
window.onload=function(){
var main=document.location.search;
if(main!='')top.frames[fname].document.location.href=main.substring(main.lastIndexOf('?')+1,main.length);
}
</script>
Zoals jullie zien maak ik hier ook gebruik van index.php?over.php bevoorbeeld. Maw als men op de link klikt voor de talen waar ?taal=nl inzit. Laad hij deze pagina niet correct.
Weet niet of iemand me met dit javascript dan kan verder helpen maar ik vermoed dat ik hier best ergens kan zeggen dat ALS er achter ? taal=nl staat er niet dient te gebeuren.
Zou deze ALS vergelijking de truc dan kunnen oplossen?
Quote:
<script type="text/javascript">
var fname="content"; //MAIN CONTENT AREA FRAME **NAME**
window.onload=function(){
var main=document.location.search;
if(main!='taal=nl' || main!='taal=en' && main!='')top.frames[fname].document.location.href=main.substring(main.lastIndexOf('?')+1,main.length);
}
</script>
var fname="content"; //MAIN CONTENT AREA FRAME **NAME**
window.onload=function(){
var main=document.location.search;
if(main!='taal=nl' || main!='taal=en' && main!='')top.frames[fname].document.location.href=main.substring(main.lastIndexOf('?')+1,main.length);
}
</script>
Even voor de duidelijkheid, in de content pagina's heb ik volgend javascript regel staan. (Hier haalt hij dus de link van de content frame.)
Quote:
<script language="javascript">
if(self.location==top.location)self.location="index.html?partners.php";
</script>
if(self.location==top.location)self.location="index.html?partners.php";
</script>
Realiseer je goed wat je aan het doen bent: je bent aan het voortborduren op een (mogelijk) verkeerde oplossing. Misschien is het verstandiger om in plaats hiervan tijd+energie te steken in een goede (of iig betere) oplossing?
Sowieso, ik weet niet hoe slim zoekmachines vandaag de dag zijn, maar navigatie via JavaScript lijkt mij funest voor de vindbaarheid?
Waarom dat oude lijk, wel tijdsgebrek is eigenlijk het grootste probleem momenteel :) Eens dit afgewerkt is ga ik me er wel al op storten om betere oplossing trachten uit men mouw te toveren :)
Maar nu zit ik dus nog met dat lijk dat ik vers gebalsemd moet houden :)
... zoals ik het zie gooit het iframe roet in het eten, ik zie niet in wat het bestaansrecht is van het iframe en het zorgt (naar mijn mening) voor een nodeloze abstractie - "ruis op de lijn". Er zal vast een reden zijn waarom je het iframe niet wilt verwijderen, maar misschien is dit nu het moment om die achterliggende oorzaak (of oorzaken) weg te nemen omdat het de verdere ontwikkeling van je website in de weg lijkt te staan.
Ook als je nu besluit dit niet aan te pakken loop je er misschien over een tijd weer tegenaan.
Hier ben ik ook tig keer tegenaan gelopen: ik wil graag A oplossen, maar als ik dit wil doen, valt B om, of moet ik C en D eerst oplossen. De oorsprong van deze problematiek ligt juist in de sfeer van "quick fixes" en nu wil je dit probleem weer met (excusez le mot) kluscode oplossen.
Neem mijn waarschuwing ter harte: je bent werk voor je uit aan het schuiven op deze manier. Ik hoorde een tijd terug een mooie metafoor: beschouw wat je doet als een sneeuwschuiver die sneeuw voor zich uitschuift. Als je die sneeuw niet op een of andere manier afvoert sta je op een gegeven moment gewoon vast. En in de tussentijd moet je steeds meer gas geven om vooruit te komen.
Tijd om je technical debt in te lossen.
Waarom frame... Lijkt me gewoon leuker dat niet heel de content veranderd maar gewoon het onderdeel wat de mensen willen zien ;)
Nuja heb ook al wel de mogelijkheid aan het bekijken geweest dit eens te gaan vervangen door div's :)
Ik ben maar een hobbyst/amateur hoor, en leer gewoon iedere keer als ik er terug mee bezig ben wat bij :)
Daarvoor zijn al die plijsters natuurlijk handig :) Op een dag knutsel je dan wel iets in elkaar zonder dat er iets omvalt ;)
Al ben ik het type mens waar een ervare gebruiker dan natuurlijk even raar van kan opkijken (heb het zelfde voor in mijn dag dagelijks vak natuurlijk ;))
maar vermoed dat we hier way off-topic zijn aan het gaan :)
Toevoeging op 27/01/2015 14:08:58:
Inmiddels met wat logica en proberen de oplossing gevonden :) Dit topic mag dus gerust gesloten worden :)
oplossing: in de content pagina home.php 1 regel bijgezet in men Jscript :)
Quote:
<script language="javascript">
if(top.location!='index.php?taal=nl' || top.location!='index.php?taal=en') {
if(self.location==top.location)self.location="index.php?home.php";
}
</script>
if(top.location!='index.php?taal=nl' || top.location!='index.php?taal=en') {
if(self.location==top.location)self.location="index.php?home.php";
}
</script>