Skapa unika länkar med frames i PHP

Det största problemet med frames är att sidor som egentligen ska öppnas i en frame öppnas i ett eget fönster, vilket gör att sidorna ofta ser konstiga ut. Det finns javascript som kontrollerar att en sida som ska visas i en frame verkligen visas i en frame. Gör den inte det, så skickas man till startsidan. I denna artikeln ska jag beskriva hur man kan se till att en sida verkligen hamnar i rätt frame, utan att man skickas till startsidan.

Det vanliga javascriptet

Det vanliga javascriptet för att se så att en sida ligger i sin frame ser ut så här:

<script type="text/javascript">
if (parent.location.href == location.href)
{
	//Sidan är öppnad utanför sin frame,
	//skicka tillbaka till förstasidan
	location.href="index.php";
}
</script>

Detta gör som sagt bara att man skickas till förstasidan, och man får inte se den sida man egentligen ville se. Detta kan göra att besökaren blir frustrerad och lämnar sidan. Istället ska vi se till att besökaren verkligen får se sidan han/hon ville se, och i rätt frame dessutom.

Lösningen

Nu ska vi lägga till en kod som skickar med vilken sida det var man försökte titta på.

<script type="text/javascript">
if (parent.location.href == location.href)
{
	//Sidan är öppnad utanför sin frame,
	//skicka tillbaka till förstasidan
	location.href="index.php?page="+
	+"<?php echo $_SERVER['REQUEST_URI'] ?>";
}
</script>

Låg säga att man går in på www.sida.se/frame_pages/page.php. Då skickas man till www.sida.se/index.php?page=/frame_pages/page.php. Index.php är förmodligen en sida med ett frameset på, som kan se ut så här:

<html>
<body>
<frameset>
	<frame name="top" src="top.php">
	<frame name="main" src="main.php">
</frameset>
</body>
</html>

Nu ska vi modifiera detta, så att sidan som besökaren egentligen ville se, öppnas i framen "main".

<?php
//Ser ifall besökaren velat se en speciell sida, och 
//ser till att den sidan verkligen finns
if(isset($_GET['page']) && file_exists($_GET['page']))
{
	$page = $_GET['page'];
}
else
{
	$page = 'main.php';
}
?>
<html>
<body>
<frameset>
	<frame name="top" src="top.php">
	<frame name="main" src="<?php echo $page ?>">
</frameset>
</body>
</html>

Avslutning

Egentligen ska man försöka att undvika att använda frames, men har man en sida med det, och inte har tid att bygga om den så fungerar detta bra. Man ska även se till att man inte kan öppna vilka sidor som helst. Genom att t.ex. skriva index.php?page=index.php så får man förstasidan att öppnas i framen, vilket inte är önskvärt. Se då till att alla sidor som ska kunna öppnas i en frame ligger i en speciell mapp, och kontrollera att $_GET['page'] börjar med den mappen. Det kan du göra genom att med substr() plocka ut de första bokstäverna i $_GET['page'], och kontrollera att det är rätt mapp.

Med detta sätt får du unika länkar som du kan skapa sajtkartor med. Du kan med fördel skriva ut de unika länkarna på varje sida, så att besökaren har en direktlänk att skicka till någon som den vill tipsa.

Skriven av:
Anders Ekdahl, Ekdahl IT
Webbplats: Webbdesign


Se fler PHP guider



kommenteraKommentarer    Antal 0    Medelpoäng 0/10

Bli medlem för att kunna skriva kommentarer!
Logga in om du redan är medlem.


Copyright © 2005 webbdesign.info    Cookies    Gratis statistik till hemsida    sitemap Webbdesign sitemap icon
Använd gärna våra RSS feeds:

Artikel Feed
[XML]
Forum Feed
[XML]

Svenska webhosts:
Svenska Webhotell

Använd gärna denna länk för att länka till oss:

Ny översättning:
Swedish affiliate programs

Är du medlem och vill synas här?
Hör av dig i vårt forum