Page 1 of 2

ein Backend mehrere websites

Posted: Tue 26. Sep 2006, 01:45
by phalancs
PHPWCMS um mehrere Seiten zu administrieren.

Ich weiss das es schon teilweise hier diskutiert wurde.

Meistens wurde empfohlen, dass wenn man phpwcms für mehrere Seiten benutzen möchte eine zweite Installation anlegen sollte. Das halte ich irgendwie für absolut unnötig, da phpwcms von seiner Struktur doch egtl. dafür ausgelegt ist als ein Backend für mehrere Projekte fungieren zu können.

Von den Funktionen her passt das auch optimal und übersichtlicher als mehrere Installationen ist es allemal.
Das einzige wobei ich da noch Probleme habe ich das Menü - Wie kann ich unterschiedliche Menüstyles anlegen??

Die Menüstyles werden ja in dieser config template Datei festgelegt, deshalb werden sie leider sitewide angewandt.

Kennt jemand da einen Workaround?

Danke!

Posted: Tue 26. Sep 2006, 05:50
by flip-flop
Hi phlalance,

bezüglich des MEnüsystems: Der TAG NAV_LIST_UL (V1.2.8 ) wird nicht durch die conf.template_default.inc.php gesteuert. Die Fremd-RTs auch nicht.

Weiß nicht ob es hilft.

Gruß Knut

Posted: Tue 26. Sep 2006, 13:04
by phalancs
Ja hilft, danke, habe mir sowas schon gedacht. Darübe rlässt es sich machen (mit einem zur not eigenen RT).

Thx

Posted: Tue 26. Sep 2006, 17:45
by Oliver Georgi
Ich hatte das schon ein paar mal als Beispiel angebracht - phpwcms ist derzeit nicht über das Backend so zu steuern, dass unterschiedliche Domains genutzt werden können. Insgesamt ist es aber eher trivial.

Das wichtigste ist der Wert aus $LEVEL_ID[1]. Entspricht der aktuellen ID der 1. Menüebene.

Denke Dir das so:

[ROOT] - Home (ID:0)
[domain1] - Root Domain 1 (ID:1)
[domain2] - Root Domain 2 (ID:2)

Nun baust Du ein Script in frontend_init, das wie folgt aussieht:

Code: Select all

<?php
// compare against current domain and redirect to correct if neccessary
if(isset($LEVEL_ID[1])) {
  //check active Domain
  if($LEVEL_ID[1] == 1 && strpos(PHPWCMS_URL, 'mydomain1.com') === false) {
    headerRedirect('http://www.mydomain1.com/index.php'.returnGlobalGET_QueryString());
  }
  if($LEVEL_ID[1] == 2 && strpos(PHPWCMS_URL, 'mydomain2.com') === false) {
    headerRedirect('http://www.mydomain2.com/index.php'.returnGlobalGET_QueryString());
  }
}
?>
Habs nicht getestet. Sollte aber so gehen.

Wichtig!

Code: Select all

$phpwcms['site'] = 'http://'.$_SERVER['SERVER_NAME'].'/';
$_SERVER['SERVER_NAME'] sollte immer die gerade aufgerufene Domain enthalten.

Über $LEVEL_ID[1] kennst Du dann auch immer die Startlevel ID für die Menüs.

Für die Indexseite sollte dann noch ein eigener Redirect geschrieben werden, der dann die aktuell aufgerufene Domain prüft und entsprechend dieser in die Startseite der betreffenden Domain weiterleitet.

Oliver

Posted: Wed 27. Sep 2006, 07:49
by flip-flop
@Oliver:
Für die Indexseite sollte dann noch ein eigener Redirect geschrieben werden, der dann die aktuell aufgerufene Domain prüft und entsprechend dieser in die Startseite der betreffenden Domain weiterleitet.
Das wäre ja eine Umschaltung für z.Bsp. eine mehrsprachige Seite ohne in der .htaccess rumzufummeln. Super.

Wie wird denn die index abgefragt? Bitte um einen Anschub.

Code: Select all

....  if($LEVEL_ID[1] == 0 && strpos(PHPWCMS_URL, 'mydomain1.com') === false) ..... {
Gruß Knut

Posted: Wed 27. Sep 2006, 08:01
by Oliver Georgi
Index (Root) entspricht immer $LEVEL_ID[0]. Die Bedingung

Code: Select all

LEVEL_ID[1] == 0
ist praktisch unmöglich ;-), da jede Level ID unterhalb des Roots >0 ist.

