Embedding Problem - Verlinkungen funktionieren nicht

Found a bug? Tell us!!
Post Reply
Dominik
Posts: 3
Joined: Wed Mar 24, 2010 3:09 pm

Embedding Problem - Verlinkungen funktionieren nicht

Post by Dominik »

Hallo Leute,

habe hier ein schweres Problem mit dem Einbinden von S9Y auf einer Seite.
Ich möchte es über ein „include“ lösen.

Ich habe es soweit geschafft, das der Blog korrekt dargestellt, die Bilder angezeigt werden und so weiter.

Klicke ich jetzt aber auf einen Link, bekomme ich das Problem. Obwohl in der GET-Variable wohl alles korrekt übergeben wird und die GET-Variable auch durch den Wrapper auf der index.php des Blog-Systems ankommt, scheint er diese nicht korrekt zu verarbeiten.

Meine Wrapper-Datei sieht so aus:

Code: Select all

	$full_path = getcwd();
	$full_path_org = $full_path;
	$full_path = $full_path."/blog";

	include_once '../script/function_includes.php';
	includes();
	
	if(is_dir($full_path)){
		chdir($full_path);
		ob_start();
			require("index.php");
			chdir($full_path_org);
			$sc = ob_get_contents();
		ob_end_clean();
		
		if($sc != '' AND is_array($sc) == false){
			$used_link = 'index.php?';
			$wanted_link = "content.php?".session_name()."=".session_id()."&page_id=5&";			
			$sc = str_replace($used_link, $wanted_link, $sc);
			$GLOBALS['content_sc'] = $sc;			
		} else {
			$GLOBALS['content_sc'] = text_infos('blog_leer');
		}
		connect();		
	} else {
		echo "Dieser Ordner existiert nicht.";
	}


Page_Id=5 benötige ich, um auf die korrekte Seite der Website zu gelangen.
Dort wird dann der Blog eingebunden.

Auf der Seite „content.php“ verarbeite ich die Wrapper-Datei bevor ich irgendetwas ausgebe so:

Code: Select all

	$page_id = get_page_id();
	if($page_id == '5'){
		include 'include_blog_wrapper.php';
		$_GET['page_id'] = '5';
		$_POST['page_id'] = '5';
		$_REQUEST['page_id'] = '5';
	} 

Die Ausgabe der $GLOBALS['content_sc'] erfolgt dann weiter unten auf der Seite.

Der Link des Kalenders zum vorherigen Monat lautet dann beispielsweise so:
http://www.beispiel.de/html/content.php ... 10/02.html

Die GET-Variable „/archives/2010/02.html“ existiert.
Leider wird aber trotzdem der derzeitige Monat angezeigt.
Gleiches gilt z.B. bei der Blätterfunktion / Next Page-Link, etc.

Es wäre wirklich super wenn jemand von euch Rat wüsste und mir da einen Tipp geben könnte was ich falsch mache.

Vielen Dank im Voraus für alle Antworten
Dominik
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Embedding Problem - Verlinkungen funktionieren nicht

Post by garvinhicking »

HI!

Zum einen bietet Serendipity für diese Art des Embeddings eine Konfigoption "indexFile" mit der Du z.b. direkt die "content.php" eintragen kannst damit die genutzt wird anstelle der s9y index.php.

Zum anderen kann s9y den Link vermutlich nicht lesen, weil PHPSESSID und page_id etc. davorgepackt werden. s9y erwartet aber ein index.php?/archives/.... als allerersten Parameter. Wenn Du das umstellst, könnte es evtl schon klappen?

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Dominik
Posts: 3
Joined: Wed Mar 24, 2010 3:09 pm

Re: Embedding Problem - Verlinkungen funktionieren nicht

Post by Dominik »

Danke dir schonmal für deine schnelle Antwort.

Meinst du mit IndexFile die Funktion "Index-Datei" unter "Pfade"? Da hab ich schon alles möglich ausprobiert, derzeit ist hier "../index.php" eigetragen.

"HTTP Hostnamen erkennen" hab ich schon ausgetestet, daran liegt es nicht. mod_rewrite ist aus, eingebettete Nutzung von S9Y ist auch deaktiviert (hab Header usw. direkt im Code rausgeshcmissen). Aber auch das Aktivieren bringt mich nicht weiter.

