Seite 1 von 1

Contendo-Navigation extern anzeigen

Verfasst: Mi 19. Mai 2010, 13:23
von Sd5
Hallo,

Ich muss die im Contenido definierte Seitennavigation in eine externe Seite einbinden (die Navigation da, hat exakt das selbe Design), auf der kein Contenido läuft, sondern die Seite anders aufgebaut ist.

Hat da jemand eine einfache Lösung, bzw. kann mir sagen, was am einfachsten umzusetzen ist?

1. Möglichkeit: Navigation direkt via PHP aus der MySQL-DB auslesen und dann halt neu "designen"? Wäre das kompliziert vom Aufwand her?

2. Möglichkeit: Am praktischsten wäre es mir, wenn ich quasi den ganzen Seiteninhalt (sprich den Quellcode z. B. von http://www.musterseite.de/cms/front_con ... 345&lang=1) irgendwie automatisch im Contenido abspeichern (statisch) könnte und diesen dann extern einfach per SQL-Abfrage auslese. Hier würde ich natürlich den Style so anpassen, dass nur die Navigation angezeigt wird.

Hat jemand eine einfachere Lösung oder kann mir sonst einen Tipp geben?

Re: Contendo-Navigation extern anzeigen

Verfasst: Do 20. Mai 2010, 08:18
von xmurrix
Hallo Sd5,

willkommen im Contenido Forum.

Du kannst das am einfachsten lösen, indem du ein Layout mit einem Modulcontainer definierst

Code: Alles auswählen

<container id="10" name="Navigation_Main" types="Navigation" mode="fixed" default="Navigation_Main">Navigation_Main</container>
Ein Template für dieses Layout erstellst und einen Artikel, das auf das erstellte Template basiert. Rufst du dann per HTTP Request diesen Artikel auf, wird nur die Navigation gerendert und du kannst das überall integrieren. Die URLs in der Navi müssten halt absolut (inkl. Protokoll und Host) sein.

Gruß
xmurrix

Re: Contendo-Navigation extern anzeigen

Verfasst: Do 20. Mai 2010, 21:54
von Sd5
Hm, danke. Ich muss jetzt aber ehrlich sagen, dass ich das irgendwie nicht hinkriege mit dem HTTP Request. Ich hab im Internet danach gesucht und ein Beispiel gefunden:

Code: Alles auswählen

<?php

function GetHttp()
{
 do {
        $fp = fsockopen("server6.digital-webstream.de", 23575);
    } while(!$fp);  
    fputs($fp, "GET /index.html HTTP/1.1\r\n");
    fputs($fp, "Host: server6.digital-webstream.de:23575\r\n");
    fputs($fp, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\r\n");
    fputs($fp, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");
    fputs($fp, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
    fputs($fp, "Keep-Alive: 300\r\n");
    fputs($fp, "\r\n");

    while(!feof($fp))
      $res .= fgets($fp, 128);
      
    fclose($fp);
    return $res;
}

echo GetHttp(); 
?>
Dieses Beispiel funktioniert. Wenn ich aber da die Adresse abändere, dann funktioniert das nicht mehr. Muss die Seite bzw. der Server, der aufgerufen wird, speziell konfiguriert sein oder was mach ich falsch? Oder vielleicht anders gefragt: Wenn ich jetzt u. B. google.de da aufrufen will, anstelle von server6.digital-webstream.de, wie krieg ich das hin?

Re: Contendo-Navigation extern anzeigen

Verfasst: Fr 21. Mai 2010, 00:05
von xmurrix
Wenn du Glück hast, d . h. PHP ist entsprechend konfiguriert (allow_url_fopen), sollte das mit

Code: Alles auswählen

$google = file_get_contents('http://www.google.de/');
echo $google;
gehen.

Im Beispiel von dir musst du noch den Port anpassen, HTTP-Requests gehen in der Regel über Port 80, also fopen folgendermaßen verwenden:

Code: Alles auswählen

...
$fp = fsockopen("www.google.de", 80);
...
Schau dir mal das folgende fsockopen()-Beispiel an
http://www.php-homepage.de/manual/funct ... ckopen.php

Gruß
xmurrix

Re: Contendo-Navigation extern anzeigen

Verfasst: Fr 21. Mai 2010, 08:10
von kummer
xmurrix hat geschrieben:Wenn du Glück hast, d . h. PHP ist entsprechend konfiguriert (allow_url_fopen), sollte das mit

Code: Alles auswählen

$google = file_get_contents('http://www.google.de/');
echo $google;
gehen.
Eher das Gegenteil, oder nicht? allow_url_fopen wird nicht umsonst meist durch den ISP ausgeschaltet. Selbst wenn es eingeschaltet sein sollte, würde ich es nicht verwenden. Plötzlich kommt ein Update und die Einstellung ist nicht mehr so, dass allow_url_fopen gesetzt ist. Dann funktioniert es nicht mehr.

Zunächst wird eine solche Integration vergleichsweise langsam sein. Dabei wird ja dein Server angesprochen und dieser macht einen erneuten Request via Internet (je nach Situation). Das wird die Antwortzeit bestimmt verdoppeln. Wenn du also Zugriff auf die DB hast, würde es sich lohnen, die Daten dort zu holen und die Navigation selber zu erstellen.

Dass es bei dir nicht funktioniert, wenn du die Adresse änderst, liegt am GET-Request. Die resultierende Adresse muss natürlich stimmen und ist durchaus nicht immer index.html. Ausserdem wird diese Variante Weiterleitungen nicht berücksichtigen. Du musst also direkt eine ansprechbare URL verwenden (also das, was dann im Browser zu sehen ist, wenn du die Seite aufrufst, minus Protokoll und Domäne freilich). Wenn die angesprochene Datei nicht bekannt ist, kannst du auch nur ein Slash (/) verwenden. Dann klappt das auch mit Google.

Re: Contendo-Navigation extern anzeigen

Verfasst: Fr 21. Mai 2010, 21:14
von xmurrix
kummer hat geschrieben:...Eher das Gegenteil, oder nicht? allow_url_fopen wird nicht umsonst meist durch den ISP ausgeschaltet. Selbst wenn es eingeschaltet sein sollte, würde ich es nicht verwenden. Plötzlich kommt ein Update und die Einstellung ist nicht mehr so, dass allow_url_fopen gesetzt ist. Dann funktioniert es nicht mehr....
Hallo kummer,

du hast schon recht. darauf, dass man mit file_get_contents() externen Seiten aufrufen kann, sollte man sicht nicht verlassen. Es ist nicht die idealste Lösung, aber die einfachste - ein Einzeiler mit PHP-Bordmitteln halt...

Gruß
xmurrix

Re: Contendo-Navigation extern anzeigen

Verfasst: Di 1. Jun 2010, 22:28
von Sd5
Also, ich hab jetzt die Navigation direkt aus der DB ausgelesen, sieht dann etwa so aus und klappt perfekt:

Code: Alles auswählen

<?php

$basis_href = "http://www.musterseite.de";
$hauptnavi_id = 1;
$idlang = 1;

?>

$str_sql = "SELECT * FROM con_cat WHERE parentid = $hauptnavi_id";
$resultat = mysql_query($str_sql);
$anzahl_zeilen_stufe1 = mysql_num_rows($resultat); 


for($x = 0; $x < $anzahl_zeilen_stufe1; $x++)
{
	if($x == 0)
	{
		$idcat_stufe1 = 0;
	}	

	$str_sql = "SELECT * FROM con_cat WHERE con_cat.parentid = $hauptnavi_id AND con_cat.preid = $idcat_stufe1";
	$resultat = mysql_query($str_sql);
	$idcat_stufe1 = mysql_result($resultat, 0, 'idcat');
	
	
	$str_sql = "SELECT * FROM con_cat_lang WHERE idcat = $idcat_stufe1";
	$resultat = mysql_query($str_sql);
	$cat_name = mysql_result($resultat, 0, 'name');
	$cat_visible = mysql_result($resultat, 0, 'visible');
	$cat_public = mysql_result($resultat, 0, 'public');
	
	echo '<div class="layer_container">';	
	
	if($cat_visible == 1 && $cat_public  == 1)
	{
		echo'
		<a onmouseout="hide_elem(\'layer_'.$idcat_stufe1.'\');css_klasse(\'top-nav-'.$idcat_stufe1.'\',\'top-nav\');" onmouseover="show_elem(\'layer_'.$idcat_stufe1.'\');css_klasse(\'top-nav-'.$idcat_stufe1.'\',\'top-nav-a\');" class="top-nav" id="top-nav-'.$idcat_stufe1.'" href="'.$basis_href.'front_content.php?idcat='.$idcat_stufe1.'&lang='.$idlang.'">'.$cat_name.'</a>
		';
	}

	$str_sql = "SELECT * FROM con_cat WHERE parentid = $idcat_stufe1";
	
	$resultat = mysql_query($str_sql);
	$anzahl_zeilen_stufe2 = mysql_num_rows($resultat); 
	
	
	// Wenn Unterkategorien vorhanden sind
	if($anzahl_zeilen_stufe2)
	{
		echo '		
		<div onmouseout="hide_elem(\'layer_'.$idcat_stufe1.'\');css_klasse(\'top-nav-'.$idcat_stufe1.'\',\'top-nav\');" onmouseover="show_elem(\'layer_'.$idcat_stufe1.'\');css_klasse(\'top-nav-'.$idcat_stufe1.'\',\'top-nav-a\');" class="layer_1" id="layer_'.$idcat_stufe1.'">
		';
	}	
	for($y = 0; $y < $anzahl_zeilen_stufe2; $y++)
	{
		$links_inhalt = '';
		
		if($y == 0)
		{
			$idcat_stufe2 = 0;
		}	
		
		$str_sql = "SELECT * FROM con_cat WHERE parentid = $idcat_stufe1 AND preid = $idcat_stufe2";
		$resultat = mysql_query($str_sql);
		$idcat_stufe2 = mysql_result($resultat, 0, 'idcat');
		
		$str_sql = "SELECT * FROM con_cat_lang WHERE idcat = $idcat_stufe2";
		$resultat = mysql_query($str_sql);
		$cat_name = mysql_result($resultat, 0, 'name');
		$cat_visible = mysql_result($resultat, 0, 'visible');
		$cat_public = mysql_result($resultat, 0, 'public');
		
		if($cat_visible == 1 && $cat_public  == 1)
		{
			echo'
			<a onmouseout="hide_elem(\'layer_'.$idcat_stufe2.'\');" onmouseover="show_elem(\'layer_'.$idcat_stufe2.'\');" class="top-nav2" href="'.$basis_href.'front_content.php?idcat='.$idcat_stufe2.'&lang='.$idlang.'">'.$cat_name.'</a>
			';
		}
		
		$str_sql = "SELECT * FROM con_cat WHERE parentid = $idcat_stufe2";
		
		$resultat = mysql_query($str_sql);
		$anzahl_zeilen_stufe3 = mysql_num_rows($resultat); 
		
		
		for($z = 0; $z < $anzahl_zeilen_stufe3; $z++)
		{
			if($z == 0)
			{
				$idcat_stufe3 = 0;
			}	
			
			$str_sql = "SELECT * FROM con_cat WHERE parentid = $idcat_stufe2 AND preid = $idcat_stufe3";
			$resultat = mysql_query($str_sql);
			$idcat_stufe3 = mysql_result($resultat, 0, 'idcat');
			
			$str_sql = "SELECT * FROM con_cat_lang WHERE idcat = $idcat_stufe3";
			$resultat = mysql_query($str_sql);
			$cat_name = mysql_result($resultat, 0, 'name');			
			$cat_visible = mysql_result($resultat, 0, 'visible');
			$cat_public = mysql_result($resultat, 0, 'public');
		
			if($cat_visible == 1 && $cat_public  == 1)
			{				
				$links_inhalt = $links_inhalt.'<a onmouseout="hide_elem(\'layer_'.$idcat_stufe3.'\');" onmouseover="show_elem(\'layer_'.$idcat_stufe3.'\');" class="top-nav2" href="'.$basis_href.'front_content.php?idcat='.$idcat_stufe3.'&lang='.$idlang.'">'.$cat_name.'</a>';
			}
		}
		
		if($anzahl_zeilen_stufe3 && $links_inhalt)
		{
			echo '<div class="layer_container">';
			echo '		
			<div onmouseout="hide_elem(\'layer_'.$idcat_stufe2.'\');css_klasse(\'top-nav-'.$idcat_stufe2.'\',\'top-nav\');" onmouseover="show_elem(\'layer_'.$idcat_stufe2.'\');css_klasse(\'top-nav-'.$idcat_stufe2.'\',\'top-nav-a\');" class="layer_2" id="layer_'.$idcat_stufe2.'">
			';
			
			echo $links_inhalt;
			// layer_$idcat_stufe2 schliessen
			// layer_container schliessen
			echo '</div></div>';
		}
	}
	
	if($anzahl_zeilen_stufe2)
	{
		// layer_$idcat_stufe1 schliessen
		echo '</div>';
	}
	
	// layer_container schliessen
	echo '</div>';
}

?>