Contendo-Navigation extern anzeigen

Gesperrt
Sd5
Beiträge: 3
Registriert: Mi 19. Mai 2010, 13:16
Kontaktdaten:

Contendo-Navigation extern anzeigen

Beitrag 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?
xmurrix
Beiträge: 3217
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Sd5
Beiträge: 3
Registriert: Mi 19. Mai 2010, 13:16
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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?
xmurrix
Beiträge: 3217
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
xmurrix
Beiträge: 3217
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Sd5
Beiträge: 3
Registriert: Mi 19. Mai 2010, 13:16
Kontaktdaten:

Re: Contendo-Navigation extern anzeigen

Beitrag 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>';
}

?>
Gesperrt