Für die Index funktioniert mein beschriebenes Verfahren auch nicht!!! Deswegen muss dort eine separate Prüfung erfolgen. Alle unterhalb Root liegenden Level werden ja von der "Weiche" auf Basis von LEVEL_ID[1] erfasst.

Deswegen lautet die Prüfung schlichtweg wie folgt:

Code: Select all

...if($aktion[0] == 0 && strpos(PHPWCMS_URL, 'mydomain1.com') === false)...
Nur dann kannst Du sicher sein, dass die aufgerufene Seite aus dem Root Level stammt und sich auch gerade dort befindet.

Wobei im Index keine False Prüfung erfolgen sollte, denn hier möchte man ja erreichen, dass bei Aufruf der Index unter einer bestimmten Domain automatisch auf die passende Domain-Startseite weitergeleitet wird:

Code: Select all

if($aktion[0] == 0) {
  if(strpos(PHPWCMS_URL, 'mydomain1.com')) {
    headerRedirect('http://www.mydomain1.com/index.php?mydomain1_start');
  } elseif(strpos(PHPWCMS_URL, 'mydomain2.com') {
    headerRedirect('http://www.mydomain2.com/index.php?mydomain2_start');
  } else {
    //redirect to "default"
    headerRedirect('http://www.default.com/index.php?default_start');
  }
}
Oliver

Posted: Wed 27. Sep 2006, 10:01
by flip-flop
...if($aktion[0] == 0 && strpos(PHPWCMS_URL, 'mydomain1.com') === false)...
Yep, bei dieser Variante dreht sich die ganze Sache um. mydomain1 -> mydomain2 und umgekehrt. Also bitte nicht verwenden.
# Please don´t use this.

Hier eine funktionierende Umschaltung für zwei domains mydomain1.com und mydomain2.com mit einem
HTTP Status Code: HTTP/1.1 301 Moved Permanently
# There is a switch working with two domains mydomain1.com and mydomain2.com generating an HTTP Status Code:
HTTP Status Code: HTTP/1.1 301 Moved Permanently

Code: Select all

<?php
// compare against current domain and redirect to correct if neccessary
// http://www.phpwcms.de/forum/viewtopic.php?p=73771
// Installation: Put this snippet into the folder /frontend_init/ 
// and switch at conf.inc.php: $phpwcms['allow_ext_init']    = 1; 
// E.g.:
// Startpoint from mydomain1.com is the ID=1 -> $LEVEL_ID[1] = 1
// Startpoint from mydomain2.com is the ID=2 -> $LEVEL_ID[1] = 2
//
// PHPWCMS_URL -> http://mydomainX.com/
// returnGlobalGET_QueryString() -> ?alias
// $aktion[0] == 0 -> pointer at the root level


if(isset($LEVEL_ID[1])) { 
	// Pointer behind the root level ?
	// Yes -> check active Domain behind root level
		if($LEVEL_ID[1] == 1 && strpos(PHPWCMS_URL, 'mydomain1.com') === false) { 
		// E.g. Using the ID=1 (for maydomain1.com) but with the domain maydomain2.com, than switch back to .mydomain1.com
		// E.g. http://www.mydomain2.com/index.php?1-contact  switch to http://www..mydomain1.com/index.php?1-contact
			headerRedirect('http://www.mydomain1.com/index.php'.returnGlobalGET_QueryString());
		} else { 
		 // The same for the domain mydomain2.com
			if($LEVEL_ID[1] == 2 && strpos(PHPWCMS_URL, 'mydomain2.com') === false) {
				headerRedirect('http://www.mydomain2.com/index.php'.returnGlobalGET_QueryString());
				}
			}
} else {
	// check root level for active Domain
	if($aktion[0] == 0) { 
	// pointer on the root level e.g. http://mydomain1.com/  ??
		if(strpos(PHPWCMS_URL, 'mydomain1.com')) { 
		// Yes, go to my startpage for the domain 1
			header( "HTTP/1.1 301 Moved Permanently" );
			headerRedirect('http:/www.mydomain1.com/index.php?mydomain1_start');
		} elseif(strpos(PHPWCMS_URL, 'mydomain2.com')) { 
			// The same for domain 2
			header( "HTTP/1.1 301 Moved Permanently" );
			headerRedirect('http://www.mydomain2.com/index.php?mydomain2_start');
			} else { 
			//redirect to "default"  -> Fallback if there is an third domain or what ever
				header( "HTTP/1.1 301 Moved Permanently" );
				headerRedirect('http://www.default.com/index.php?default_start');
				}
		}
}
?>
[EDIT 27.09.06] Header() -> header() [/EDIT]

#Works well for me.

Arbeitet ausgezeichnet.

[EDIT 08.02.07]
Output of relevant variables:

Code: Select all

[PHP]
echo ' >>-Server_Name-: '.$_SERVER["SERVER_NAME"];
echo ' >>-PHPWCMS_URL-: '.PHPWCMS_URL;
echo ' >>-QueryString-: '.returnGlobalGET_QueryString();

echo ' >>-LEVEL-: '; 
dumpVar($GLOBALS['LEVEL_ID']);

echo ' >>-aktion_0-: ';
dumpVar($GLOBALS['aktion']);
[/PHP]
[/EDIT]


[EDIT 08.12.06]
Die neueste Variante: http://www.phpwcms.de/forum/viewtopic.php?p=77729#77729

Code: Select all

if(preg_match('/\.de$/i', $_SERVER['SERVER_NAME'])) {
   //de
   headerRedirect('dahin');
} else {
   //en or whatever...
   headerRedirect('dorthin');
}
[/EDIT]

Thanks Oliver

Posted: Wed 27. Sep 2006, 10:09
by Oliver Georgi
Header() -> header()!!!


I will enhance headerRedirect by additional value for that.

Oliver

Posted: Mon 27. Nov 2006, 15:22
by phalancs
Hab diesen Thread erst gerade wiedergefunden, da hat sich ne menge getan. Gefällt mir alles sehr gut!

Ich hoffe ntürlich insgeheim darauf, dass der Multidomainsupport irgendwann Teil der Sitestructure-Settings wird :)