Wenn ich in der Browseradressleiste die SessionID etc entferne und direkt auch archives/2010/02.html zugreifen will klappt das auch nicht, sprich die Session-ID hat auch keine Schuld daran.

Ich bin mit meinem Latein echt am Ende. Hast du noch eine Idee? Danke dir nochmals.
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Embedding Problem - Verlinkungen funktionieren nicht

Post by garvinhicking »

Hi!

"../" ist immer schlecht, die Wrapper sollten im selben Verzeichnis wie Serendipity liegen.

Der Aufruf wäre immer so: s9y ruft das "indexFile" auf (z.b. wrapper.php), der wrapper ruft dein Framework auf (deine content.php), die setzt die ganzen variablen und included the s9y index.php, captured den output und gibt es zurück in den context der content.php. Daher müsstest du auch garkeine URLs umschreiben mit zusätzlichen GET-Variablen, sonder nkönntest die direkt in der wrapper.php setzen, die dann von der content.php ausgewertet werden.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Dominik
Posts: 3
Joined: Wed Mar 24, 2010 3:09 pm

Re: Embedding Problem - Verlinkungen funktionieren nicht

Post by Dominik »

garvinhicking wrote:Hi!

"../" ist immer schlecht, die Wrapper sollten im selben Verzeichnis wie Serendipity liegen.

Der Aufruf wäre immer so: s9y ruft das "indexFile" auf (z.b. wrapper.php), der wrapper ruft dein Framework auf (deine content.php), die setzt die ganzen variablen und included the s9y index.php, captured den output und gibt es zurück in den context der content.php. Daher müsstest du auch garkeine URLs umschreiben mit zusätzlichen GET-Variablen, sonder nkönntest die direkt in der wrapper.php setzen, die dann von der content.php ausgewertet werden.

Viele Grüße,
Garvin
Hallo Garvin,

leider komme ich damit noch nicht so richtig klar.
Hier mal der grundsätzliche Aufbau meiner Website:
"content.php" definiert den grundsätzlichen HTML-Aufbau der Webseite an sich.
Diese Datei erzeugt einen Header-Bereich, die Navigation, etc. (jeweils über Funktionen).

Die "content.php"-Datei:

Code: Select all

<?php
	error_reporting(E_ALL);
	session_start();
	include '../script/function_includes.php';
	includes();
	redirect_to_sub(true);

	$page_id = get_page_id();
	
	// BLOG INCLUDIEREN?
	if($page_id == '5' OR $GLOBALS['page_id'] == '5'){
		$_GET['page_id'] = '5';
		$_POST['page_id'] = '5';
		include 'blog/include_blog_wrapper.php';
		$_REQUEST['page_id'] = '5';
	}

	$page_id = get_page_id();
	$this_file = this_file('0');
	$this_page = this_file('1');
	
	$lan = get_lan();
	doctype();
?>
<html>
	<head>
		<?php
			title();
			meta();
			include_css();
			include_js();
		?>
	</head>
	<body>
		<div class="muster_small"><a name="top"> </a></div>
		<div class="hnavi_repeater"> </div>
		<div class="projektband_repeater_left_small"> </div>
		<div class="projektband_repeater_right_small"> </div>
			<div class="all">
			<?php
				hnavi();
			?>
			<div class="main_img_container_small">
				<div class="main_img_border_edge_left"> </div>
				<div class="main_img_border_top"> </div>
				<div class="main_img_border_edge_right"> </div>
				<div class="clear_small"> </div>
				<div class="main_img_border_left"> </div>
				<div class="main_img">
					<?php
						main_img('../img/layout/', '1', '0');
					?>
				</div>
				<div class="main_img_border_right"> </div>
			</div>
			<div class="content_container_small">
				<div class="projektband_small">
					<div class="projektband_content_small">
						<?php
							snavi();
						?>
					</div>
				</div>
				<div class="content_small">
					<div class="clear" style="height: 45px; line-height: 45px;"> </div>
					<div class="div_rel">
						<?php
							include_content();
						?>
						<div class="clear"> </div>
						<div class="clear"> </div>
					</div>
				</div>
				<div class="footer_container">
					<?php
						footer();
					?>
				</div>				
			</div>
		</div>
	</body>
