Eigene Avatare hinzufügen

  • Hallo zusammen,

    ich schreibe gerade ein Plugin, welches als zusätzliches Feature automatisch Avatare aufgrund ihres (über eben dieses Plugin zugewiesenen) Ranges zuweist.

    Zu den relevanten Datenbankfeldern:
    wcf1_rank_plugin* beinhaltet eine Auflistung aller Ränge (rankID ist PK), inkl. einer Spalte "image" mit der URL zum zum Rang gehörenden Bild
    wcf1_rank_user_assignment* ist die Many-to-Many Relation zwischen wcf1_rank_plugin und wcf1_user. Jeder Nutzer hat maximal einen Rang, daher wird userID als PK und FK genutzt, rankID ist ebenfalls FK
    wcf1_user bekommt zusätzlich die Spalte "enableRankAvatar"
    (*Die Tabellennamen habe ich geändert)

    Nun würde ich gerne an den Stellen, an denen eigentlich der Nutzer-Avatar angezeigt wird, stattdessen deren Rang-Bild anzeigen (sofern enableRankAvatar = 1 ist). Ich habe bereits die Klassen wcf\data\user\avatar\DefaultAvatar und wcf\data\user\avatar\Gravatar gefunden, die entsprechend einen normalen Avatar, bzw. einen Gravatar definieren. Meine eigene Avatar-Klasse würde ich in den selben Namespace ablegen. Die Überprüfung, welcher Avatar genutzt wird, wird allerdings scheinbar in der Klasse wcf\data\user\UserProfile.class.php (spezifischer deren Methode "getAvatar()") gemacht.
    Da ich in der Plugin-Entwicklung für WBB noch nicht so versiert bin, muss ich hier nun einmal fragen, wie ich diese Methode überschreiben kann.

    Ist es mir möglich eine Klasse zu erstellen, die von UserProfile erbt und lediglich diese Methode überschreibt, und WCF anzuweisen meine eigene Klasse zu verwenden anstelle der ursprünglichen? Und wenn dem so ist, wie würde sich das auswirken, wenn ich beispielsweise ein zweites Plugin installiere, das ebenfalls eine UserProfile Klasse mit zusätzlichen Methoden implementiert? Wären diese Plugins inkompatibel, da sie zwei unterschiedliche Implementierungen für die gleiche Klasse anbieten?

    Danke im Voraus für eure Hilfe!

  • Da es in meinem Fall nicht abhängig von Benutzergruppen ist, könnte ich diese Avatare nicht automatisch zuweisen, auch sollen Nutzer die Avatare nicht selbst setzen können. Leider kostet das Plugin Geld, sonst hätte ich mal im Code schauen können, wie es dort umgesetzt ist.

  • Eine Erweiterung des Templatesystems ist glaube ich nicht so zweckmäßig in diesem Fall. Es gibt sehr viele Templates in denen der Nutzer-Avatar mit {$user->getAvatar()} (o.Ä.) aufgerufen wird, ich müsste also alle raussuchen und das Template entsprechend anpassen. Sofern irgendwie möglich, würde ich lieber diese eine Stelle (UserProfile->getAvatar() ) bearbeiten, als u. U. ein dutzend Templates

  • Mir geht es darum, dass ich in diesem Forum frage, wie man etwas umsetzen kann. Ich würde daher eher hoffen, dass mir hier jemand helfen kann, bevor ich mir ein Plugin kaufen muss um den Code davon nachzuvollziehen (wo es vll ganz anders umgesetzt ist, als ich es vorhabe). Keine Sorge, wenn mir hier niemand helfen kann, werde ich 2€ auch gerade noch so aufbringen können...

  • Ich habe mir das Plugin nun gekauft und - wie erwartet - löst es den Sachverhalt in einer Art, die für mich nicht wirklich in Frage kommt. Hochgeladene Standard-Avatare werden dort in einer Tabelle gespeichert und wenn der Nutzer diese auswählt, wird der Nutzer-Avatar zu dem in dieser Tabelle hinterlegten Pfad gesetzt. Problem hierbei ist, dass alle Avatare hochgeladen werden müssen und deren relativer Pfad gespeichert wird.

    Die Methode der Klasse UserAvatar, die dafür zuständig ist die URL zum Bild zu generieren, nutzt dann die URL vom Forum (und dem entsprechenden Verzeichnis) und hängt den Dateinamen an.

    Die Avatare, die ich nutze, werden alle auf einen CDN geladen. Dieser liegt auf einem der Server unserer Community und ist allgemein für die Auslieferung sämtlicher statischer Bilder zuständig. Die Pfade die ich angebe, müssen also komplette URLs sein, da sie auf eine andere URL verweisen. Ich müsste also eigentlich eine eigene Version der Klasse UserAvatar nutzen, mit der die generierte URL an Bedingungen gekoppelt ist.

    Ist so etwas in irgend einer Richtung möglich?

  • Hallo @Padaromus,

    also wenn ich Dich richtig verstanden habe, dann ist Dein Problem eigentlich nur, dass der Pfad zum Avatarbild nicht stimmt, weil Du eine Sonderlösung fährst und alle Bilddaten auf einem externen Server abgelegt sind.

    Eigentlich müsste es doch problemlos möglich sein den Pfad entsprechend Deiner Vorstellungen im Plugin so anzupassen, dass er direkt richtig in die DB geschrieben wird.

    Hast Du mal @Cyperghost gefragt ob er Dir das individuell ins Plugin einbauen kann?

    Grüße, CCFF

  • Ich habe zum Testen bereits manuell versucht, die URL in der Datenbank anzupassen und habe danach im Quellcode der UserProfile und UserAvatar Klassen geschaut. Der Bild-Pfad der von der UserAvatar Klasse generiert wird, baut sich wie folgt auf:

    PHP
    return WCF::getPath() . 'images/avatars/' . $this->getFilename($size);

    Also auch wenn ich eine komplette URL angebe (z.B. https://example.com/imageA.png), wird daraus https://meinforum.de/images/avatars….com/imageA.png o. Ä.

    Das Problem resultiert also wirklich daraus, wie der Pfad zum Bild von der WCF-Klasse UserAvatar aufgebaut wird.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!