Erstmal ein Danke an Oli und Konsorten.

Posted: Mon 27. Nov 2006, 17:25
by Oliver Georgi
Schon in Planung ... aber für einen späteren Zeitpunkt.

Oliver

Posted: Mon 27. Nov 2006, 17:56
by kukki
Ich habe mich damit auch schon einmal rumgequält. Leider bin ich kein PHP-Profi und habe mir die Hilfe eines Freundes dazugeholt. :P
Theoretisch müßte man eine Weiche für eine variable config.php einbauen (case/ if else ... ), die die unterschiedlichen Dok_roots und andere Variablen erzeugt, vorausgesetzt - Du hast zwei Domains dafür zur Verfügung. Wenn diese verbogen werden könnte, inclusive der Datenbank-db_prepend für die unterschiedlichen Daten, dann könnte doch die Sache auf die Reihe gehen.

Zwei Tabellensammlungen mit unterschiedlichen Kennzeichen (Prepend) erzeugen ist ja nicht so schwierig.

Die restlichen Einstellungen werden dann für eine entgültige Config.php zusamenngestellt, das endet aber in einen "Hack", der bei jedem Update zu beachten ist. Bei mehreren Websites ist mir diese Lösung einfach zu aufwendig!
Image

Posted: Mon 27. Nov 2006, 19:22
by Oliver Georgi
Naja, auf der Basis denke ich erst mal nicht. Das ist etwas vollkommen anderes und erst mal nicht geplant. Kann man sich bereits heute mittels symbolischer Links "zusammenfrickeln".

Oliver

Posted: Mon 27. Nov 2006, 20:08
by phalancs
@kukki
Was macht Das für einen Sinn? Dann kan man es doch gleich zweimal installieren. Also der Sinn so einer Multidomain lösung soll ja gerade im "Content Sharing" liegen.

Das ganze ist egtlo. auch relativ unkompliziert, solange man in derLage ist die Domain aufs richtige ziel aufzuschalten.

:)

Posted: Tue 28. Nov 2006, 10:35
by kukki
Die eigentliche (Be)Nutzung war ja auch nicht klar gestellt worden, ob ich das System als Webagentur benutze um mehrere Website zu administrieren/ zu erstellen oder ob ich nur auf meinem eigenen Webspace damit zwei oder drei Domains für zwei drei Websites bedienen will. Im letzteren Fall würde ich eine Einzelinstallation vorziehen, denn ein Update/ Upgrade ist damit unkomplizierter.

Ich habe bereit mehrere Anfragen gehabt, wo ein Kunde zwei Webseiten haben wollte, auf ein und denselben Webspace mit eigenen TLDs. Das Argument, die Seiten später trennen zu wollen, weil der Geschäftsbereich sich ebenfalls trennt, schlug sofort ein, dieses System zweimal separat zu installieren und zu adminitrieren. :roll:
Kann man sich bereits heute mittels symbolischer Links "zusammenfrickeln".
Bitteschön, kann man - ist aber bestimmt keine tolle Lösung, denn es sollte ja ein System sein, dass zum Schluß auch noch updatefähig ist.

:!: Allerdings bleibt für mich dieses Thema auch akkut, denn mir würde es auch schon helfen, ... ich selber betreibe u.a. eine solche Website, die von 4 verschiedenen TLDs angesteuert wird, 4 verschiedene Eintrittspunkte hat, die thematisch aber auch sehr eng verzahnt sind und zusammengehören. da hätte ich eine solche Lösung auch gebrauchen können, weil andersrum natürlich der Aufwand für die Pflege (Datenbanken ...), vor allem wenn dann noch Redakteure daran arbeiten steigt. :!:

Posted: Tue 11. Sep 2007, 20:54
by Both
Hi,

ich muß gleich einräumen, daß ich mit PHP nicht so unterwegs bin.

Das Skript

Code: Select all


<?php
// compare against current domain and redirect to correct if neccessary
// http://www.phpwcms.de/forum/viewtopic.php?p=73771
// Installation: Put this snippet into the folder /frontend_init/
// and switch at conf.inc.php: $phpwcms['allow_ext_init']    = 1;
// E.g.:
// Startpoint from mydomain1.com is the ID=1 -> $LEVEL_ID[1] = 1
// Startpoint from mydomain2.com is the ID=2 -> $LEVEL_ID[1] = 2
//
// PHPWCMS_URL -> http://mydomainX.com/
// returnGlobalGET_QueryString() -> ?alias
// $aktion[0] == 0 -> pointer at the root level


if(isset($LEVEL_ID[1])) {
   // Pointer behind the root level ?
   // Yes -> check active Domain behind root level
      if($LEVEL_ID[1] == 1 && strpos(PHPWCMS_URL, 'mydomain1.com') === false) {
      // E.g. Using the ID=1 (for maydomain1.com) but with the domain maydomain2.com, than switch back to .mydomain1.com
      // E.g. http://www.mydomain2.com/index.php?1-contact  switch to http://www..mydomain1.com/index.php?1-contact
         headerRedirect('http://www.mydomain1.com/index.php'.returnGlobalGET_QueryString());
      } else {
       // The same for the domain mydomain2.com
         if($LEVEL_ID[1] == 2 && strpos(PHPWCMS_URL, 'mydomain2.com') === false) {
            headerRedirect('http://www.mydomain2.com/index.php'.returnGlobalGET_QueryString());
            }
         }
} else {
   // check root level for active Domain
   if($aktion[0] == 0) {
   // pointer on the root level e.g. http://mydomain1.com/  ??
      if(strpos(PHPWCMS_URL, 'mydomain1.com')) {
      // Yes, go to my startpage for the domain 1
         header( "HTTP/1.1 301 Moved Permanently" );
         headerRedirect('http:/www.mydomain1.com/index.php?mydomain1_start');
      } elseif(strpos(PHPWCMS_URL, 'mydomain2.com')) {
         // The same for domain 2
         header( "HTTP/1.1 301 Moved Permanently" );
         headerRedirect('http://www.mydomain2.com/index.php?mydomain2_start');
         } else {
         //redirect to "default"  -> Fallback if there is an third domain or what ever
            header( "HTTP/1.1 301 Moved Permanently" );
            headerRedirect('http://www.default.com/index.php?default_start');
            }
      }
}
?>
funktioniert ja ausgezeichnet in der 1.3.3 Version. Aber nun zu meinen Fragen:

1) Wie seht das ganze für mehrere Domains aus? Kann mir jemand hier ein Beispiel posten? Das Skript aus dem Thread
http://www.phpwcms.de/forum/viewtopic.php?p=77729#77729
wollte bei mir irgendwie nicht, sonst hätte ich das genommen.

2) Was sagen denn die Suchemaschinen zu der Umleitung. Delisten die einen vielleicht nicht gleich?

Beste Grüsse

Both