Niet redirecten indien men zelf om taalwijziging vraagt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin InTervento

Kevin InTervento

26/01/2015 14:18:35
Quote Anchor link
Hey,

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$default_lang
= 'nl';
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang_prefix = substr($lang, 0, 2);
    if ($lang_prefix != $default_lang) {
        header("Location: http://www.singant.org/en/");
    }

?>


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! :)
 
PHP hulp

PHP hulp

22/11/2024 09:43:06
 
- SanThe -

- SanThe -

26/01/2015 14:21:50
Quote Anchor link
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.
 
Kevin InTervento

Kevin InTervento

26/01/2015 14:36:06
Quote Anchor link
Ok, de redenering begrijp ik, lijkt me inderdaad een mooie uitweg. Maar is het mogelijk hier even code gewijs een concreet voorbeeld aan te geven mss?
+ 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
 
- SanThe -

- SanThe -

26/01/2015 14:59:08
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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/");
    }

?>


En dan ergens in de pagina twee linken met ?taal=nl en ?taal=en er in.
 
Kevin InTervento

Kevin InTervento

26/01/2015 15:18:43
Quote Anchor link
Ok alvast bedankt voor het volledige plaatje (en de snelheid van respons) :) Zal dit zeker eens proberen in realiteit, misschien ook wel even bedenken en afwegen tov zoekmachines die het misschien als duplicates of dergelijke zouden aanschouwen.

Heb vermoed ik ergens gelezen dat ?taal=nl doorverwijzingen best wel eens voor verwarring kunnen zorgen bij zoekrobots...
 
- Ariën  -
Beheerder

- Ariën -

26/01/2015 15:19:54
Quote Anchor link
Dan blokkeer je die URL's in robots.txt.
 
Kevin InTervento

Kevin InTervento

26/01/2015 15:27:44
Quote Anchor link
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 ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2015 15:31:11
Quote Anchor link
Voor dit soort zaken is een cookie misschien beter, zodat de taalkeuze onthouden kan worden, ook voor meerdere -afzonderlijke- bezoeken?

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if (!$check_for_credentials) {
    header('Location: go_away.php');
}

$db->query('QUERY OF DOOM');
?>


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
 
Kevin InTervento

Kevin InTervento

26/01/2015 15:42:17
Quote Anchor link
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

26/01/2015 16:16:21
Quote Anchor link
Niet per se nodig nee, maar beter 1x teveel dan 1x te weinig.

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. :)
 
Kevin InTervento

Kevin InTervento

27/01/2015 12:43:39
Quote Anchor link
Ok, hier zijn we dan met een bijkomend probleem waar ik even niet aan gedacht had.
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>


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>


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>
 
Thomas van den Heuvel

Thomas van den Heuvel

27/01/2015 12:51:53
Quote Anchor link
Maar, waaaaaaarom gebruik je een iFrame? Ik vermoed een lijk ergens in een kast :).

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?
 
Kevin InTervento

Kevin InTervento

27/01/2015 12:54:56
Quote Anchor link
Voor de vindbaarheid heb ik nog zo geen angst, deze lijkt nog goed te zijn ;)
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 :)
 
Thomas van den Heuvel

Thomas van den Heuvel

27/01/2015 13:11:21
Quote Anchor link
Ik snap dat dit niet is wat je wilt horen, en je je probleem direct wilt oplossen, maar...

... 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.
 
Kevin InTervento

Kevin InTervento

27/01/2015 13:32:19
Quote Anchor link
Inderdaad niet het antwoord waar ik naar op zoek ben, maar ergens kan ik je ook geen ongelijk geven :)
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>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.