Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[html]Base tag voor hyperlinks anders dan voor media

Pagina: 1
Acties:
  • 316 views sinds 30-01-2008
  • Reageer

  • mithras
  • Registratie: Maart 2003
  • Niet online
Inleiding
Ik zou graag op een gemakkelijke wijze mijn hyperlinks willen aanpassen. Op dit moment heeft mijn cms één taal, maar met meertaligheid kreeg ik wat problemen. Voor SEO wil ik graag in de taal de uri vast hebben liggen. Zo krijg je niet dat er twee (of meer) talen achter een uri verborgen zit (wat in principe andere content achter eenzelfde uri is; verwarring alom).

Eerst had ik domein.tld/optie1/optie2?lang=en of domein.tld/optie1/optie2?lang=nl. Dit wil ik vervangen door domein domein.tld/en/optie1/optie2. Dit wilde ik bewerkstelligen door het volgende:
je maakt een gewone link naar je pagina (optie1/optie2), zoals ik altijd al doe. De base tag veranderd van waarde naar gelang de taal: domein.tld of domein.tld/en of domein.tld/nl (bij niets wordt de standaard taal gepakt).

Probleem
Nu wil ik dus een base tag die zich aan de taal aanpast in mijn cms. Dat is niet heel moeilijk, maar alle plaatjes, stylesheets e.d. worden relatief aan de domeinnaam domein.tld opgehaald. Ophalen vanaf domein.tld/en/ gaat dus niet lukken :)

Oplossing :?
• Ik zou alles met een htaccess kunnen oplossen: bevat de eerste parameter een taal, ga dan een niveau "hoger". Dit is echter niet een goede oplossing, omdat de talen modulair via de database worden toegevoegd. En een htaccess kan daar niet bij.
• Alle links aanpassen (en het absolute pad gebruiken). Dat kan ook niet, want ik wil van pagina a naar pagina b verwijzen, en niet speciaal de taal erin opnemen.
• Met javascript alle links achteraf aanpassen. Dat wil ik niet :X
• De taal parameter lang meegeven (domein.tld?lang=nl). Dan moet ik alle links in het cms doorlopen en er de "dynamische-taalparameter-variabele" zelf achter zetten. Dat kost dus ook veel werk en het levert snel fouten op: een keer vergeten en de taal wordt bij die link niet overgenomen.
• De taal niet in de uri voor laten komen. Dit is het makkelijkste (eenmaal de taal gezet, blijft deze voor de sessie/altijd staan). Echter krijg je dus wel verschillende content achter eenzelfde uri, het probleem wat ik juist wilde oplossen.

Staat jouw oplossing hier niet boven? Ga dan snel naar 0900-tweakers en laat mij het weten! Alvast bedankt ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:41

crisp

Devver

Pixelated

En andersom: niet je links absoluut maken maar juist de referenties naar je plaatjes enzo?

Intentionally left blank


  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Zoals ik het bij een vriendin heb opgelost is als volgt:
  • Alles tov de root wegens makkelijkst :^).
  • /taal/pagina = /index.php?(juiste-pagina-laden)&lang=(taal){evt. andere query param}
  • de taal wordt in principe vastgezet in de sessie op basis van de browserlang (nl/fr) of terugvallend op de standaar (nl), maar doordat (normaliter) elke link een taalverwijzing bevat (zie hier net boven) wordt die taalinstelling in principe elke keer opnieuw geset. Daardoor heeft enkel de mainpage twee verschillende talen. Nadien is het steeds /nl/ of /fr/ (jaja belgische site ;^)
  • ook css en plaatjes etc zijn tov de root

  • mithras
  • Registratie: Maart 2003
  • Niet online