</html>
Auf der Webseite soll nun im Bereich wo der eigentliche Inhalt steht der Blog eingebunden werden.
Oben drüber soll weiterhin der Navi-Bereich und der Header-Bereich stehen.
Den Blog wollte ich jetzt (schon allein um eine einigermaßen sinnvolle Struktur zu behalten) in einen Ordner "/blog" setzen.

Grundsätzliche Struktur:
/html/
|------> /blog/
/img/
/script/
...

Die Datei content.php liegt im Ordner "html" (zusammen mit Include-Dateien, die den eigentlichen Inhalt auf die Seite bringen, z.B. "include_5.php", wobei 5 für die ID steht, die per GET-Parameter an die content.php weitergegeben wird. z.B. "content?PHPSID=12345&page_id=5".)

Die "include_5.php"-Datei:

Code: Select all

<?php
	if(isset($GLOBALS['content_sc'])){
		$sc = $GLOBALS['content_sc'];	
		echo $sc;
	} else {
		echo text_infos('blog_nicht_eingebunden');
	}
?>
Die Wrapper-Datei (include_blog_wrapper.php) hatte ich jetzt zuerst im gleichen Ordner wie die "include_5.php", also außerhalb des Blog-Ordners. Das funktionierte leider wie im letzten Post beschrieben nicht vollständig. Also habe ich Sie jetzt mal in den Ordner vom Blog verschoben. Leider erhalte ich hier aber genau das gleiche Problem. Ich hab jetzt per preg_replace() dafür gesorgt, dass die GET-Übergabevariable ganz vorne landet.

Leider funktioniert das direkte Überschreiben des $_GET['page_id']-Arrayvalues nicht... nehm ich das raus, springt er auf die Standard-Seite, d.h. diese Information wird nicht an der richtigen Stelle ausgewertet.

Die "include_blog_wrapper.php"-Datei:

Code: Select all

<?php
	$sc = '';
	$full_path = getcwd();
	$full_path_org = $full_path;
	$full_path = $full_path."/blog";

	$_GET['page_id'] = '5';
	$_REQUEST['page_id'] = '5';

	if(is_dir($full_path)){
		chdir($full_path);
		if(is_file('index.php')){
			ob_start();
				require("index.php");
				chdir($full_path_org);
				$sc = ob_get_contents();
			ob_end_clean();
		} else {
			echo "Datei nicht vorhanden.\n";
		}
		
		if($sc != '' AND is_array($sc) == false){
			$delimiter = '#';
			$mode = $delimiter."U";	
			$muster = 'content.php(.*)">';
			$muster = $delimiter.$muster.$mode;
			$ersetzer = 'content.php\1&'.session_name()."=".session_id()."&page_id=5\">";
			$sc = preg_replace($muster, $ersetzer, $sc);		

			$GLOBALS['content_sc'] = $sc;			
		} else {
			$GLOBALS['content_sc'] = text_infos('blog_leer');
		}
		connect();		
	} else {
		echo "Dieser Ordner existiert nicht.";
	}
?>
Das seltsamste ist ja: Einige Funktionen der Links scheinen zu funktionieren.
z.B. funktioniert die Kommentarfunktion wunderbar. (umgeschriebener Link ist: content.php?/archives/108-Magic-10.html&PHPSESSID=f160a937337b69c3dff7b89a1e712d79&page_id=5")

Was nicht funktioniert ist das Anwählen eines Autors zum Anzeigen aller Beiträge von ihm/ihr (da wird immer der gleiche Author angewählt), die Blätterfunktion und die Kalenderfunktion zum Durchklicken der Monate.

Hast du ne Idee wie ich da weiterkomme?
Die Webseite steht mit eigenem CMS und DB-Integration - sie in den Blog zu integrieren ist also nicht so ohne weiteres machbar. Einzige Möglichkeit wäre eventuell ein IFrame, aber sowas sieht immer gleich mal mies aus und ich vermeide Iframes wo ich kann.

Viele Grüße
Dominik
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Embedding Problem - Verlinkungen funktionieren nicht

Post by garvinhicking »

Hi!

Hm, gibt es ne möglichkeit dass ich mir das via FTP/SSH mal ansehen kann? Ich glaube dann würde ich es wesentlich besser verstehen und auch sicher direkt beheben können...

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply