Vanilla 1.1.2 Forum von Lussumo. Weitere Informationen: Dokumentation, Community.

    •  
      CommentAuthorseliin
    • CommentTime28.04.2010
     permalink
    Hallo
    Es funktioniert (fast) alles wunderbar.
    Bei den Formularen mit dem Parameter &gotoid habe ich nur noch ein Problem.
    404 Fehler beim Abschicken des Formulars, die URL wird mit dem Hauptordner /domain1-de/kontakt/danke.html aufgerufen....

    Wie kann ich das Snipped umschreiben, damit die Umleitung korrekt funktioniert?

    Vielen Dank für eure Hilfe!
    • CommentAuthorLunarez
    • CommentTime11.05.2010
     permalink
    Hallo Marc,

    ich habe mich ebenso an Deiner Multidomain-Lösung versucht, die ich genau zur richtigen Zeit hier entdeckt habe. Danke schon mal für das Tutorial.

    Leider funktioniert es nicht wie erwartet/erhofft. Nachdem ich alle Schritte abgearbeitet habe bekomme ich bei Aufruf einer Domain folgende Meldung:
    ERROR: Too many forward attempts!

    The request could not be completed due to too many unsuccessful forward attempts.


    Bei dem aktuellen Projekt sollen

    • www.domain.de

    • www.domain.com

    • www.domain.net

    • www.domain.es

    • www.domain.org


    mit unterschiedlichen Sprachen befeuert werden. (Wobei die .org auf die .net umgeleitet werden soll - wg. duplicate content)

    Wenn ich nun "von aussen" die domain.de aufrufe, werde ich gleich zur 404 des Ordners für die .de weitergeleitet.
    Bei .com, .net und .es kommt die o.g. Fehlermeldung.

    Ich denke der Fehler könnte in der .htacces schlummern, weiss aber nicht wo.

    Würdest Du mal drüber schauen, wenn ich sie dir flüstere?
    •  
      CommentAuthorMarc
    • CommentTime11.05.2010
     permalink
    Nur zu.
    • CommentAuthorLunarez
    • CommentTime22.05.2010
     permalink
    Hi,

    nach dem mein letztes Problem durch Marc gelöst und in seinem Tutorial korrigiert wurde, funktioniert alles wunderbar.

    Ich stehe gerade vor einer neuen Frage. Die Website soll 4-sprachig sein (je Domain eine andere Sprache) und ich würde diese gern untereinander verlinken, so dass man egal auf welcher Seite man ist mit einem Klick zum anderssprachigen Equivalent gelangt.

    Mein erster Gedanke war der Einsatz von TVs -> diese mit den IDs füttern und gut. Nicht wirklich elegant, aber würde für den Anfang reichen. Das unschöne ist allerdings, dass dadurch der Pfad zur jeweiligen Page einfach an die vorherige angehangen wird. Etwa so: www.domain.de/domain-com/products/cars.hmtl.

    Super wäre es, wenn einfach auf die jeweilige Domain umgeleitet wird.

    Mir fällt grad keine Möglichkeit ein, dass zu realisieren.

    Für Inspiration oder Lösungsansätze wäre ich sehr dankbar.
    •  
      CommentAuthorMarc
    • CommentTime25.05.2010
     permalink
    Ohne weiteres Zutun momentan nur manuell möglich, also eben www.domain.de/products/cars.hmtl direkt verlinken.
    •  
      CommentAuthorsam
    • CommentTime11.06.2010 bearbeitet
     permalink
    Hallo,

    leider bekomme ich nach dem Anpassen der .htaccess nur Umleitungsfehler.

    Habe MODx in der Version 1.0.4 installiert und bin desöfteren die Anleitung durchgegangen, kann den Fehler aber nicht finden.

    Die Domains mit Alias und TV host_url habe ich wie folgt benannt:


    • sub1.domain.de -> domain01

    • sub2.domain.de -> domain02

    • sub3.domain.de -> domain03



    Die .htaccess sieht so aus:

    RewriteEngine On
    RewriteBase /


    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^sub1\.domain\.de [NC]
    RewriteRule (.*) http://sub1.domain.de/$1 [R=301,L]

    RewriteRule ^domain01\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub1\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain01)?(.*)$ index.php?q=/domain01/$3 [L,QSA]


    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^sub2\.domain\.de [NC]
    RewriteRule (.*) http://sub2.domain.de/$1 [R=301,L]

    RewriteRule ^domain02\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub2\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain02)?(.*)$ index.php?q=/domain02/$3 [L,QSA]


    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^sub3\.domain\.de [NC]
    RewriteRule (.*) http://sub3.domain.de/$1 [R=301,L]

    RewriteRule ^domain03\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub3\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain03)?(.*)$ index.php?q=/domain03/$3 [L,QSA]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


    Hat jemand einen Tipp, wo der Fehler liegen könnte?
    •  
      CommentAuthorstefan
    • CommentTime11.06.2010 bearbeitet
     permalink
    Hallo,

    RewriteCond %{HTTP_HOST} !^sub1\.domain\.de [NC]
    RewriteRule (.*) http://sub1.domain.de/$1 [R=301,L]


    klar, sub2.domain.de ist halt nicht sub1.domain.de und dann wird lustig hin und her geschwrieben bis es eben einen Umleitungsfehler gibt.

    versuch es mal damit http://www.modxcms.de/forum/comments.php?DiscussionID=3869&page=1#Item_2

    Nachtrag:
    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} ^domain1\.de [NC]
    RewriteRule (.*) http://sub1.domain1.de/$1 [R=301,L]

    Das bewirkt wenigstens, dass auf die sub1 geleitet wird falls nur domain1.de aufgerufen wird.
    •  
      CommentAuthorsam
    • CommentTime11.06.2010
     permalink
    Hallo Stefan,

    vielen Dank für die schnelle und hilfreiche Antwort.
    versuch es mal damit http://www.modxcms.de/forum/comments.php?DiscussionID=3869&page=1#Item_2

    Damit klappt's jetzt größtenteils. :)

    Nur noch ein Problemchen:
    Bei der Eingabe von sub1.domain.de wird auf sub2.domain.de weitergeleitet.
    sub2.domain.de und sub3.domain.de funzen allerdings perfekt.

    Da das nur lauter Subdomains sind, hab ich die Umleitungen aus der .htaccess rausgenommen. Die sieht jetzt so aus:
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

    Hab alles nochmal überprüft, die index.php angepasst, die IDs richtig in die "DocumentParser_Extended.php" übernommen und die Domains und Aliase in das PlugIn "OnWebPageInit" eingetragen. Trotzdem dieser Fehler.
    •  
      CommentAuthorsam
    • CommentTime11.06.2010
     permalink
    Der selbe Fehler kommt auch mit der vorherigen Konfiguration und mit dieser .htaccess:
    RewriteEngine On
    RewriteBase /

    RewriteRule ^domain01\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub1\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain01)?(.*)$ index.php?q=/domain01/$3 [L,QSA]


    RewriteRule ^domain02\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub2\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain02)?(.*)$ index.php?q=/domain02/$3 [L,QSA]


    RewriteRule ^domain03\.html$ /index.html

    RewriteCond %{HTTP_HOST} sub3\.domain\.de [NC]
    RewriteCond %{REQUEST_URI} !^/manager
    RewriteCond %{REQUEST_FILENAME} index\.php [OR]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(index\.(html?|php)|domain03)?(.*)$ index.php?q=/domain03/$3 [L,QSA]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


    Da funktionieren die sub2.domain.de und sub3.domain.de, aber die sub1.domain.de wird umgeleitet auf sub2.domain.de.
    •  
      CommentAuthorstefan
    • CommentTime11.06.2010
     permalink
    Hallo Tom,

    Da das nur lauter Subdomains sind, hab ich die Umleitungen aus der .htaccess rausgenommen. Die sieht jetzt so aus:

    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]


    Perfekt, mehr brauchts auch nicht in dem Fall, höchstens vielleicht, das http://domain.de auf was brauchbares gelenkt wird. Oder gibt es dafür auch eine webseite?

    PlugIn "OnWebPageInit" eingetragen. Trotzdem dieser Fehler.
    Das Plugin ist ja nur dafür da, das Du einen Platzhalter hast mit einem Schlüsselwort auf welcher domäne Du dich befindest... für css,bilder usw. Hat also nix mit dem Problem zu tun.

    Machmal merken sich Browser auch Umleitungen, also die .htaccess lassen wie oben und einfach mal den browsercache löschen. denn wenn nix in der htaccess drinsteht, wird auch definitiv nix umgeschrieben.. ausser der browser hat es sich gemerkt.

    Versuchs nochmal
    Viel Erfolg,
    Stefan
    •  
      CommentAuthorsam
    • CommentTime11.06.2010 bearbeitet
     permalink
    Tatsächlich. Das Problem war im Browsercache.

    Jetzt gehen beide Varianten. :)

    Auf der http://domain.de ist eine statische Website, also nicht unter MODx und wird mit .htaccess auf http://www.domain.de umgeleitet. Aber vielleicht baue ich die demnächst auch ein.


    Danke Stefan!
    •  
      CommentAuthorsam
    • CommentTime12.06.2010
     permalink
    Bin jetzt auf eine neues Problemchen gestoßen:
    Mit dieser Lösung http://www.modxcms.de/forum/comments.php?DiscussionID=3869&page=1#Item_2 funktionieren die Seitenlinks nicht richtig.

    Mein Seitenbaum sieht in etwa so aus:

    • sub1.domain.de (id=1; alias=domain01)
      L sub1seite1 (id=10; alias=index)
      L sub1seite2 (id=11; alias=seite2)
      L sub1seite3 (id=12; alias=seite3)

    • sub2.domain.de (id=2; alias=domain02)
      L sub2seite1 (id=21; alias=index)

    • sub3.domain.de (id=3; alias=domain02)
      L sub3seite1 (id=31; alias=index)



    sub1.domain.de ist ein Weblink auf sub1seite1, sub2.domain.de ein Weblink auf sub2seite1 und sub3.domain.de ein Weblink auf sub3seite1, so dass z.B. bei Eingabe von "sub1.domain.de" auf sub1seite1 weitergeleitet wird und in der Adressleiste "http://sub1.domain.de/index.html" steht. Bei sub1seite2 steht "http://sub1.domain.de/seite2.html", bei sub1seite3 steht "http://sub1.domain.de/seite3" u.s.w.

    Wenn ich jetzt über einen Link z.B. [~11~] auf sub1seite2 gehen will, wird aber nicht auf "http://sub1.domain.de/seite2.html" verlinkt, so wie es richtig wäre, sondern auf "domain01/seite2.html" und dann kommt "Seite nicht gefunden".

    Hat jemand eine Idee, wie das zu lösen ist?
    •  
      CommentAuthorstefan
    • CommentTime12.06.2010
     permalink
    Hallo Sam,

    klar habe ich ne Idee, im Anhang eine korrigierte Version.

    ciao, Stefan
    •  
      CommentAuthorsam
    • CommentTime12.06.2010
     permalink
    Hallo Stefan,

    funktioniert super, danke!
    •  
      CommentAuthorsam
    • CommentTime15.06.2010 bearbeitet
     permalink
    Hab die Multidomain-Lösung von Stefan noch etwas überarbeitet:

    Die Domain-Einstellungen werden jetzt aus einer separaten xml-Datei geladen.
    Wenn man Subdomains hinzufügen oder entfernen will, muss dann nur die domains.xml angepasst werden und natürlich der Seitenbaum im Backend.
    Nur bei www-Domänen muss evtl. zusätzlich die .htaccess angepasst werden.
    •  
      CommentAuthorstefan
    • CommentTime15.06.2010
     permalink
    Hey Tom!

    Coole Sache. Erstmal vielen Dank.

    Es gibt aber einen Bug darin, der ist noch von mir,
    function makeUrl($id, $alias= '', $args= '', $scheme= '')
    {
    $url = parent::makeUrl($id, $alias= '', $args= '', $scheme= '');


    Hier muss es natürlich heißen:
    $url = parent::makeUrl($id, $alias, $args, $scheme);
    Sonst werden die Eingaben mit leeren Zeichenketten überschrieben.

    Jetzt nur noch die xml-Datei sperren für http-Zugriff.

    mmhh.. bin schon dabei.

    adio, stefan
    •  
      CommentAuthorstefan
    • CommentTime15.06.2010 bearbeitet
     permalink
    Hallo Tom,

    Jetzt hast Du mich aber gereizt... habs nochmal bisschen umgebaut, man kann jetzt auch "Querverlinken" also ganz normal mit "[~ID~]" auf eine Seite unterhalb einer anderen Domäne. Das Plugin brauchst nicht mehr, im xml gibts einen Eintrag "keyword" das wird in getSites in den Platzhalter gesetzt.

    Was fehlt ist eine Fehlerkontrolle und das zurücksetzen auf defaultwerte wie die in $modx->config['site_start'] usw.

    kannst Ja Deinen Senf auch nochmal dazugeben.

    mercy un tschüß.. ole ole ole brasil
    Stefan
    •  
      CommentAuthorsam
    • CommentTime15.06.2010
     permalink
    Hi Stefan,

    vielen Dank!
    Das sieht um einiges besser aus, als meine Version.

    Vor Allem das mit den Querlinks ist sehr praktisch, aber auch die anderen Neuerungen.

    Würde Dich gerne unterstützen, bin aber leider noch in der Lernphase, was MODx und PHP betrifft. Das geht bei mir noch etwas zäh, hab in den letzten Tagen aber schon viel dazugelernt.

    Was ich noch ganz nützlich finden würde: Wenn man die Domains einzeln online oder offline setzten könnte. Man kann sie zwar im Backend als nicht veröffentlicht markieren, dann kommt beim Aufruf der Seite die 404-Fehler-Seite, besser wäre da aber eine Offline-Meldung, wie "Seiten werden gewartet" oder sowas.

    Werde weiter rumprobieren - macht richtig Spass. :smile:

    Ciao,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime16.06.2010
     permalink
    Hallo Tom,
    bin aber leider noch in der Lernphase, was MODx und PHP betrifft.
    Dein Quellcode-Stil ist aber schon mal sauber, fallst Du das so kopiert hast, behalte es Dir so bei... also nicht da kopieren meine ich.

    Ansonsten gebe ich mich mal damit zufrieden, wie es ist. Man muß halt bisschen aufpassen das die Einträge passen, dann klappt das schon.

    tschüß, Stefan
    •  
      CommentAuthorsam
    • CommentTime16.06.2010
     permalink
    Hi Stefan,

    wie versprochen, probiere ich weiter rum und habe festgestellt, dass jetzt die (int)-Werte alle 0 sind, anstatt die Werte aus der xml zu übernehemen.

    Hab bis jetzt nicht herausfinden können, woran das liegen könnte, aber vielleicht hast Du einen Tipp. :wink:

    fallst Du das so kopiert hast

    Ja, hab ich: Hab fast jeden einzelnen Befehl aus einem Wiki oder Tutorial kopiert und zusammengebastelt. :wink:

    Quellcode-Stil ist aber schon mal sauber ... behalte es Dir so bei

    Zufall. Aber danke, werde es versuchen.

    Ciao,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime16.06.2010
     permalink
    Hola Tom,

    Hab bis jetzt nicht herausfinden können, woran das liegen könnte, aber vielleicht hast Du einen Tipp.
    Nee, leider nicht, bei mir klappt das
    •  
      CommentAuthorsam
    • CommentTime16.06.2010
     permalink
    Stimmt, klappt.

    Hab nur einen Fehler in der xml gehabt. Sorry.
    •  
      CommentAuthorsam
    • CommentTime17.06.2010 bearbeitet
     permalink
    Hi Stefan,

    hab wieder etwas rumgebastelt, mit folgenden Änderungen:

    1. Domains lassen sich online oder offline schalten

    2. Einstellungen werden im Backend gemacht. Nur bei der Installation oder wenn sich die Anzahl der Domains ändert, muss die xml-datei angepasst werden. Änderungen der IDs oder Namen werden im Backend gemacht. So kann man z.B. die Domain oder die Fehlerseiten einfach im Backend ändern


    Wenn man das ohne Template-Variablen haben will, lässt sich die alte Version der domains.xml weiterhin nutzen.

    Zu beachten ist: Wenn man die Domains in die "domains.xml" einträgt und der Tag <config_id> drin steht, muss unter den Tag <name> die Domain samt Protokoll angegeben werden, also z.B. nicht "www.meinedomain.de", sondern "http://www.meinedomain.de". Wenn der Tag "config_id" nicht angegeben ist, dann die Domain und Protokoll separat eintragen und alle andere Tags auch ordentlich eintragen.
    Über die TVs geht's nur, wenn <config_id> in der "domains.xml" eingetragen ist.

    Genaueres steht in der Anleitung.

    Gruß,
    Sam


    Nachtrag:
    Neuere Version siehe unten.
    •  
      CommentAuthorsam
    • CommentTime17.06.2010
     permalink
    Hab jetzt aber einen Fehler gefungen:

    Wenn ich "meinedomain.de/index.html" eingebe, funktioniert alles.
    Aber bei "meinedomain.de" findet er die Seite nicht. :(

    Werde aber suchen. Vielleicht komm ich ja selber drauf.
    •  
      CommentAuthorsam
    • CommentTime17.06.2010
     permalink
    Fehler behoben :)
    •  
      CommentAuthorsam
    • CommentTime18.06.2010 bearbeitet
     permalink
    So, hab's wieder ein bisschen erweitert:

    Jetzt kann man nach der Installation fast alle Änderungen im Backend vornehmen. :)

    Die Datei "domains.xml" wird nur bei der Installation angepasst, danach bleibt sie so, wie sie ist.

    Gruß,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime18.06.2010 bearbeitet
     permalink
    Hallo Sam

    Alter Schwede, wie sich ein kleiner Hack doch auswachsen kann. Also Hut ab, Ganze Arbeit!

    Die Idee die Einstellungen im Domäne-Ordner als TVs anzulegen hat was, allerdings wären mir die DB-Abfragen pro Seitenaufruf zuviel, die müsste man cachen... z.B. in einer xml-Datei :-) oder als serialisiertes Array.

    OK, wenn man viele Möglichkeiten hat, die zum gleichen Ziel führen, würde ich alle entfernen und nur noch die stehen lassen, die am wenigsten Rechenzeit benötigt um die Domänen einzulesen. Die Gefahr von Verwicklungen im Verständnis und im Quellcode wird kleiner dadurch.

    Wenn die Einstellungen am Dokument gemacht werden über TVs, bräuchte man auch keine xml-Konfiguration mehr, denn man könnte einfach die Dokumente die das Template "Domain Temp" gesetzt haben suchen, schon hat man die richtigen.

    Diese Einstellungen ließen sich ja dann cachen, so dass nicht bei jedem Aufruf neu eingelesen werden muß, sondern erst wieder, wenn einer der Domänen-Ordner bearbeitet wird. könnte man per plugin regeln, also den cache löschen und Domänen neu einlesen.

    Soweit mal, kann es mir heute leider nicht mehr weiter anschauen, hole das aber nach.

    ciao, Stefan
    •  
      CommentAuthorsam
    • CommentTime18.06.2010
     permalink
    Hi Stefan,

    ... wie sich ein kleiner Hack doch auswachsen kann ...

    Naja, man will's ja so bequem haben, wie möglich. :D

    Deinen Plan mit dem Cachen finde ich super. Am einfachsten wär's wohl mit der xml-Datei, dann brauchen wir keine neue Routine zum Auslesen schreiben. ;)

    Werde jetzt aber mal abwarten, bis Du's Dir richtig angeschaut hast und freue mich schon auf Dein Ergebnis.


    Ciao,
    Sam
    •  
      CommentAuthorsam
    • CommentTime19.06.2010 bearbeitet
     permalink
    Hi Stefan,

    hab's nicht abwarten können und in Bezug auf Deinen Vorschlag geändert:

    Die Einstellungen werden aus dem Backend in die Datei "domains.conf" "gecached" und beim Seitenaufruf wieder eingelesen. Das Cachen geschieht automatisch beim Abspeichern von Seiten über ein PlugIn. Als Systemereignis hab ich jetzt "OnManagerPageInit" genommen, da "OnDocFormSave" das PlugIn erst beim nächsten Speichern abruft. Hab noch nicht herausgefunden, welches Event da optimal wäre. Die "domains.xml" entfällt.

    Das Paket ist jetzt kleiner und die "domains.conf" hat weniger Daten, als wenn es eine xml-Datei wäre. Das sollte das Einlesen beschleunigen. :)


    Ciao,
    Sam
    •  
      CommentAuthorsam
    • CommentTime20.06.2010
     permalink
    Was ich noch ganz praktisch finden würde:
    Wenn bei den Domain-Ordnern der Alias automatisch zugewiesen werden könnte, während die restlichen Aliase manuell vergeben werden. Ist zwar nicht zwingend notwendig, würde aber die Verwaltung noch vereinfachen.
    Hab bisher leider keinen Weg finden können, das umzusetzen.

    Ausserdem hab ich auch noch keinen Weg gefunden, das Template einer Seite zu ermitteln. Zwar bekomme ich die IDs der Templates heraus, das von den Seiten verwendet werden, aber nicht die Namen der Templates. Die Config-Seiten werden jetzt also über Aliasnamen ermittelt.
    •  
      CommentAuthorstefan
    • CommentTime21.06.2010 bearbeitet
     permalink
    Hallo Sammy Davis jr.

    Das Template steht nur als ID beim Dokument, den Namen findest Du in der Tabelle "modx_templates".

    Das einlesen der conf kannst Du statt mit den Dateifunktionen auch mit "file()" machen, dass ergibt schon ein Array mit den Zeilen. http://php.net/file

    Das Paket ist jetzt kleiner und die "domains.conf" hat weniger Daten, als wenn es eine xml-Datei wäre. Das sollte das Einlesen beschleunigen.
    Vielleicht, dass muß man mal benchmarken. Kann auch gut sein, dass die nativen xml-Funktionen doch schneller sind.

    Ich werde heute Nachmittag einen Benchmark-Versuch machen und mich hier wieder melden. Jetzt hab ich aber Arbeit.

    salut, Stefan
    •  
      CommentAuthorsam
    • CommentTime22.06.2010
     permalink
    Buenos días Stefano,

    Das einlesen der conf kannst Du statt mit den Dateifunktionen auch mit "file()" machen, dass ergibt schon ein Array mit den Zeilen. http://php.net/file

    Danke für den Tipp, hab's gleich eingebaut. :) Das macht den Code auch kürzer und einfacher.

    Hab gerade einen Geschwindigkeitvergleich für die Einleseroutinen gemacht mit folgendem Ergebnis:

    Auf meinem Server benötigt die Einleleseroutine für die XML-Datei bei einer Schleife von 100.000 Durchgängen 24 Sekunden und für die Conf-Datei 20 Sekunden.
    Hab jetzt aber die Daten, die in die Conf-Datei geschrieben und dann wieder eingelesen werden, noch etwas verkürzt und jetzt braucht die Einleseroutine "nur" 13 Sekunden.

    Denke, damit kann man leben. ;)

    Werde jetzt noch versuchen, das PlugIn noch ein bisschen zu verbessern und es dann hier "posten".

    Ciao,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime22.06.2010
     permalink
    Sam.. Perfekt!

    die in die Conf-Datei geschrieben und dann wieder eingelesen werden, noch etwas verkürzt und jetzt braucht die Einleseroutine "nur" 13 Sekunden.
    Perfekt!

    Das einlesen der Tvs kannst Du verkürzen, wenn Du statt je TVs einzelen mit getTemplateVarOutput(array('')) zu holen, kannst Du auch nur einen Aufruf laufen lassen

    $tvs = getTemplateVarOuput( array(
    'site_id',
    'site_error'
    '....'
    ),1,....);

    print_r($tvs);

    Ich weiß zwar grad nicht genau ob das noch für den parser-hack aktuell ist, kannst du aber sicher irgendwo anderst noch brauchen.

    Zum Plugin, benutze onSaveDocument, checke auf Template und lesen dann die TVs von grade gespeicherten Dokument aus. Um die gecachten Daten zu überschreiben, liest Du diese ein, überschreibst die Angaben und scheibst alle Daten wieder zurück in die Datei

    // grade gespeicherte Daten
    $current_config = $tvs = getTemplateVarOuput( array(
    'site_id',
    'site_error'
    '....'
    ),1,....);


    // bisherige Config
    $config = leseConfig(); resultiert in einen
    array(
    'www.donain.de => array(
    'site_start' => 1,
    'site_errot' => 2,
    usw.
    ),
    'www.donain2.de => array(
    'site_start' => 18,
    'site_errot' => 25,
    usw.
    ),
    )
    );


    // verschelzen
    $domain = $current_config['name'];
    $config[$domain] = array_merge($config[$domain], $current_config);

    oder einfach
    $config[$domain] = $current_config;

    dann die Config wieder zurückschreiben

    $output='';
    foreach( $config as $domain )
    {
    $output .= implode(';',$domain) . PHP_EOL;
    }
    file_put_contents('/pfad/zur/conf', $output):


    So oder so ähnlich halt... Du machst das schon

    bis später
    Doei, Stefan
    •  
      CommentAuthorMarc
    • CommentTime22.06.2010
     permalink
    Hömma, wasn hier los? Da is man mal ein paar Tage nicht da, schon kriecht der Pfälzer aus seinem Loch und baut hier mit der Community lustige Sachen :devil: Grad mal runtergeladen und die readme gelesen, klingt ja sehr lecker :wink:

    Werde ich ausgiebig an einem aktuellen Projekt (5 Domains, 2-3 Sprachen) testen. Und dann natürlich auch das Tut... ähm... löschen und das Ding verlinken.

    Aber eine sehr entscheidende Frage: Gibt es denn nicht irgendeine Möglichkeit, das Ding ohne index.php-Hack zum Laufen zu bringen? Wisst ja, Updates und so.
    •  
      CommentAuthorstefan
    • CommentTime22.06.2010
     permalink
    Servus Marcsen,
    schon kriecht der Pfälzer aus seinem Loch
    Da war mir zu dunkel.
    Werde ich ausgiebig an einem aktuellen Projekt (5 Domains, 2-3 Sprachen) testen. Und dann natürlich auch das Tut... ähm... löschen und das Ding verlinken.
    Ja, mach mal, das funktioniert einwandfrei. Samwise der schlaue bastelt aber noch. Benutze das http://www.modxcms.de/forum/comments.php?DiscussionID=2450&page=2#Item_17 das funktioniert super... bis das geschmeidigere fertig ist.
    Aber eine sehr entscheidende Frage: Gibt es denn nicht irgendeine Möglichkeit, das Ding ohne index.php-Hack zum Laufen zu bringen? Wisst ja, Updates und so.
    Im Prinzip könnte man die Links alle laut config auch per Plugin austauschen, aber ... wie soll ich sagen, ich will Geschwindigkeit! Da stört mich der Durchlauf jedesmal.. und der event beforeCacheSave oder wie der heißt funktioniert irgendwie nicht.

    Ansonsten ist die Lösung nicht schlecht, es werden ja nur die Sachen im Parser überschrieben die mit der URL zu tun haben. Das ist schnell angepasst beim update... falls überhaupt nötig.

    Egal, versuchs mal. Und Du weißt ja, immer aus mit den Vorschlägen

    pa, stefan
    •  
      CommentAuthorsam
    • CommentTime22.06.2010 bearbeitet
     permalink
    Soo, hab wieder was gebastelt :)

    Änderungen:

    • Die Datei, die geschrieben und wieder gelesen wird ist kleiner und kann deswegen schneller ausgelesen werden.

    • Das PlugIn sucht die Seiten mit den Templates "Domain Temp", der Alias ist also beliebig änderbar.



    Die Events, die man für's PlugIn aktivieren, muss sind "OnDocFormSave" und "OnManagerPageInit". Das erste um das Kommando zum schreiben zu geben und das zweite um es auszuführen. Wenn man's nur mit "OnDocFormSave" machen würde, würden die Daten erst beim nächsten Speichern eines Dokuments abgelegt werden. Damit könnte man zwar auch gut leben, da man diese Einstellungen nicht so oft ändert, aber so wie's jetzt ist, find ich's besser.

    Werde jetzt noch schauen, wie ich es hinbekomme, dass die Aliase für die Domains überprüft werden, damit man die nicht ausversehen doppelt einträgt.

    Bis später ...

    Sam

    @marc: Man könnte vielleicht ein PlugIn für die Installation oder eine Installationsroutine, die die Änderungen in der index.php vornimmt, bzw. die Installationsroutine in das bestehende Plugin einbauen. So weit bin ich noch nicht, aber wie ich in den letzten Tagen fegestellt habe, ist vieles möglich :)
    •  
      CommentAuthorstefan
    • CommentTime22.06.2010
     permalink
    Hallo Hallo Sammyboy,

    Sieht gut aus, ich werde das nachher noch bisschen aufhübschen, z.b. die Fehlermeldungen etc, irgendwo sammeln, damit die nicht im Quelltextrumstehen.

    aber so wie's jetzt ist, find ich's besser.
    Begründung? Wenn man die Sachen ja nur nach einem Speichern der Domänen-Ordner schreiben braucht warum dann schon vorher das Plugin laufen lassen?

    adio, Stefan
    •  
      CommentAuthorsam
    • CommentTime22.06.2010 bearbeitet
     permalink
    Hi Stefan,

    Begründung? Wenn man die Sachen ja nur nach einem Speichern der Domänen-Ordner schreiben braucht warum dann schon vorher das Plugin laufen lassen?

    Die Begründung hab ich oben schon geschrieben: Weil die Daten sonst nicht gleich in die Datei gespeichert werden. Wenn nix gespeichert wird, überprüft das PlugIn nur, ob was gespeichert werden soll (siehe Code). Von Geschwindigkeitseinbussen ist da nix zu merken. Ist ja nur eine einfache Abfrage.

    Was ich bisher noch nicht herausfinden konnte: Wie stellt man fest, welches Dokument gerade gespeichert wird? Mit $modx->getAction ?

    Ciao,
    Sam
    •  
      CommentAuthorsam
    • CommentTime22.06.2010
     permalink
    Hab jetzt das PlugIn erweitert, damit die index.php automatisch angepasst wird, wenn man das Paket installiert oder sich die Versionsnummer von MODx ändert. Hab aber leider noch nicht herausgefunden, wie ich die Versionsnummer herbekomme.
    Über den Aufruf
    $modx->db->select("setting_value", $modx->getFullTableName('system_settings'), "setting_name='settings_version'");klappt's irgendwie nicht. Da bekomme ich als Ergebnis: Resource id #10anstatt der Versionsnummer.

    Kann mir jemand helfen?
    •  
      CommentAuthorJako
    • CommentTime22.06.2010
     permalink
    Probier mal:
    $modx->config['settings_version']
    •  
      CommentAuthorsam
    • CommentTime22.06.2010
     permalink
    Danke Jako.

    Habe mich entschieden, das mit md5_file zu Regeln. Dann wird die index.php bei jeder Änderung überprüft.
    •  
      CommentAuthorstefan
    • CommentTime23.06.2010
     permalink
    hallo Sam,
    $modx->db->select("setting_value", $modx->getFullTableName('system_settings'), "setting_name='settings_version'");
    Das ergibt immer eine "resource id"

    $version = $modx->db->getValue(
    $modx->db->select(
    "setting_value",
    $modx->getFullTableName('system_settings'),
    "setting_name='settings_version'"
    )
    );
    echo $version

    schau mal in manager/includes/extenders/dbapi.mysql.class.inc.php
    Wie stellt man fest, welches Dokument gerade gespeichert wird? Mit $modx->getAction ?

    mit $modx->manager->action bekommts Du Action, damit bekommst Du aber nicht das grade gespeicherte Dokument. Das steht in $params. Mach mal ein ein print_r($params) beim event onSave steht da drin welches Dokument grade gepeichert wurde.

    pa, Stefan
    •  
      CommentAuthorstefan
    • CommentTime23.06.2010
     permalink
    Noch was Sam,

    ob eine Domäne offline ist, kann man möglicherweise davon ableiten, ob der Domänen-Ordner veröffentlicht ist oder nicht. Stichwort " is published = 0 dann site_offline = 1"
    •  
      CommentAuthorsam
    • CommentTime23.06.2010 bearbeitet
     permalink
    Hi Stefan,

    hier der aktuelle Stand.

    Wichtigste Änderung:

    • Automatisches Anpassen der index.php nach der Installation oder wenn sie sich ändert.

    Die restlichen Änderungen siehst Du im Code und in der Anleitung. Die Überprüfung der index.php erfolgt bei jeden Login in den Manager. Bei der ersten Installation muss man sich also einmal ausloggen und wieder einloggen.

    Vielen Dank für die hilfreichen Tipps. Die haben mir viel Sucherei erspart.

    bb,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime23.06.2010
     permalink
    Ahoi Alter Schwede!

    Vielen Dank mal, irgendwie wird das immer fetter. Im Kopf häge ich aber immer noch an der "Light-Version" mit simpler Konfiguration über die xml-Datei.

    Leider steht ich grad ziemlich unter Druck, kann also nicht daran arbeiten, Ideen widerum hab ich noch zwei/drei. Vielleicht kann ich mir am WE bisschen Zeit gönnen.

    bis dann mal
    bye, Stefan
    •  
      CommentAuthorsam
    • CommentTime27.06.2010
     permalink
    Hi Stefan,

    hab mir gedacht, als nächstes sowas wie eine Installationsroutine zu schreiben, zum Anlegen des Templates und der TVs, wenn die noch nicht angelegt sind. Weiss zwar noch nicht richtig, wie, aber versuchen kann ich es.
    Das soll den Installation etwas vereinfachen.

    Oder bist Du der Meinung, dass das überflüssig wäre?

    Gruß,
    Sam
    •  
      CommentAuthorstefan
    • CommentTime28.06.2010
     permalink
    hallo Sam,
    hab mir gedacht, als nächstes sowas wie eine Installationsroutine zu schreiben
    Ja, mach.

    Ich selbst bin der Ansicht das es eben klein und schlank mit der xml Datei für die Konfiguration reicht. Es bleibt dem Anwender überlassen hier die richtigen Sachen einzutragen. Ich gehe mal davon aus, dass an den Einstellungen wenn die Domäne-Ordner angelegt sind eh nicht mehr viel gedreht wird. Aber natürlich ist es mit den TVs kompfortabler, dann noch einen installer für die TVs, ja das wäre schon was.

    Mach doch einfach mal, ich bin im Moment grad bisschen überfordert da was zu machen, ich hab ne gefährlich nahe deadline zu bedienen.

    tschüß, Stefan
    •  
      CommentAuthorMarc
    • CommentTime29.06.2010 bearbeitet
     permalink
    So, erstes Feedback von mir.

    Die Version von Sam ging leider nicht. Hat sich einfach gar nichts getan. Weder wurde die index.php geändert, noch wurden die Configs in eine Datei geschrieben... keine Ahnung warum. Plugin mehrfach gecheckt, Events haben gestimmt.

    Die letzte Version von Stefan hingegen... Alter Schwede, Fußballgott. In der readme nur ein kleiner Fehler:

    // initiate a new document parser
    include_once 'document.parser.class.inc.php';
    include_once 'assets/lib/DocumentParser_Extended.php';
    $modx = new DocumentParser_Extended();
    $modx->getSites();


    Muss heißen:

    // initiate a new document parser
    include_once 'manager/includes/document.parser.class.inc.php';
    include_once 'assets/lib/DocumentParser_Extended.php';
    $modx = new DocumentParser_Extended();
    $modx->getSites();

    Also Pfad zum eigentlichen Parser nicht richtig.

    @Sam: Ich finde es zwar auch gut, wenn man das über das Backend verwalten kann, aber Du hast halt gleich ein paar Probleme. Ich vermute mal Schreibrechte etc. Vor allem das Verändern der index.php wird nie so einfach sein. I.d.R. wird diese per FTP hochgeladen und darf im Zweifel vom System nicht beschrieben werden. Bevor der Laie dann mit 777 hantiert, ist ein manuelles Ändern vielleicht doch sinnvoller. Wie gesagt, ich kann nicht sagen, warum es nicht ging. Auch nach manuellem Ändern der index.php kam nichts weiter, oder manchmal ein Timeout bzw. ein XML-Verarbeitungsfehler (wobei es gar keine gibt da sie nie geschrieben wurde). Keine Ahnung. Trotzdem ein Vorschlag: Ich würde die Verwaltung über diese Config-Dokumente und TVs wieder fallen lassen, denn das ist zu viel Aufwand für einmal einstellen. Da würde ich die XML bevorzugen und dann zusätzlich noch ein Modul vorschlagen, mit dem man deren Einträge ändern kann. Wäre meiner Meinung sehr viel schlanker und für den Admin auch einfacher durchzuführen. Nach dem Motto:

    Domains:

    - domain1.de | ändern | löschen
    - domain2.de | ändern | löschen

    + neue Domain hinzufügen

    Und dann eben die Felder einstellen lassen.

    Vorteil wäre eben auch, dass man die XML an sich gar nicht ändern muss und das Modul nur optional ist.

    Ansonsten: Super Arbeit!
    •  
      CommentAuthorsam
    • CommentTime29.06.2010
     permalink
    Hallo Marc,

    vielen Dank für Dein Feedback.

    In der neuesten Version gibt es keine Funktion mehr, die die XML-Datei verarbeiten könnte.
    Die Daten werden in die Datei ".domains.conf" geschrieben und von da wieder geladen.
    Warum bei Dir ein XML-Verarbeitungsfehler ausgegeben wird kann ich mir nicht anders erklären, als dass die Dateien der einzelnen Versionen kombiniert sind, also die "DocumentParser_Extended.php" noch aus der XML-Version stammt.

    Kannst Du bitte nochmal überprüfen, ob auch die Datei "check_index.php" im Ordner "assets/lib" ist, ob die Version Datei "DocumentParser_Extended.php" aus demselben Paket ist und ob bei dem PlugIn das Event "OnManagerLogin" aktiviert ist? Die index.php wird dann bei jeden Login überprüft. Natürlich muss das PlugIn auch aus demselben Paket sein.

    Bei meinen Tests hat bisher alles funktioniert. Auch an den Schreibrechten für die index.php hab ich nix ändern müssen.

    Noch eine Erläuterung der Funktion zur Aktualisierung der "index.php":
    In der Original-Datei wir die Zeile $modx = new DocumentParser; gesucht und duch die Zeilen include_once 'assets/lib/DocumentParser_Extended.php';
    $modx = new DocumentParser_Extended();
    $modx->getSites();
    ersetzt.
    Wenn diese Zeile in der Original-Datei nicht vorkommt, wird nix geändert.

    Der Aufwand für die Einrichtung soll sich mit der nächsten geplanten Erweiterung schmälern.
    Werde jetzt aber auf Dein nächstes Fedback warten, bevor ich es weiter Ausbaue.

    Gruß,
    Sam
    •  
      CommentAuthorMarc
    • CommentTime29.06.2010
     permalink
    Leider läuft mir die Zeit davon und Stefans Version lüppt wunderbar. Kann ich jetzt gerade nicht weiter zurückstellen. Trotzdem hierzu:

    Die Daten werden in die Datei ".domains.conf" geschrieben und von da wieder geladen.


    Wurden sie leider nicht. Es war, wie wenn das Plugin gar nicht erst anfängt zu arbeiten.

    Warum bei Dir ein XML-Verarbeitungsfehler ausgegeben wird kann ich mir nicht anders erklären, als dass die Dateien der einzelnen Versionen kombiniert sind


    Ne, alles aus Deinem letzten Paket. Ich würde dem XML-Verarbeitungsfehler nicht allzu viel Bedeutung beimessen, das war eher ein Firefox-Krempel der da bemeckert wurde und war auch nicht reproduzierbar. Ich denke, das war eher Zufall.

    Kannst Du bitte nochmal überprüfen, ob auch die Datei "check_index.php" im Ordner "assets/lib" ist, ob die Version Datei "DocumentParser_Extended.php" aus demselben Paket ist und ob bei dem PlugIn das Event "OnManagerLogin" aktiviert ist? Die index.php wird dann bei jeden Login überprüft. Natürlich muss das PlugIn auch aus demselben Paket sein.


    Jo, alles überprüft.

    Der Aufwand für die Einrichtung soll sich mit der nächsten geplanten Erweiterung schmälern.


    Ich weiß, dass da schon viel Arbeit drin steckt. Allerdings fühlen sich TVs und Templates, die nur für solche (meist einmaligen) Einrichtungen ins System gepflanzt werden, irgendwie unnötig an. Ich bin zwar sicher nicht so ein Hardcore-Purist wie Stefan, aber so ein bisschen aufgeräumt sollte es schon sein ;-) Und ein Modul zur Verwaltung der XML fühlt sich irgendwie "richtiger" an.