Welcome, Guest. Please login or register.
Did you miss your activation email?
May 26, 2012, 09:50:44 PM

Login with username, password and session length
Search:     Advanced search
Wollen Sie dem WebsiteBaker Team beitreten?
Nähere Informationen finden Sie unter hier und auf unserer neuen Webseite.
155554 Posts in 21715 Topics by 7737 Members
Latest Member: gx-world
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: Websitebaker mit dynamischer WB_URL laufen lassen  (Read 535 times)
janosch94

Offline Offline

Posts: 185


WWW
« on: December 15, 2011, 07:16:19 AM »

Hallo & guten Morgen liebe Community Wink

ich stehe vor einem relativ komplexen Problem und möchte nun wissen ob so etwas mit Websitebaker überhaupt möglich ist ohne da jetzt den ganzen Core umzuprogrammieren. Codezeilen anzupassen wäre kein Problem, weil ich mich mit PHP gut auskenne.

Es geht um folgendes:
Bin Azubi und mache in meiner Firma das Intranet neu. Das CMS dahinter: natürlich Websitebaker (Version 2.8.2) Smiley
Unser Intranet muss auch von ein paar Außenstellen und unter anderem von zu Hause aus aufgerufen werden. Der Webserver steht in einer DMZ wo man von innen und außen hinkommt. Von außen läuft der Zugriff über eine Art Proxy.

Die Funktionsweise des Proxy ist mir bis jetzt noch nicht bekannt. Also ob er jetzt die Seiten aufruft als wäre es Intern oder ob er die Seiten mit der externen URL aufruft...mehr Infos gibt es im Laufe des Tages  smiley

Auf jeden Fall werden die Links im CMS ja immer "hart absolut" erstellt. Wenn ich ein Bild im WYSIWG-Editor einfüge bekommt es im src-Attribut immer die volle URL. Also intern:
http://intranetserver/media/bild.jpg

wenn man das jetzt von extern aufruft gibt es logischweise keinen Server, der den Namen Intranetserver trägt.

Und darin liegt mein Problem :/ Kann man die Erstellung der Links generell nur als Pfade einstellen?
Anstatt http://intranetserver/media/bild.jpg müsste der Pfad nur so lauten /media/bild.jpg

Hat jemand da schon ein paar Erfahrungen sammeln können ? Wäre nett wenn ihr da mal berichten könnt, ob und wie das funktioniert Smiley

Vielen Dank!
MfG
Jan
Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
dbs
WebsiteBaker Org e.V.

Offline Offline

Posts: 3719


WWW
« Reply #1 on: December 15, 2011, 07:41:18 AM »

Moin,

schau mal hier rein: http://www.websitebaker2.org/forum/index.php/topic,20841.msg140994.html#msg140994
oder hier: http://www.websitebaker2.org/forum/index.php/topic,21062.msg142207.html#msg142207

Hoffe es hilft dir weiter.  wink

dbs
« Last Edit: December 15, 2011, 07:42:52 AM by dbs » Logged

DarkViper
Development Team
*****
Offline Offline

Posts: 1254


« Reply #2 on: December 15, 2011, 10:22:46 AM »

Auf jeden Fall werden die Links im CMS ja immer "hart absolut" erstellt. Wenn ich ein Bild im WYSIWG-Editor einfüge bekommt es im src-Attribut immer die volle URL. Also intern:
http://intranetserver/media/bild.jpg
In der Regel werden Links immer zur Laufzeit mit WB_URL zusammengestellt. Ausnahme ist hauptsächlich das WYSIWYG-Modul, das die erzeugten, absoluten URLs in der Datenbank speichert. Um das zu korrigieren, ist der von dbs vorgeschlagene Patch notwendig ( WYSIWYG and WB_URL fix ). Falls noch irgendein anderes Modul die selben Probleme bereitet, so muss das sinngemäss zum WYSIWYG-Modul gepatcht werden.
Zusätzlich kannst Du in der 2.8.2(SP2) auch noch im Backend den Outputfilter auf relative URLs einstellen.


Die Funktionsweise des Proxy ist mir bis jetzt noch nicht bekannt. Also ob er jetzt die Seiten aufruft als wäre es Intern oder ob er die Seiten mit der externen URL aufruft...mehr Infos gibt es im Laufe des Tages  smiley
vereinfacht gesagt nutzt der Proxy auf der internen Seite normalerweise meist die selbe URL, die Du auch beim internen Aufruf nutzt. Sollte das nicht der Fall sein, kann ich Dir noch einen weiteren Patch geben, der dann auch WB_URL entsprechend anpasst.

Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
janosch94

Offline Offline

Posts: 185


WWW
« Reply #3 on: December 15, 2011, 03:35:32 PM »

Servus,

vielen Dank schon einmal! Ich werde mir die Links in den nächsten Tagen mal anschauen und bei Bedarf dann melden Smiley

MfG
Jan
Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
janosch94

Offline Offline

Posts: 185


WWW
« Reply #4 on: January 13, 2012, 10:44:18 AM »

So liebe Community der Reverse Proxy wurde jetzt von unserem IT-Partner eingerichtet und ich kann jetzt endlich mal produktiv testen.

Folgendes Szenario steht bis jetzt:

Interner Aufruf -  funktioniert ohne Probleme
Externer Aufruf - funktioniert eingeschränkt, Grundfunktionen funktionieren aber alle

Intern wird der Server über den DNS-Namen angesprochen. Wenn man von intern aufruft liegt alles direkt unterhalb des Hostnames. Also :
http://intranetserver/pages/home.php

Von extern wird der Server über einen anderen Server aufgerufen. Das technische dahinter ist eigentlich unwichtig Wink
Wichtig ist, dass die Seiten dann nicht direkt unter dem Root aufgerufen werden. Nämlich so:
https://www.bliblablub.de/intern/pages/home.php

Ich konnte viele Hindernisse durch das dynamische setzen der WB_URL folgendermaßen lösen Smiley :
Code:
if($_SERVER['REMOTE_ADDR'] == "xxx.xxx.xxx.xxx") {
   define('WB_URL', 'https://www.bliblablub.de/intern');
   define('ADMIN_PATH', WB_PATH.'/admin');
   define('ADMIN_URL', 'https://www.bliblablub.de/intern/admin');
 } else {     
   define('WB_URL', 'http://intranetserver');
   define('ADMIN_PATH', WB_PATH.'/admin');
   define('ADMIN_URL', 'http://intranetserver/admin');
 }

Außerdem werden relative Links durch ein <base href="https://www.bliblablub.de/intern"> im Head richtig hingebogen.
Nun aber mein Problem...der Editor müsste beim Einfügen von Bildern oder Medien nicht den absoluten Pfad nehmen sondern einen relativen.

Falsch: http://WB_URL/media/weihnachtsfeier/bild1.jpg
Richtig: media/weihnachtsfeier/bild1.jpg

Gibt es dafür schon Workarounds @DarkViper?

Wäre euch sehr sehr dankbar wenn ihr mir vielleicht ein paar Denkanstöße geben könntet! PHP-Kenntnisse habe ich und ich scheue mich auch nicht in den Dateien vom WYSIWG-Editor rumzuwerkeln Wink

Gruß
Jan Smiley
Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
ruebenwurzel
WebsiteBaker Org e.V.

Offline Offline

Posts: 7973



WWW
« Reply #5 on: January 13, 2012, 11:09:24 AM »

Hallo,

man kann den FCKEditor dazu bringen statt der vollen URL relative URL's zu benutzen. Die dazugehörenden Einstellungen findest du in den Zeilen 54-72 der /modules/fckeditor/fckeditor/editor/filemanager/connectors/php/config.php:

Code:
// Path to user files relative to the document root.
// $Config['UserFilesPath'] = '/userfiles/' ;
$Config['UserFilesPath'] = WB_URL.MEDIA_DIRECTORY.'/' ;
// use home folder of current user as document root if available
if(isset($_SESSION['HOME_FOLDER']) && file_exists($wb_path .MEDIA_DIRECTORY .$_SESSION['HOME_FOLDER'])){
   $Config['UserFilesPath'] = $Config['UserFilesPath'].$_SESSION['HOME_FOLDER'];
}

// Fill the following value it you prefer to specify the absolute path for the
// user files directory. Useful if you are using a virtual directory, symbolic
// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
// Attention: The above 'UserFilesPath' must point to the same directory.
// $Config['UserFilesAbsolutePath'] = '' ;

$Config['UserFilesAbsolutePath'] = $wb_path .MEDIA_DIRECTORY.'/' ;
// use home folder of current user as document root if available
if(isset($_SESSION['HOME_FOLDER']) && file_exists($wb_path .MEDIA_DIRECTORY .$_SESSION['HOME_FOLDER'])){
   $Config['UserFilesAbsolutePath'] = $Config['UserFilesAbsolutePath'].$_SESSION['HOME_FOLDER'].'/';
}

Lösche mal einfach das WB_URL in Zeile 56, das sollte eigentlich genügen. Nachteil, die Veränderungen wirken sich nur auf Dateien aus, die nach der Änderung gespeichert werden. Für alle bestehenden Pfade hast due zwei Möglichkeiten. Entweder die Datenbank exportieren, mit einem Editor die Pfade anpassen und dann wieder importieren, oder im WB backend alle Seiten in denen Dateien aus dem Medienordner enthalten sind nochmals neu zu speichern.

Hast du im WB backend beim Frontend-Outputfilter WB schon auf "relative Urls" umgestellt?

Gruß
Matthias
Logged
janosch94

Offline Offline

Posts: 185


WWW
« Reply #6 on: January 13, 2012, 11:24:21 AM »

Hallo Matthias,

danke! genau sowas hab ich gesucht!

Habe die WB_URL gleich mal entfernt, musste aber jetzt feststellen das die Bilder im Backend nicht angezeigt werden - was ja auch logisch ist.
Darauf hin habe ich das da gefunden:
http://docs.cksource.com/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options/BaseHref

Da werde ich mir dann wieder was zurecht basteln müssen dass je nach IP-Adresse eine andere FCKEditor-Config einbindet. Ich könnte es aber auch erstmal verschmerzen wenn die Bearbeitung von extern nicht ginge, weil extern sowieso nur die Außenstellen aufs Frontend schauen und nie etwas bearbeiten müssen.

Den Frontend-Filter habe ich nun auch aktiv  cool Mal schauen ob der ein paar Links umschreiben kann.

// EDIT:
Wo ist denn die Variable MEDIA_DIRECTORY festgelegt? Weil da ist der Slash am Anfang noch drin - der müsste weg
« Last Edit: January 13, 2012, 11:30:38 AM by janosch94 » Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
DarkViper
Development Team
*****
Offline Offline

Posts: 1254


« Reply #7 on: January 13, 2012, 12:33:53 PM »

Wo ist denn die Variable MEDIA_DIRECTORY festgelegt? Weil da ist der Slash am Anfang noch drin - der müsste weg

MEDIA_DIRECTORY ist keine Variable, sondern eine Konstante (also einmal definiert und zur Laufzeit nicht mehr änderbar), die an vielen Stellen des Cores und auch in sehr vielen Modulen benutzt wird. Eine Änderung der Definition würde an einer Unmenge von Stellen schwere Fehler verursachen.

Deine aktuelle Lösung mag, oberflächlich betrachtet, im Augenblick funktionieren, verursacht jedoch spätestens beim nächsten Update oder beim Wechseln des Editors (CK-Editor/TinyMC/ etc.) wieder tierische Probleme.

Die augenblicklich sinnvollste Lösung ist der von mir bereits weiter oben angegebene Patch des WYSIWYG-Modules. Dieser sorgt dafür, dass die URLs bei allen denkbaren Editoren automatisch angepasst werden. Da dieser Patch auch bereits Bestandteil von WB 2.9.x ist, wird es auch keinerlei Probleme bei späteren Upgrades geben. Bereits bestehende Seiten müssen nur einmal kurz aufgerufen und neu abgespeichert werden um die Datenbankeinträge zu konvertieren.

Was jetzt die unterschiedlichen URLs (intern/extern) angeht: Es ist sinnfrei, das irgendwo dazwischen zu frickeln und dadurch eventuell systemweite Inkonsistenzen zu erzeugen. Der einzig sinnvolle Weg ist es, die Ursache an der Wurzel zu packen und dort zu korrigieren, so dass das komplette System von festen URLs unabhängig wird. Die Modifikation der config.php ist dazu der beste Weg:

Code: (/wb/config.php)

<?php
/* ... */

if (strtolower($_SERVER['SERVER_NAME']) == 'intranetserver') {
define('WB_URL''http://intranetserver');
}else {
define('WB_URL''https://bliblablub.de/intern');
}
define('WB_PATH'dirname(__FILE__));
define('ADMIN_URL'WB_URL.'/admin');
define('ADMIN_PATH'WB_PATH.'/admin');

require_once(WB_PATH.'/framework/initialize.php');

?>


(die Bedingung kann selbstverständlich auch über die ServerIP oder das Protokoll ausgewertet werden.)

Die Kombination von Patch im WYSIWYG-Modul und config.php ist absolut Zukunftssicher, da die WB 2.9.x bereits eine dynamische Einstellung der URLs enthält.

//edit
Der <base href="https://www.bliblablub.de/intern"> - Eintrag im HTML muss entfernt werden, da sonst bei z.B. internen Aufrufen die falsche URL vorbesetzt ist.
« Last Edit: January 13, 2012, 12:48:11 PM by DarkViper » Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
janosch94

Offline Offline

Posts: 185


WWW
« Reply #8 on: January 16, 2012, 08:09:08 AM »

DarkViper der Patch ist schon für 2.8.2 geeignet oder? Diese Systemvariable MEDIA_REL gibt es nämlich jetzt nur in den drei geänderten Dateien.

Bei mir geschieht nach dem Einfügen der drei Codezeilen aus dem URL-Fix-Thread nichts. Die URLs bleiben weiterhin absolut definiert.

Quote
Deine aktuelle Lösung mag, oberflächlich betrachtet, im Augenblick funktionieren, verursacht jedoch spätestens beim nächsten Update oder beim Wechseln des Editors (CK-Editor/TinyMC/ etc.) wieder tierische Probleme.
Gut naja ich müsste dann eine Datei ändern. Das ginge doch noch...

Deine Lösung für die config.php ist natürlich kürzer und besser als meine.

Wie kriege ich jetzt aber diesen blöden Slash in der Konstante MEDIA_DIRECTORY weg? :/
Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
DarkViper
Development Team
*****
Offline Offline

Posts: 1254


« Reply #9 on: January 16, 2012, 09:04:37 AM »

DarkViper der Patch ist schon für 2.8.2 geeignet oder? Diese Systemvariable MEDIA_REL gibt es nämlich jetzt nur in den drei geänderten Dateien.
Der Patch hat nichts mit der Version von WB zu tun, da er nur innerhalb des WYSIWYG-Modules arbeitet.
{SYSVAR:MEDIA_REL} ist keine Systemvariable, sondern einfach nur ein Platzhalter innerhalb des WYSIWYG-Modules, der anstelle der absoluten Domain in der Datenbank gespeichert wird,

Bei mir geschieht nach dem Einfügen der drei Codezeilen aus dem URL-Fix-Thread nichts. Die URLs bleiben weiterhin absolut definiert.
Das ist vollkommen in Ordnung so. Wink
Der Patch arbeitet vollständig transparent. Er sorgt einfach dafür, dass in der Datenbank keine absolute Domain mehr gespeichert wird, und bei der Ausgabe immer der Wert von WB_URL für die Media-Links benutzt wird.

Beispiel:
in der Tabelle wysiwyg ist für ein Bild "{SYSVAR:MEDIA_REL}/album/geburtstagstorte.jpg" gespeichert.

in WB_URL steht "http://intranetserver"
zum Browser wird dann "http://www.example.com/media/album/geburtstagstorte.jpg" gesendet.

in WB_URL steht "https://bliblablub.de/intern"
zum Browser wird dann "https://bliblablub.de/intern/media/album/geburtstagstorte.jpg" gesendet.

Sollen relative URLs zum Browser geschickt werden, dann einfach nur zusätzlich im Backend unter AdminTools » Frontend Output Filter den Eintrag "Frontendausgabe mit relativen Urls" aktivieren.

Wie kriege ich jetzt aber diesen blöden Slash in der Konstante MEDIA_DIRECTORY weg? :/
Der Slash in der Konstanten darf auf gar keinen Fall entfernt werden, da sonst im gesamten WebsiteBaker und in allen Modulen nichts mehr funktionieren wird, was irgendwie auf das Mediaverzeichnis zugreifen muss.
Du kannst Dir höchstens den Wert der Konstanten in eine eigene Variable kopieren ( $meinMedia = MEDIA_DIRECTORY; ) und da dann den Slash entfernen. PHP bietet dafür mindestens ein halbes Dutzend Funktionen an. Stringbearbeitung in PHP
Logged

Anleitungen lesen und selber nachdenken ist anstrengend...  Da lass ich doch lieber andere für mich denken...

In 1984:  Nineteen Eighty-Four is a unrealistic utopia!!
In 2012:  Nineteen Eighty-Four is a little piece only of our reality!!
janosch94

Offline Offline

Posts: 185


WWW
« Reply #10 on: January 16, 2012, 09:18:56 AM »


Bei mir geschieht nach dem Einfügen der drei Codezeilen aus dem URL-Fix-Thread nichts. Die URLs bleiben weiterhin absolut definiert.
Das ist vollkommen in Ordnung so. Wink
Der Patch arbeitet vollständig transparent. Er sorgt einfach dafür, dass in der Datenbank keine absolute Domain mehr gespeichert wird, und bei der Ausgabe immer der Wert von WB_URL für die Media-Links benutzt wird.

Beispiel:
in der Tabelle wysiwyg ist für ein Bild "{SYSVAR:MEDIA_REL}/album/geburtstagstorte.jpg" gespeichert.

in WB_URL steht "http://intranetserver"
zum Browser wird dann "http://www.example.com/media/album/geburtstagstorte.jpg" gesendet.

in WB_URL steht "https://bliblablub.de/intern"
zum Browser wird dann "https://bliblablub.de/intern/media/album/geburtstagstorte.jpg" gesendet.

Sollen relative URLs zum Browser geschickt werden, dann einfach nur zusätzlich im Backend unter AdminTools » Frontend Output Filter den Eintrag "Frontendausgabe mit relativen Urls" aktivieren.

Ach Mensch jetzt wird mirs klar!  rolleyes Hab da wieder um tausend Ecken gedacht und mich gefragt was dieses blöde Etwas denn eigentlich macht. Werde nun ein wenig Probieren & mich melden wenn´s irgendwo hakt! Smiley

Danke schonmal

MfG
Jan
Logged

Wie kastriert man Windows-User? Man schneidet das Mauskabel durch. Grin
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!