MyBB.de Forum

Normale Version: Avatar für Gäste setzen + Avatare für Gäste verstecken
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Hallo,

ich möchte in meinem Forum Gästen ein Avatar zuweisen, gleichzeitig aber auch andere Avatare etc. für Gäste verstecken. Alles, was ich zu "Avatare für Gäste" fand, war mit dem Plugin PHP in Templates. Aber da ich damit nur im äußersten Notfall arbeiten will, wollte ich eine 'sauberere' Lösung.

Verwendet wird das MyBB 1.8.20.



Folgende Struktur hatte ich im Sinn:
1. User eingeloggt?
   1a. Beitrag von Gast? -> Ausgabe Gastavatar ohne Verlinkung
   1b. Beitrag von User mit gesetztem Avatar? -> Ausgabe Avatar (Standard)
   1c. Beitrag von User ohne Avatar? -> Ausgabe Standardavatar

2. Nicht eingeloggt?
   2a. Beitrag von Gast? -> Ausgabe "Kann Avatare nicht sehen" ohne Verlinkung
   2b. Beitrag von User (mit/ohne Avater) -> Ausgabe "Kann Avatare nicht sehen" mit Verlinkung



So, ich habe nun in der inc/functions_post.php folgende Änderung durchgeführt:

Folgenden Teil auskommentiert:
PHP-Code:
if(isset($mybb->user['showavatars']) && $mybb->user['showavatars'] != || $mybb->user['uid'] == 0)
        {
            $useravatar format_avatar($post['avatar'], $post['avatardimensions'], $mybb->settings['postmaxavatarsize']);
            eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar")."\";");
        


Und habe dafür das folgende geschrieben:
PHP-Code:
// Wenn eingeloggt, dann Avatare sehen
        if ($mybb->user['uid'] != && $mybb->user['uid'] != '')
        {
            // Gast
            if ($post['uid'] == 0)
            {
                eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar_guest")."\";");
            }
            else {
                // gibt es Avatar + ist User?
                if ($post['avatar']) 
                {
                    eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar")."\";");
                }
                // gibt kein avatar + ist User?
                else {
                    eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar_none")."\";");
                }
            }
        }
        
        
// wenn nicht eingeloggt, dann keine Avatare sehen 
        else {
            // User
            if ($post['uid'] == 0
            {
                eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar_unseen_guest")."\";");
            }
            else {
                eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar_unseen_user")."\";");
            }
        




So, das Ersetzen der Grafiken funktioniert ohne Probleme, Gäste sehen nur das Avatar mit der Aufschrift "Gäste können keine Avatare sehen" mit Verlinkung.
Nur ist für Gäste noch immer kein Avatar gesetzt. Und nun frage ich mich, ob ich irgendwo irgendwas übersehen habe? Irgendwas, wo noch bestimmt wird, dass für Gäste die Variable $post['useravatar'] doch leer sein soll?

Vielleicht kann jemand von euch Licht ins Dunkel bringen. Smile


Liebe Grüße
windkind
Wenn es ein Plugin dafür gibt, sollte man dieses vorziehen und nur im Notfall Änderungen an Templates vornehmen. Grund dafür ist das Templates regelmäßig bei Updates aktualisiert werden und alle Änderungen wieder von Hand vorgenommen werden müssen.
Es gibt dafür - meines Wissens nach - kein Plugin. Das einzige Tutorial arbeitet mit dem Plugin "PHP in Templates", welches in der postbit_avatar folgendes schreibt:

Code:
<if $post['useravatar'] then>{$post['useravatar']}<else><img src="URL"></if>

