Modulvorstellung: MultiDomains

Hilfe zu Modulen und Tags
Andiministrator

Modulvorstellung: MultiDomains

Post by Andiministrator »

Hey Jungs (und Mädels),

In den letzten beiden Wochen habe ich ein neues Modul für CMSms entwickelt: MultiDomains
Download: http://dev.cmsmadesimple.org/project/files/852

Dieses Modul ermöglicht es, mit einer CMSms Installation mehrere Domains zu nutzen. Dabei kann festgelegt werden, welche Domain auf welche Seite (bzw. Seitenbaum) gelinkt werden soll. Die entsprechenden Umleitungen geschehen dann automatisch.
Weiterhin bietet es eine Funktion, um verschobene Seiten (oder alte URLs) mittels 301 Weiterleitung auf eine neue Seite weiterzuleiten (quasi, was das Modul MovedPages auch macht).
Zu guterletzt gibt es eine kleine Statistik, wieviel Zugriffe über welche Domain kamen.
Ach ja, es gibt auch eine Unterstützung für Entwicklungsserver, so dass man beim Überspielen der Datenbank nichts ändern muss.

So, nun mal eine kleine Anleitung, wie es eingesetzt wird:
1. Aktiviere mod_rewrite
- Öffne die Datei "config.php" (im CMSms Root Verzeichnis) und setze den Parameter "url_rewriting" auf "mod_rewrite" (falls dies nicht schon geschehen ist)
- Erstelle eine neue Datei namens ".htaccess" (falls diese nicht bereits existiert) im CMSms Root Verzeichnis mit (mindestens) folgendem Inhalt:

Code: Select all

# .htaccess für CMS made simple
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_METHOD} !POST$
RewriteRule ^(.*) %{REQUEST_URI}/ [NE,R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
# EOF
2. Füge den Modul Platzhalter in Ddin Seiten Template ein
Füge den folgenden Platzhalter an den Anfang deiner Seiten-Templates ein:

Code: Select all

{cms_module module='MultiDomains'}
Der Platzhalter MUSS AM ANFANG deiner Seiten-Templates stehen (noch vor "{process_pagedata}")!
3. Füge deine Domains im Modul-Backend hinzu
Gehe ins Modul-Backend (unter Erweiterungen/MultiDomains) und füge deine Domains mit deren zugehörigen Seiten(bäumen) hinzu.

Wenn Probleme auftreten, würde ich mich über eine Problembeschreibung freuen, so dass ich das Problem nachstellen kann ...
NaN

Re: Modulvorstellung: MultiDomains

Post by NaN »

Ich habe eine Vision... Ich denke werde eine Schnittstelle zu diesem Modul mit in AdvancedContent einbauen! ;D
(Ähnlich wie mit dem FrontendUser Zugriff auf eine Seite)
So kann man gleich beim Bearbeiten einer Seite festlegen unter welcher Domain sie erreichbar sein soll, ohne anschließend nochmal in Dein Modul gehen und das ändern zu müssen.
(Ich mags, wenn Dinge wie aus einer Handbewegung geschehen ;) )

Aber vorher werd ich das Ding erstmal testen ;)
Schonmal danke für dieses Modul.
Jetzt kann ich mir das ganze HickHack mit internen Weiterleitungen etc. sparen.
(Hatte eine Seite mit Subdomains, hat aber mit CMSms nicht so wirklich schön funktioniert bzw. war nicht so einfach zu managen. Ich hoffe, dass sich das jetzt ändert :) )
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

Klingt interessant und könnte ich mir auch gut vorstellen :)

Jetzt schau ich erstmal, ob gravierende Probleme auftreten und dann lass uns das angehen.

Ich baue derzeit auch das Comments-Modul neu, vielleicht kann man da (später) auch ein Kontrollfeld in AdvancedContent einbauen, um zu kontrollieren, für welche Seite Kommentare erlaubt werden sollen ...
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: Modulvorstellung: MultiDomains

Post by nockenfell »

Bin gerade am Testen des Moduls. Daraus ergibt sich folgende Frage:

Ich habe eine Seite mit folgender stark vereinfachte Strukur:

1 Hauptseite
2 Seite
  2.1 Seite
  2.2 ...
3 Seite mit anderer Domain
  3.1 ...
4 Seite

Die Weiterleitung der 2. Domain auf die Seite 3 funktioniert problemlos. Dargestellt wird dabei das gleiche wie bei der Hauptdomain. Nun erscheinen jedoch alle Menüpunkte mit der Zweitdomain. Ich möchte jedoch nur den 3-er Stamm mit der Zweitdomain erreichbar haben. Sobald aus diesem Bereich herausgesurft wird, soll wieder die Hauptdomain gelten.

Zu sehen hier:
http://www.lernholz.com (Hauptdomain)
http://www.lerncd.eu (zweitdomain)

Die Hauptdomain ist im MultiDomains als Hauptdomain definiert.
[this message is written with 100% recycled bits]
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: Modulvorstellung: MultiDomains

Post by nockenfell »

Eine kleine Unschönheit:

Mit aktivierter Multidomain sind alle Seiten sowohl mit

http://www.domain.de/seite.htm wie auch
http://www.domain.de/seite/ erreichbar

Das ist SEO technisch nicht optimal. Ist mir vorhin beim Testen der Umleitung alter URLs aufgefallen. Ansonsten ein super Modul!
[this message is written with 100% recycled bits]
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

Hallo nockenfell,

Danke für die Rückmeldung!
Ich werde mir morgen/übermorgen die Sachen mal anschauen und melde mich dann wieder.

Viele Grüße
Andi
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

nockenfell wrote: Nun erscheinen jedoch alle Menüpunkte mit der Zweitdomain. Ich möchte jedoch nur den 3-er Stamm mit der Zweitdomain erreichbar haben.
Ersteinmal zum Verständnis, dass wir nicht aneinander vorbei reden: In Deinem Menü erscheinen alle Menüpunkte mit der selben Domain, richtig? Wenn Du darauf klickst, müsste allerdings korrekt auf die jeweils eingestellte Domain (mit 301) weitergeleitet werden.

Da hast Du natürlich recht, dass ist nicht so toll. Das Problem ist der Menümanager, welcher immer die root_url aus der config.php nimmt. An dem möchte ich jedoch nichts modifizieren, das ist ein Core-Modul. Ich denke das beste wird sein, wenn ich für den Menümanager einen Modifikator für {$node->url} schreibe, der dann für $node->url die korrekte URL einsetzt.

Mir wird gerade noch ein weiteres Problem bewusst. Wenn man im CMSms Backend eine Seite löscht, diese aber noch im Modul "MultiDomains" angelegt ist, kann es zu Komplikationen kommen. Hier muss ich wohl noch eine Abfrage schreiben.
nockenfell wrote: Mit aktivierter Multidomain sind alle Seiten sowohl mit
http://www.domain.de/seite.htm wie auch
http://www.domain.de/seite/ erreichbar
Ist das nicht in der config.php ( $config['page_extension']='/'; ) geregelt?
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: Modulvorstellung: MultiDomains

Post by nockenfell »

Andiministrator wrote:
nockenfell wrote: Nun erscheinen jedoch alle Menüpunkte mit der Zweitdomain. Ich möchte jedoch nur den 3-er Stamm mit der Zweitdomain erreichbar haben.
Ersteinmal zum Verständnis, dass wir nicht aneinander vorbei reden: In Deinem Menü erscheinen alle Menüpunkte mit der selben Domain, richtig? Wenn Du darauf klickst, müsste allerdings korrekt auf die jeweils eingestellte Domain (mit 301) weitergeleitet werden.
Genau. Siehe am einfachten die beiden Links die ich angehängt habe:
http://www.lernholz.com (bisherige Hauptdomain für alles)
http://www.lerncd.eu (Zweitdomain nur für einen bestimmten Teil)
Da hast Du natürlich recht, dass ist nicht so toll. Das Problem ist der Menümanager, welcher immer die root_url aus der config.php nimmt. An dem möchte ich jedoch nichts modifizieren, das ist ein Core-Modul. Ich denke das beste wird sein, wenn ich für den Menümanager einen Modifikator für {$node->url} schreibe, der dann für $node->url die korrekte URL einsetzt.
Das könnte funktionieren.
nockenfell wrote: Mit aktivierter Multidomain sind alle Seiten sowohl mit
http://www.domain.de/seite.htm wie auch
http://www.domain.de/seite/ erreichbar
Ist das nicht in der config.php ( $config['page_extension']='/'; ) geregelt?
Ja. In der config.php ist ".htm" als page_extension eingetragen. Deshalb ist die Weiterleitung auf www.domain.de/seite/ nicht korrekt.
[this message is written with 100% recycled bits]
NaN

Re: Modulvorstellung: MultiDomains

Post by NaN »

Könnte man das mit dem Redirect nicht auch per Eventmanager lösen?
Sodass bereits umgeleitet wird bevor das Template geparst wird.
Dann kann man sich das {cms_module module="MultiDomains"} im Template sparen und das ganze wäre unabhängig vom verwendeten Template.

Ein paar kleine Fehler:

Wenn ich eine neue Domain anlegen will, erscheint folgendes:

Notice:  Undefined index:  domain in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 35

Notice:  Undefined index:  devdomain in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 38


Notice:  Undefined index:  domain in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 41

Notice:  Undefined index:  prefix in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 43

Notice:  Undefined index:  page_id in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 45

Notice:  Undefined index:  active in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 47

Notice:  Undefined index:  notes in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains/function.admin_domains.php on line 52
Das liegt daran, dass der parameter "domain" auch beim Link "Neue Domain" mit übergeben wird:
function.admin_domains.php Zeile 123 wrote:
$smarty->assign('newdomainlink', $this->CreateLink( $id, 'admin_editdomain', '', $imagenew.' '.$this->Lang('newdomain'), array ( 'tabto'=>$tabto, 'domain'=>'' ), '', false, false, ' title="'.$this->Lang('newdomain').'"'));
Demzufolge ist beim Hinzufügen einer neuen Domain die Bedingung

Code: Select all


if (isset($params['domain']))

immer gegeben.
(function.admin_domains.php in der Zeile 15)

Allerdings enthält der Parameter keinen Inhalt.
Wodurch Zeile 18

Code: Select all


$domain = (int)$params['domain'];

immer 0 (Null) ergibt

Was wiederum bedeutet, dass Zeile 20

Code: Select all


$db->GetRow( ... , array($domain))

kein Ergebnis zurückliefert.
Es wird aber nicht nochmal geprüft, ob es ein Ergebnis gibt, oder nicht.
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

NaN wrote: Könnte man das mit dem Redirect nicht auch per Eventmanager lösen?
Sodass bereits umgeleitet wird bevor das Template geparst wird.
Gute Idee. Werde ich mal prüfen, ob das machbar ist.
NaN wrote: Wenn ich eine neue Domain anlegen will, erscheint folgendes:
Notice:  Undefined index:  domain in /Volumes/External/Webstuff/Websites/CMSms/modules/MultiDomains


Danke für den Hinweis und die ausführliche Beschreibung. Werde ich mir auch ansehen.
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

Folgende Probleme habe ich nun beseitigt:
  • - Falsche Domainendung (page_extension aus der config.php wurde ignoriert)
  • - Warnmeldungen beim Domain hinzufügen
  • - Log Summary funktionierte nicht
Dann habe ich mir mal NaNs Vorschlag mit den Events angeschaut. Ich denke, das sollte machbar sein. Der früheste Event, den ich finden konnte, ist "ContentPreCompile". Wenn Ihr einen besseren kennt, immer her damit, sonst werd ichs mit dem versuchen.
Ich muss dazu allerdings die ganze Funktionalität von der action.default.php in eine Klassenfunktion verlagern, dazu brauche ich mal noch etwas.
Wenn das geschafft ist, schaue ich mir die Sache mit dem Menumanager an.

Den derzeitigen Stand habe ich im SVN-Repository eingecheckt. Sollte eigentlich stabil sein.
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

So, ich habe mehrere Änderungen und Bugfixes vorgenommen und MultiDomains in Version 1.3 veröffentlicht. Download gibt es hier:
http://dev.cmsmadesimple.org/project/files/852

Geändert hat sich unter anderem folgendes:
* Auf Eventsteuerung umgestellt - Platzhalter wird nun nicht mehr benötigt.
+ Schalter für Statistiken und Alte URL Weiterleitungen hinzugefügt.
+ EMail Funktion für monatliche Statistik hinzugefügt.
* Problem mit Log Summary.
* Problem mit falschen Page Extensions beseitigt.
* Problem mit Default Content beseitigt.

@NaN: Wie hast Du Dein PHP Error Reporting eingestellt? Meins steht auf

Code: Select all

error_reporting  =  E_ALL & E_NOTICE & E_STRICT
Damit kann ich keine Warnmeldungen sehen.

@nockenfell: Zu der Sache mit den korrekten Domainnamen im Menü kam ich noch nicht, das muss mal noch etwas warten (hab erstmal einen Rewrite vom Comment Modul auf der ToDo-Liste stehen - zur Zeit etwas stressig hier, muss Prioritäten setzen). Ich hab das Ganze mal mit in die Feature Requests aufgenommen, dass ichs nicht vergesse.

Wenn irgendwelche Probleme auftauchen, würde ich mich über eine Nachricht freuen.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: Modulvorstellung: MultiDomains

Post by nockenfell »

Andiministrator wrote: @nockenfell: Zu der Sache mit den korrekten Domainnamen im Menü kam ich noch nicht, das muss mal noch etwas warten (hab erstmal einen Rewrite vom Comment Modul auf der ToDo-Liste stehen - zur Zeit etwas stressig hier, muss Prioritäten setzen). Ich hab das Ganze mal mit in die Feature Requests aufgenommen, dass ichs nicht vergesse.

Wenn irgendwelche Probleme auftauchen, würde ich mich über eine Nachricht freuen.
Danke für die Weiterentwicklung!! Bei mir stehen meine Projekte im Moment ein wenig still, da ich zuviel Arbeit habe...

Die Weiterleitungen klappen mit der Extension noch immer nicht reibungslos. Nun kommt zwar die Extension, nur hat es vor der Extension ein /:
www.domain.com/seite/.htm

Der URL Aufbau ist somit noch nicht korrekt.

Eine URL mit der Webseite auf der ich dies teste, habe ich dir per PM gesendet.
[this message is written with 100% recycled bits]
Andiministrator

Re: Modulvorstellung: MultiDomains

Post by Andiministrator »

Hallo nockenfell,
Vielen Dank für den Hinweis. Ich habe das Problem gleich behoben und die Version 1.3 ersetzt (denke, es haben noch nicht viele runtergeladen). Also einfach nochmal downloaden, sollte jetzt gehen. Falls weitere Probleme bestehen, bitte melden.
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Re: Modulvorstellung: MultiDomains

Post by nockenfell »

Super, funktioniert. Danke.

Einen kleinen Bug habe ich dennoch entdeckt. Wenn als "Seite" bei der URL Weiterleitung nichts definiert wird, wird als URL

www.domain.de/.htm

generiert. Dies ist natürlich nicht korrekt. Entweder musst du beim Speichern abfangen das immer eine Seite ausgewählt ist, oder beim zusammenstellen der Extension schauen ob du überhaupt ein Alias hast.
[this message is written with 100% recycled bits]
Post Reply

Return to “Module und Tags”