Variabelen van pagina overdragen naar iFrame
Omdat ik over een aantal weken voor een tijdje vertrek naar Thailand, heb ik besloten een blog te maken. Ik loop echter tegen een probleempje aan.
Het gaat om http://blog.alexzijlstra.nl
Hier heb ik mijn eigen achtergrond geladen, met het menu in een iFrame. Ook het blog gedeelte wordt geladen in een iFrame. Ik gebruik hier namelijk gewoon een uitgeklede versie van een Wordpress template voor. Ik heb hier bewust gekozen voor een iFrame omdat dit de makkelijkste manier is om mijn eigen achtergrond te behouden, en ervoor te zorgen dat deze behouden blijft op het moment dat er wordt genavigeerd binnen Wordpress.
Omdat ik graag wil dat als de links in een nieuw tabblad worden geopend mijn achtergrond ook verschijnt heb ik onderstaande aanpassing gemaakt in het index.php bestand van Wordpress.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$topbar = $HTTP_GET_VARS['topbar'];
if ($topbar == 1){
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('wp-blog-header.php');
}
else {
header( 'Location: http://blog.alexzijlstra.nl/?p='.$HTTP_GET_VARS['p']) ;
}
?>
$topbar = $HTTP_GET_VARS['topbar'];
if ($topbar == 1){
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('wp-blog-header.php');
}
else {
header( 'Location: http://blog.alexzijlstra.nl/?p='.$HTTP_GET_VARS['p']) ;
}
?>
Hierin wordt $topbar gebruikt als boolean (zeg ik dat goed?) om aan te geven of mijn eigen header wordt weergegeven of niet; 1 staat voor wel, 0 staat voor niet. Er wordt dus gecontroleerd of hier sprake van is, is dat zo, dan worden gewoon de header van wordpress en de inhoud geladen, zo niet, wordt er naar de homepage gegaan en wordt het ID van de pagina doorgegeven door middel van de link.
Op mijn eigen index.php wordt deze dan uit de link gehaald en doorgegeven aan het iframe zoals hieronder weergegeven:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$p= $HTTP_GET_VARS['p'];
?>
<IFRAME SRC="http://blog.alexzijlstra.nl/blog?topbar=1&p=<?php echo $p;?>" WIDTH="875" HEIGHT="670" name="content" style="position:relative; top: 20px; vertical-align: center; border-style:solid; border-color:#404040" ALLOWTRANSPARENCY="true" SCROLLING=YES frameborder="2" BORDERCOLOR="#000000">
</IFRAME>
$p= $HTTP_GET_VARS['p'];
?>
<IFRAME SRC="http://blog.alexzijlstra.nl/blog?topbar=1&p=<?php echo $p;?>" WIDTH="875" HEIGHT="670" name="content" style="position:relative; top: 20px; vertical-align: center; border-style:solid; border-color:#404040" ALLOWTRANSPARENCY="true" SCROLLING=YES frameborder="2" BORDERCOLOR="#000000">
</IFRAME>
Tot zover werkt alles zoals het was bedoelt. Echter, nu ik deze aanpassingen heb gemaakt, controleert het iFrame elke keer of er sprake is van de topbar. Dit houdt in dat als er binnen Wordpress wordt genavigeerd, elke keer ook de topbar opnieuw wordt geladen (er ontstaan dus meerdere headers in het iFrame zelf). Dit dacht ik te verhelpen door in mijn eigen index.php aan te geven dat $topbar=1; . Het iFrame leest dit helaas niet vanaf de eigen index.php.
Mijn vraag is dan ook of er een mogelijkheid is dat ik deze variabele + waarde doorgeef aan het iframe?
Alvast bedankt voor jullie hulp!
Alex :)
Gewijzigd op 28/05/2011 14:23:34 door Alex Zijlstra
- Je kan ook CSS overflow: scroll; gebruiken
Alvast bedankt!
Als dat niet zo is kan de pagina het daar door niet meer doen.
CSS overflow op scroll zetten dan is het net een iframe. Dan heb je geen iframe meer nodig.
CSS overflow op auto zetten komen er alleen scrolbalken als het nodig is, als het content te groot wordt
Gewijzigd op 28/05/2011 18:52:47 door Maarten PHP
Ik zoek dus eigenlijk alleen een manier om vanuit het iFrame de variabele $topbar te kunnen lezen vanuit de bovenliggende pagina, zonder dat dit door middel van het doorgeven in een link gebeurt.
Een manier om er voor te zorgen dat de header locatie(Zie hieronder) wordt geladen als _top zeg maar, zou ook voldoen! :)
Heb je dat? Toon desnoods wat meer code.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$p= $_GET['p'];
?>
<IFRAME
SRC="http://blog.alexzijlstra.nl/blog?topbar=1&p=<?php echo $p;?>"
WIDTH="875" HEIGHT="670" name="content" style="position:relative; top: 20px; vertical-align: center; border-style:solid; border-color:#404040" ALLOWTRANSPARENCY="true" SCROLLING=YES frameborder="2" BORDERCOLOR="#000000">
</IFRAME>
$p= $_GET['p'];
?>
<IFRAME
SRC="http://blog.alexzijlstra.nl/blog?topbar=1&p=<?php echo $p;?>"
WIDTH="875" HEIGHT="670" name="content" style="position:relative; top: 20px; vertical-align: center; border-style:solid; border-color:#404040" ALLOWTRANSPARENCY="true" SCROLLING=YES frameborder="2" BORDERCOLOR="#000000">
</IFRAME>
Dat is de code in mijn index.php die het iFrame oproept, daar staat in de link topbar=1. In het iFrame zelf staat de volgende code:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$topbar = $_GET['topbar'];
if ($topbar == 1){
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('wp-blog-header.php');
}
else {
header( 'Location: http://blog.alexzijlstra.nl/?p='.$_GET['p']) ;
}
?>
$topbar = $_GET['topbar'];
if ($topbar == 1){
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('wp-blog-header.php');
}
else {
header( 'Location: http://blog.alexzijlstra.nl/?p='.$_GET['p']) ;
}
?>
Hier wordt door middel van $_GET['topbar'], de waarde opgevraagd.
$topbar=1 dan wordt Wordpress weergegeven.
$topbar=0 dan wordt de pagina teruggestuurd naar mijn index.php, met in de link p='.$_GET['p] zodat hieruit het id van de pagina kan worden gehaald die moet worden weergeven.
Als $topbar=1 en Wordpress dus wordt weergegeven zit deze in het iFrame. Als er dan op bijvoorbeeld 'Lees meer »' wordt geklikt in Wordpress, wordt deze link bijvoorbeeld 'http://blog.alexzijlstra.nl/blog/?p=6'. Deze link wordt in het iFrame geladen, maar omdat dit gewoon de index van Wordpress is wordt het script dat controleert of de topbar aanwezig is nogmaals uitgevoerd. Hierdoor ontstaat een tweede topbar in het iFrame.
Om die link te veranderen en er 'http://blog.alexzijlstra.nl/blog/?topbar=1&p=6' van te maken moet ik dit allemaal handmatig gaan doen in Wordpress. Het zou daarom handiger zijn om gewoon de variabele $topbar over te dragen van de bovenliggende pagina naar het iFrame, zodat uit de code blijkt dat $topbar=1 en deze dus niet opnieuw wordt geladen.
Als dit niet mogelijk is zou het een betere oplossing zijn om het deel van de 'else' functie te veranderen, zodat de header hoe dan ook on top wordt geopend, zodat hij de gehele pagina overschrijft.
Ik hoop dat je begrijpt wat ik bedoel?