Ergebnis 1 bis 10 von 10

Thema: Klasse ins Framework einbinden - wie?

  1. #1
    Contao-Nutzer Avatar von dirkweimar
    Registriert seit
    24.06.2009.
    Beiträge
    206

    Frage Klasse ins Framework einbinden - wie?

    Ich möchte mein Trackback-Modul dahingehend ausbauen, dass es auch Trackbacks empfangen kann.

    Dafür benötige ich eine Datei, die von einem anderen Client aus aufgerufen wird und die per XML-RPC übermittelten Daten verarbeitet. Diese Datei hat bei mir folgenden Pfad:
    TL_ROOT/system/modules/meinmodul/trackback_server.php

    Ich habe das ganze jetzt zwar grundsätzlich am Laufen, allerdings ist diese Datei bisher komplett prozedural geschrieben und quasi komplett vom Framework getrennt.

    Frage: wie mache ich das so, dass ich innerhalb des TL-Frameworks bleibe?

    Wahrscheinlich muss in eine neue Klasse bauen, nur wie bekomme ich die dann von TL eingebunden? Welche Klasse muss ich mit meiner neuen Klasse erweitern?
    Geändert von dirkweimar (11.04.2010 um 21:37 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    31.07.2009.
    Beiträge
    298

    Standard

    Wie wird Deine trackback_server.php denn aufgerufen oder wohin sollen die verarbeiteten Daten?
    Du wirst ja wahrscheinlich zu mindestens die Grundfunktionalität benötigen (z.B. Datenbankabfragen und müsstest dann Richtung Controller erben).

  3. #3
    Contao-Nutzer Avatar von dirkweimar
    Registriert seit
    24.06.2009.
    Beiträge
    206

    Standard

    Aufgerufen wird die Datei von einer externen Seite aus (ein anderes Blog, das einen Trackback sendet). Diese schickt einen HTTP-Header und XML-Daten.

    Die verabeiteten Daten sollen per HTTP-Request an die aufrufende Seite zurückgesendet werden. Wenn der Trackback erfolgreich geprüft wurde, muss noch was in die Datenbank geschrieben werden. Außerdem muss ich z.B. in der Klasse herausfinden, ob eine übergebene URL ein gültige News-URL meiner TL-Seite ist.

    Ich brauche also wahrscheinlich $this->Request, $this->Database und $this-Environment.

  4. #4
    Contao-Fan
    Registriert seit
    31.07.2009.
    Beiträge
    298

    Standard

    Frontend oder Backend oder falls Du aus den beiden eigentlich keine Funktionalität brauchst, geht auch Controller unter Verwendung von folgendem Konstruktor:
    PHP-Code:
    protected function __construct()
    {
        
    parent::__construct();
        
    $this->import('Database');


  5. #5
    Contao-Nutzer Avatar von dirkweimar
    Registriert seit
    24.06.2009.
    Beiträge
    206

    Standard

    Ich habe jetzt die Klasse Frontend erweitert und meine Funktionalität in die generate() gebaut. In der config habe ich dann noch das Server-Modul als Frontend-Modul registriert und dem Seitenlayout hinzugefügt. Wenn ich die Seite im Browser aufrufe, klappt alles - das Modul wird geladen und generate() wird ausgeführt.

    Beim Aufruf derselben Seite von extern per HTTP-Request passiert allerding gar nichts.

    Wie gesagt, wenn ich das ganze Klassen-Gedönse rausnehme und in die trackback_server.php ein echo "test" baue, kommt dieses "test" wunderbar als Antwort beim aufrufenden Client an.

    *kopfkratz*

    Ich glaube, das Problem ist, dass die index.php von TL gar nicht aufgerufen und somit das Framework gar nicht initialisiert wird, weil meine Datei _direkt_ von einem anderen Server aufgerufen wird. Da kann ich scheinbar nicht so ohne weiteres mit Vererbung arbeiten.
    Geändert von dirkweimar (12.04.2010 um 16:14 Uhr)

  6. #6
    Contao-Fan
    Registriert seit
    31.07.2009.
    Beiträge
    298

    Standard

    Wenn Du von extern eine TYPOlight-Seite aufrufst, wird auch die index.php aufgerufen. Dies geschieht nur nicht, wenn Du direkt die Modul-Datei aufrufst (Deine Klasse muss schließlich irgendwo initialisiert werden).
    Da das so etwas schwer ist zu helfen, kannst du ja vielleicht (ggf. PN) Links posten.

  7. #7
    Contao-Nutzer Avatar von dirkweimar
    Registriert seit
    24.06.2009.
    Beiträge
    206

    Standard

    Hi Torben,

    Dies geschieht nur nicht, wenn Du direkt die Modul-Datei aufrufst.
    Genau das ist der Fall.

    Ich erkläre noch mal kurz, was das Modul macht: Es besteht aus zwei Komponenten, dem trackback_client und dem trackback_server. Der Client sendet beim Speichern eines Newsbeitrags einen sog. Trackback bzw. Pingback an den Server. Das funktioniert auch schon problemlos, da die entsprechende Funktion (trackback_client::sendPing) als Callback beim Speichern eines Beitrags aufgerufen wird.

    Der Server soll jetzt diese Anfrage annehmen und verarbeiten. D.h., er ruft zunächst die Seite, von der er den Pingback erhalten hat, auf und sucht in den <head>-Tags nach einem solchen Tag:

    <link rel="pingback" href="http://localhost/~dirkweimar/typolight-2.8.1/system/modules/z_trackback/Trackback_server.php">

    Hat er das gefunden, sendet er direkt an die dort stehende URL seinerseits die Antwort.

    Die Pfade sind jetzt natürlich alle noch lokal, weswegen das bei Dir nicht funktionieren wird, aber zur Veranschaulichung hilft es vielleicht, wenn ich das Paket hier anhänge:
    z_trackback..zip

    Zur Veranschaulichung habe ich die Serverdatei zweimal dazugepackt: einmal so, wie es klappt (trackback_server.php, prozedural) und eine Kopie (trackback_server_FRAMEWORK.php) mit meinem nicht funktionierenden Versuch, das ins Framework einzubinden.

    Ich hoffe, ich konnte es einigermaßen erklären ...

  8. #8
    Contao-Fan
    Registriert seit
    31.07.2009.
    Beiträge
    298

    Standard

    Dann ergänze mal unter der Klasse in FRAMEWORK folgendes:
    PHP-Code:
    /**
     * Initialize the system
     */
    define('TL_MODE''FE');
    require(
    '../../initialize.php');

    /**
     * Instantiate trackback_server
     */
    $objTrackbackServer = new tracback_server();
    $objTrackbackServer->generate(); 
    Müsste dann funktionieren.

  9. #9
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.622
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Schau dir doch mal meine Ajax-Erweiterung an. Dort hast du eine Datei, welche genau das macht. Wenn du sie in einem Unterordner hast (nicht im Root), musst du nur den relativen Pfad zur initialize.php anpassen.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  10. #10
    Contao-Nutzer Avatar von dirkweimar
    Registriert seit
    24.06.2009.
    Beiträge
    206

    Daumen hoch

    Super, jetzt läufts - danke!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. CSS Framework Hilfe
    Von dr... im Forum Layout / Templates / Holy Grail
    Antworten: 5
    Letzter Beitrag: 19.06.2010, 09:19
  2. CSS Framework TYPOlight 2.8.1
    Von mtpl im Forum Layout / Templates / Holy Grail
    Antworten: 4
    Letzter Beitrag: 23.03.2010, 09:09
  3. PHP Framework? DB Anbindung ?
    Von mtpl im Forum Sonstiges zu Contao
    Antworten: 6
    Letzter Beitrag: 01.03.2010, 22:29
  4. [subcolumns] - mit TL-CSS-Framework?
    Von Hagen im Forum Sonstige Erweiterungen
    Antworten: 8
    Letzter Beitrag: 07.09.2009, 15:35
  5. Typolight-Framework
    Von ChrMue im Forum Entwickler-Fragen
    Antworten: 1
    Letzter Beitrag: 28.08.2009, 19:04

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •