Inhalt der "main column" in externer PHP Seite anz

  • Wie kann man den Inhalt der "main column" in einer externen PHP Seite anzeigen?

    Ich möchte den Inhalt der "main column" meiner Plone Installation via
    php include in einer div Sektion meiner PHP Site anzeigen. Beide Sites
    haben unterschiedliche Domains.

    Es hat sich herausgestellt, dass man mit einem Python Skript den
    HTTP_REFERER überprüfen kann. Diesen kann man dann als "access rule"
    einsetzen.

    Leider benötige ich aber ein neues "main_template" um sicherzustellen,
    dass auch wirklich nur der nackte HTML Block (ohne Html, Header, Body usw)
    referenziert wird. Dafür muss man scheinbar einen zusätzlichen Skin
    einrichten.


    Hat Irgendjemand eine Idee wie ich das bewerkstelligen kann?

    Vielen Dank im Voraus für Eure Hilfe.

    YouCan

  • Zitat

    Ich möchte den Inhalt der "main column" meiner Plone Installation via
    php include in einer div Sektion meiner PHP Site anzeigen.


    Du meinst dein Plone erstellt die Seite komplett und der Hauptbereich der Seite soll dann von PHP auf einer anderen Domain angezeigt werden?

    "Carpe Diem" powered by positiv Feelings

  • Zitat von Torty

    Du meinst dein Plone erstellt die Seite komplett und der Hauptbereich der Seite soll dann von PHP auf einer anderen Domain angezeigt werden?

    Ich möchte nur den Artikel (HTML) ohne alles andere. Also nur das was im "main_template" in den nachfolgenden 3 Zeilen steht:

    <metal:bodytext metal:define-slot="main" tal:content="nothing">
    Page body text
    </metal:bodytext>

    ...und auch diesen resultierenden Block OHNE "document actions".

    Die Anzeige in der PHP-Seite ist nicht das Problem.

  • Die folgende Lösung geht davon aus, dass das PHP-Script die Plone-Seite per URL ansprechen also aufrufen kann.

    Die Idee ist folgende:
    Im main_template wird vor und hinter die Slot-Definition 'main' ein eindeutiger Kommentar eingefügt. Dieser wird dann durch PHP gefunden un der dazwischenligende Code extrahiert.

    Schritte im Plone:
    1.) /portal_skins/templates/main_template -> Klicken -> customize
    2.) /portal-skins/custom/main_template folgendes ändern:
    ... * Zeile 139 einfügen:
    ... * Zeile 143 einfügen:
    Dadurch wird der gesamte HTML-Code des Main-Slot von diesen 2 Kommentaren "umrahmt". Diese lassen sich dann per PHP suchen und der dazwischenliegende Code extrahieren.

    Hier ein einfaches Code-Bsp.:


    Leider ist er durch die Sucherei nach den CSS-Dateien nicht sehr perfomant. Da könnte man evtl. mit Hilfe von reg. Ausdrücken noch etwas Tempo reinbringen...Ich habe ihn deswegen auch erstmal auskommentiert. Zudem arbeitet er auch irgendwie nicht korrekt.

    Alternativ könnte man auch einfach die Standard-CSS-Files einfügen und hoffen, dass die Plone-Seite keine weiteren CSS-Dateien einbindet. Dies würde zumindest deutlich schneller gehen.

    "Carpe Diem" powered by positiv Feelings

  • Zitat von Torty
    Code
    <?
    // ZielURL festlegen
    $ploneURL = "http://localhost:8282/ziel";
    // Zieldatei einlesen (HTML-Code)
    $ploneHTML = file_get_contents($ploneURL);
    // main-Bereich extrahieren
    $extractHTML = substr($ploneHTML, strpos($ploneHTML, "##START##")+13, strpos($ploneHTML, "##END##")-5);
    // main-Slot ausgeben
    echo $extractHTML;
    ?>

    Daran die ausgegebene Seite per PHP zu filtern hatte ich gar nicht gedacht. Aber so geht es natürlich auch, wenn man den code ein wenig anpaßt.

    Dieser Skript funktioniert jetzt einwandfrei.

    Vielen Dank für deine freundliche Unterstützung.

    ...youcan

  • Gern. Nachteilig ist einzig die etwas langsame Ausführung des PHP. Da kann man vermutlich auch nur wenig ändern...

    "Carpe Diem" powered by positiv Feelings

  • Zitat von Torty

    Gern. Nachteilig ist einzig die etwas langsame Ausführung des PHP. Da kann man vermutlich auch nur wenig ändern...

    Also langsam ist es momentan nicht.

    Aber ich habe ein Problem mit den relativen Links im Kode.

    Momentan erfolgt die Ersetzung noch recht rudimentär.

    Code
    $extractHTML = eregi_replace('src="images/','src="http://www.domain.com/folder/images/',$extractHTML);

    Hast du eine Idee wie ich alle enthaltenen URL's (href, src) so modifizieren kann, dass auch komplexe URL's ("/root/folder/" oder "../folder/") korrekt auf absoluten Zugriff umgestaltet werden?

    youcan

  • relative Links sind absolutes Gift für diese Art des "Replacements". Mir fiehle da nur ein, dass man alle href=" prüft, ob sie mit http:// beginnen.
    Falls nicht setzt man die aufgerufene Ziel-URL ein.
    Aber ob das so klappt...

    "Carpe Diem" powered by positiv Feelings

  • Zitat von Torty

    relative Links sind absolutes Gift für diese Art des "Replacements". Mir fiehle da nur ein, dass man alle href=" prüft, ob sie mit http:// beginnen. Falls nicht setzt man die aufgerufene Ziel-URL ein.
    Aber ob das so klappt...

    Die relativen Links ohne Rücksprünge bearbeite ich zuletzt...

    ...nur die relativen Links die mehrere Rücksprünge (../../) enthalten machen mir Sorgen.

    youcan

  • Hmmm...naja - sorry, aber mir fehlt n bissel die Zeit mich da einzuarbeiten.
    Aber das parse_url() liefert doch ein Array aller URL-Teile - oder? Demnach müsstest du für jeden ../ ein solches Array-Element nach vorn (links) wandern. Aber frag jetzt nicht nach nem Algorithmus. Auf jeden Fall gibts den! 8)

    Wenn ich den Code so sehe, hab ich aber Vertrauen in dich, dass du es gelöst bekommst. :D

    "Carpe Diem" powered by positiv Feelings