Und genau das will ich nicht. Wink Eben aufgrund der Update-Problematik.
Ich muss dich da korrigieren, Lenox!
Veränderte Templates werden beim Update NICHT überschrieben.
Aber veränderte PHP-Dateien hat man schnell per Upload überschrieben und dann sind die eigenen Änderungen weg, also gut aufpassen, windkind, ob deine veränderte Datei beim Update mit dabei ist Wink
Aber man hat ja auch immer ein Backup, also kann nichts passieren
Ok überschrieben werden die nicht hast recht,  richtig wäre das die Templates  dann nicht aktualisiert werden und Änderungen selbst eingefügt werden müssen Smile
Was hier aber nicht zur Problemlösung führt. Wink
Hier wird immer über so viel diskutiert, aber nie darüber was evtl. die Problemlösung sein könnte.

Erstmal eine Frage: Existiert bei dir in den Postbit Templates überhaupt ein Template namens "postbit_avatar_guest"? Wenn nicht, lege das halt mit folgendem Inhalt an:

PHP-Code:
<div class="author_avatar"><a href="#"><img src="HierDenLinkZumAvatar" alt="" {$useravatar['width_height']} /></a></div

... oder (Option 2) weise der Variable den Wert direkt über die functions_post.php zu.

Also hier den Inhalt abändern

PHP-Code:
eval("\$post['useravatar'] = \"".$templates->get("postbit_avatar_guest")."\";"); 

ps: denk daran, dass bei zukünftigen Updates von MyBB die functions_post.php durchaus geändert werden kann und somit all deine Änderungen überschrieben werden. Am sinnvollsten ist es in dem Fall ein Plugin zu schreiben und die passende Hook zu benutzen. Dann kann auch bei Updates nichts passieren. Plugins bedeuten aber immer Mehraufwand (zumindest beim erstellen).
Hallo,

ja, das Template existiert, das habe ich nämlich selbst angelegt. Es direkt über die Variable angeben mag ich aufgrund der Trennung von PHP und der Templates nur höchst ungern, da es doch in späteren Designs unflexibel macht. Blush 

Zumal ich das auch schon versucht hatte, doch auch das übernimmt es nicht. Selbst, wenn ich es komplett händisch angebe ohne jegliche Bedingungen und damit auch die anderen Avatare überschreibe.

Daher ist eben meine Vermutung, dass irgendwo noch irgendwas mit den Gästen herumgebastelt wird, was sich aber versteckt.
edited: hat sich erledigt // Denkfehler von mir
----
Deine kompletten if-Abfragen sehen komisch aus.. ist schon spät und am Handy machts nur halb so viel Spaß  Big Grin

Ich schau mir das die Tage mal an.. Vielleicht nur nochmal als kleiner Gedankengang: Bist du sicher, dass er in die zuständige if-Abfrage springt? Ich kann mir nicht vorstellen, dass irgendwo nochmal überprüft wird ob dies ein Gast ist und die Variable leert.. Somit müsste es eigentlich klappen..

In Zeile 330 (originale Datei) wird

PHP-Code:
$post['useravatar'] = ''


definiert. Somit also ein leerer String. Irgendwie wird die Variable bei dir nicht gefüllt, weshalb weiß ich gerad auch noch nicht. Vielleicht die Variable gar nicht erst leer lassen sondern direkt füllen mit dem Gast-Avatar?
Also in die oberste If-Else springt er auf jeden Fall (also die Unterteilung, ob eingeloggt oder nicht).
Und den Rest mit "Avatar vorhanden" bzw. "Avatar nicht vorhanden" nimmt er auch. Also es liegt wirklich nur an dem Avatar für Gäste.

Ich hatte es eben auch noch einmal separat versucht ohne die Unterteilung, ob eingeloggt oder nicht. Aber auch da übernahm es das Avatar für Gäste nicht.

Das war die Abfrage:

PHP-Code:
if ($post['uid'] == 0
{
      eval(
"\$post['useravatar'] = \"".$templates->get("postbit_avatar_guest")."\";");
}
else {
      eval(
"\$post['useravatar'] = \"".$templates->get("postbit_avatar")."\";");



Die Abfrage im oberen Post hatte ich auch separat auch noch einmal geprüft mit Texten - da war das kein Problem.
Seiten: 1 2 3 4