crisp schreef op dinsdag 15 januari 2008 @ 21:54:
En andersom: niet je links absoluut maken maar juist de referenties naar je plaatjes enzo?
Op zich valt dat wel te doen. De standaard template bevat toch plaatjes vanuit css geladen, en die zijn relatief aan de stylesheet. Verder worden niet veel plaatjes gebruikt, dus zal dit de oplossing zijn :)
moozzuzz schreef op woensdag 16 januari 2008 @ 08:35:
Zoals ik het bij een vriendin heb opgelost is als volgt:

• Alles tov de root wegens makkelijkst :^).
Dat gaat niet op, want ik wil graag naar een pagina wijzen zonder de taal erin op te nemen. Verwijzen naar (in jouw geval) services.html, en niet naar fr/services.html of nl/services.html. Op die manier blijf je bij elke link taal onafhankelijk ;)
• /taal/pagina = /index.php?(juiste-pagina-laden)&lang=(taal){evt. andere query param}
Ik wil liever geen GET meegeven, omdat dit a) SEO technisch afaik minder uitkomt en b) ik alle links moet gaan veranderen. Op dit moment verwijs ik naar blog/1/mijn-eerste-artikel.html. Dan moet ik het hele cms door om overal een taal parameter achter te genereren. Dit maakt het systeem ook veel foutgevoeliger (zie TS).
• de taal wordt in principe vastgezet in de sessie op basis van de browserlang (nl/fr) of terugvallend op de standaar (nl), maar doordat (normaliter) elke link een taalverwijzing bevat (zie hier net boven) wordt die taalinstelling in principe elke keer opnieuw geset. Daardoor heeft enkel de mainpage twee verschillende talen. Nadien is het steeds /nl/ of /fr/ (jaja belgische site ;^)
Het überhaupt kunnen voorkomen van twee talen achter een url zou ik graag willen voorkomen. Verder snap ik het punt van /nl/ en /fr/, maar de implementatie daarvan was juist het probleem :p
• ook css en plaatjes etc zijn tov de root
Zolang een base tag niet de root, maar een afwijkende root bevat (om namelijk de taal erin op te nemen), zal alle media (css ed) niet meer tov de root zijn :)

  • imp4ct
  • Registratie: November 2003
  • Laatst online: 29-10 10:59
Dit systeem gebruik ik.

code:
1
2
3
4
5
6
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*) index.php?url=$1 [L,QSA]


Deze .htaccess staat in de root dir en ik lees hem telkens uit in m'n index.php

En dat doe ik via php
PHP:
1
2
3
4
5
6
7
8
9
<?php 
$url_array = explode('/', $_GET['url']); 

//Voorbeeld van het uitlezen 
//bv. url = http://www.yoursite.nl/en/page1/page2/
//$url_array[0] heeft als waarde 'en' 
//$url_array[1] heeft als waarde 'page1' 
//$url_array[1] heeft als waarde 'page2' 
?>


Op deze manier kan je dus alles makkelijk uitlezen als je zin hebt.

Bedrijf : Webtrix

Foto materiaal:
Nikon D7100 | Nikor AF-S DX 18-105mm | Nikor AF-S 50mm | Nikon SB600


  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

mithras schreef op woensdag 16 januari 2008 @ 10:04:

Het überhaupt kunnen voorkomen van twee talen achter een url zou ik graag willen voorkomen. Verder snap ik het punt van /nl/ en /fr/, maar de implementatie daarvan was juist het probleem :P
beetje offtopic maar zit zelf al enige tijd te brainstormen over hoe de taal netjes in de url te zetten. mooiste oplossing leek mij om gewoon subs te maken nl.domein.tld, de.domein.tld etc. tot dat me verteld werd dat dat ook niet seo-verwantwoord is. zou ook wel eens willen weten wat nu wijsheid is.

Aunt bunny is coming to get me!


  • Blaise
  • Registratie: Juni 2001
  • Niet online
Kan je niet een "PHP-basepath" gebruiken? In mijn CMS'je declareer ik aan het begin meerdere constants, zoals PATH en FILEPATH, die ik voor elke geoutputte URL zet. Je zou dan ook iets kunnen doen als PATH_NOLANG / PATH_LANG. Erg handig, ook omdat je op die manier je CMS meer portable is.

[ Voor 3% gewijzigd door Blaise op 16-01-2008 14:44 ]


  • mithras
  • Registratie: Maart 2003
  • Niet online
imp4ct schreef op woensdag 16 januari 2008 @ 13:43:
Dit systeem gebruik ik.
[code]
Deze .htaccess staat in de root dir en ik lees hem telkens uit in m'n index.php

En dat doe ik via php
[code]
Op deze manier kan je dus alles makkelijk uitlezen als je zin hebt.
Op zich gebruik ik dezelfde methode om de url uit te lezen, alleen niet via GET maar stuur het door naar index.php en kopieer de uri erachter. Die kan je uitlezen met de global SERVER array bij de key PATH_INFO :)

Verder staat dit probleem ook in WEB (hoewel een beetje php gerelateerd): er zit een probleem in de html. Hoe ik dat in php vervolgens voor elkaar krijg is een tweede, maar de oorsprong van het probleem ligt aan de verkeerde html. Hoe de server dit vervolgens gaat oplossen kan ik verder wel uitwerken (maar toch bedankt) :)
iH8 schreef op woensdag 16 januari 2008 @ 14:30:
[...]


beetje offtopic maar zit zelf al enige tijd te brainstormen over hoe de taal netjes in de url te zetten. mooiste oplossing leek mij om gewoon subs te maken nl.domein.tld, de.domein.tld etc. tot dat me verteld werd dat dat ook niet seo-verwantwoord is. zou ook wel eens willen weten wat nu wijsheid is.
Ik denk dus of de manier van /me crisp (makkelijke oplossing, imho niet de netste), of van /me Blaise (netter, maar meer werk en eigenlijk hetzelfde als eerder genoemd, maar een constante ipv variabele).
Blaise schreef op woensdag 16 januari 2008 @ 14:42:
Kan je niet een "PHP-basepath" gebruiken? In mijn CMS'je declareer ik aan het begin meerdere constants, zoals PATH en FILEPATH, die ik voor elke geoutputte URL zet. Je zou dan ook iets kunnen doen als PATH_NOLANG / PATH_LANG. Erg handig, ook omdat je op die manier je CMS meer portable is.
Ik zou dan wel het complete cms moeten nalopen voor alle links. Ik gebruik sowieso een configuratie object met daarin constants opgenomen. Zo zitten alle config constants in een eigen scope. Dat is echter niet een probleem ;)

Het is denk ik wel teveel werk, maar moet er nog eens goed over nadenken. Op deze manier ben je structureel wel beter bezig, alleen kost het gewoon veel meer tijd om alles aan te passen, na te lopen en te controleren. Als je de constante vergeet wordt gelijk een switch gemaakt naar de standaard-taal: precies de foutgevoeligheid die imho sneller optreedt dan bij de oplossing van /me crisp.

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 04-11 04:01

wizzkizz

smile...tomorrow will be worse

mithras schreef op woensdag 16 januari 2008 @ 16:29:
Het is denk ik wel teveel werk, maar moet er nog eens goed over nadenken. Op deze manier ben je structureel wel beter bezig, alleen kost het gewoon veel meer tijd om alles aan te passen, na te lopen en te controleren. Als je de constante vergeet wordt gelijk een switch gemaakt naar de standaard-taal: precies de foutgevoeligheid die imho sneller optreedt dan bij de oplossing van /me crisp.
Je kunt dit laatste omzeilen door de taalkeuze van de gebruiker in een sessie-variabele vast te leggen. Mocht je dan per ongeluk ergens een taal vergeten zijn te specificeren, dan wordt de taal gebruikt die de gebruiker de hele tijd al heeft gebruikt, met een fall-back naar de standaardtaal.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.

Pagina: 1