Konflikt mit Rangliste und Gruppeneinstellung

Tamara-Jasmin

Bekanntes Mitglied
Lizenzinhaber
Registriert
30. Mai 2018
Beiträge
593
Punkte
88
XF Version
  1. 2.2.10 PL1
XF Instanz
Hosting
PHP-Version
8.9
MySQL/MariaDB
8.033
Provider/Hoster
Artfiles.de
Hi,
stelle gerade das Forum etwas um.
Zum einen hatte ich bei den Benutzertiteln 70 Einträge.
Diese habe ich heute um Bilder/Icons erweitert.

Je nach Anzahl der Beiträge erhält der Nutzer im Benutzertitel ein Icon davor, was auch wunderbar funktioniert.
Nun habe ich jedoch Nutzergruppen, bei denen es in den Einstellungen der Benutzergruppe erforderlich ist einen festen Wert einzugeben.Bei diesen fehlt mir dann natürlich dann das Icon, was aber jedem meiner Nutzer "zusteht".

Code:
Übernahme des Benutzertitels

        Den Standardwert aus den vorgegebenen Benutzertiteln verwenden
oder:
        Den folgenden Benutzertitel verwenden:
        "inaktiver Nutzer"

Das heisst, ich suche nun eine Lösung um BEIDE Titel zu verwenden.
Sehr wahrscheinlich muss ich hier das Template ändern, allerdings ist das in XF das erste mal das ich da erweiterte Änderungen vornehme.
Was müsste da nun stehen? Es sind 4 Nutzergruppen die den Zusatz haben müssten.
Ich gehe davon aus, dass ich alle Benutzergruppen auf "Den Standardwert aus den vorgegebenen Benutzertiteln verwenden" stelle, und dann irgendeine "IF Benutzergruppe 3 - dann: "inaktiver Nutzer" Funktion dort integriere.
Wie würde bitte der Code lauten, und welches Template wäre dann das richtige?

Danke und LG: Tammy
 
Ich wäre auch glücklich wenn jemand einen Code hätte für die Hilfeseite - so wie bei den Erfolgen:

Code:
<xf:if is="$trophies is not empty">
   <div class="block">
       <div class="block-container">
           <ol class="block-body">
               <xf:foreach loop="$trophies" value="$trophy">
                   <li class="block-row block-row--separated">
                       <div class="contentRow">
                           <span class="contentRow-figure contentRow-figure--text contentRow-figure--fixedSmall">{$trophy.trophy_points}</span>
                           <div class="contentRow-main">
                               <h2 class="contentRow-header">{$trophy.title}</h2>
                               <div class="contentRow-minor">{$trophy.description|raw}</div>
                           </div>
                       </div>
                   </li>
               </xf:foreach>
           </ol>
       </div>
   </div>
<xf:else />
   <div class="blockMessage">{{ phrase('no_items_have_been_created_yet') }}</div>
</xf:if>

Hat irgendwer mal ein wenig damit gespielt und weiss welche Variablen man verändern muss, damit die Benutzerränge ausgelesen werden?
Möchte ungerne wie früher alle Zeilen per Hand abschreiben (sind jetzt gut 140)
$trophies hab ich mal mit $title_ladder ersetzt - und $trophy mit $user_title_ladder. "trophy_points" wüsst ich jetzt nicht durch was ich das ersetzen sollte.

Muss bei Callback auch was rein? Und wenn ja - was ? ;)

Meine bastelei hat jedenfalls nicht zum erfolg geführt.

LG: Tammy
 
Zuletzt bearbeitet:
Ok, geht wohl nicht.
Ich bearbeite jeden Nutzer einzeln und schreibe z.B. "inaktiv" hinter den Ort oder wo es passt.

Was den obigen Code betrifft. Scheint wohl nicht zu gehen und habe bereits damit begonnen Alle Zeilen abzuschreiben. Leider kann man nicht alle markieren und einfach nur rauskopieren.
Mir fällt nur gerade ein - ich könnte es noch mit einem Datenbankexport versuche und mir da den Text rauskopieren.

LG: Tammy
 
Hallo Tammy,

ich versuche gerade dein Problem für mich zu verdeutschen. Soweit ich das verstehe, möchtest du inaktiven Benutzern einen eigenen Titel verpassen, der dann den vorhandenen Titel ergänzt oder ersetzt? Verstehe ich das richtig?
 
Hi Boothby!
Das hast Du richtig verstanden ;)
Jeder Nutzer erhält seinen Titel bereits aus den angelegten Benutzerrängen.
Und für 2 Gruppen (inaktive - und Moderatoren) soll dieser Benutzerrang ergänzt werden - also erweitert um eine Konstante.

LG: Tammy
 
Zuletzt bearbeitet:
Das Problem ist, dass XF inaktive Nutzer nicht kennt. Hier kommst du also mit einfachen Templatehacks nicht weiter. Callbacks können eine Lösung sein. Ich habe da mal was zusammen gehauen, konnte es leider nicht testen. Können also noch Bugs oder parse errors drin sein.

Ok als erstes legst du dir im Ordner src/XF einen Unterordner "_Tammy" an. Am besten wäre allerdings, wenn du für sowas ein eigenes Add-on hättest, wo die kleinen Tweaks abgelegt werden können, aber egal.

Dort kommt eine PHP Datei "MyCallbacks.php" rein mit folgendem Inhalt:


PHP:
<?php

namespace XF\_Tammy;

use XF\Entity\User;
use XF\Template\Templater;

class MyCallbacks
{  
    private function __construct()
    {
    }

    public static function getInactiveTitle($contents, array $params, Templater $template)
    {     

       $user = $params['user'];
     
        if(!$user instanceof User)
        {
            return '';
        }

        $output = '';

        if($user->getLastActivity() > 365.25/2*86400) // halbes Jahr
        {
            $output = \XF::phrase('tammy_inactive');
        }
        return $output;
    }
     
}

Dann legst du dir folgende Template-Modifikation für "message_macros" an:

suchen nach:

HTML:
<xf:usertitle

Ersetzen durch:

HTML:
<xf:if contentcheck="true">
    <xf:css src="tammy.less" />
    <div class="tammy-inactive-title">
        <xf:contentcheck>
            <xf:callback class="\\XF\\_Tammy\\MyCallbacks"
                method="getInactiveTitle"
                params="{'user': $user}"
            ></xf:callback>
        </xf:contentcheck>
    </div>
</xf:if>

<xf:usertitle


Dann erstellst du dir ein Template "tammy.less" wo du deinen CSS-Kram ablegst, die entsprechende CSS-Klasse müßte dann "tammy-inactive-title" benannt werden.

Zu guter letzt noch ne neue Phrase: "tammy_inactive".

Und wie gesagt, UNGETESTET. :)
 
Zuletzt bearbeitet:
So habs nun getestet und einen Bug gefixed. Läuft soweit. Anstelle von <xf:usertitle in der Templatemodifikation könnte man auch <xf:userbanners nehmen. Dann erscheint der Inactive-Text zwischen Usertitel und den Bannern.

PS. Zum Anlegen der Templatemodifikation muß der Dev-Mode aktiviert sein.
 
Vorab schon mal lieben Dank!
Kann Deinen sehr ausführlichen Beitrag leidererst später beantworten und testen. Bin diese Woche ab 6 Uhr im Nebenjob, gleich drauf in meinem Laden bis 18 Uhr und dann bis 21 Uhr im anderen Nebenjob. Zwischendrum meine Tiere versorgen, etwas Haushalt und Theokratisches erledigen.
Wenn ich diese Woche mich nicht melde, bedeutet das keine mangelnde Wertschätzung. Ich schaff im Moment einfach nur mal zwischendrin einen kleinen Beitrag in einer Kaffeepause.
LG:
Tammy
 
So, nun komm ich endlich mal dazu ... jetzt geht das Lotterleben weiter ;)

@Boothby - verstehe ich Dich richtig - was ich so aus dem Code rauslese - dass dies nicht Benutzergruppenabhängig ist und jeder, der 6 Monate nicht eingeloggt war (auch Premium-User) - den Titel "inaktiv" erhalten?
Meine Inaktiven Nutzer sind ja in einer eigenen Gruppe und haben eingeschränkte Rechte. Auf genau diese müsste ich das jetzt forcieren.
Den Code müsste ich ja dann nur umschreiben für meine 2. Gruppe.

Schönen Sonntag euch allen!
 
Du hast ne Benutzergruppe?

Dann ändere:
PHP:
if($user->getLastActivity() > 365.25/2*86400) // halbes Jahr

in

PHP:
if($user->isMemberOf(100)) // 100 = deine Usergroup-ID für die Inaktiven, ggf. anpassen
 
@Boothby könnte man das auch anpassen auf User die 6 Monate nichts gepostest haben?

Also User X hat 180 Tage nichts gepostet und kommt somit in die Gruppe Inaktive Benutzer.
 
Die User werden in keine Gruppe gesteckt. Sie erhalten im Postbit lediglich einen zusätzlichen Titel.
 
Ja, hab gestern schon kurz gebastelt und ohne obigen Code im messeage_macros einfach versucht mit der XF:IF Abfrage (nur ähnlich, hab grade keinen Zugriff) $user.isMemberoff(17) zu erreichen.
Optimal wäre es eben wenn alle Nutzergruppen sich ihren Titel aus der Rangliste holen (was bis dahin ja einstellbar ist) und im Template dann das Ergebnis angezeigt wird von:
WENN Benutzergruppe inaktiver User DANN füge "inaktiver Nutzer" hinzu.
Das selbe mit den Mods.
WENN Benutzergruppe Moderatoren DANN füge "Moderator" hinzu.
Supermod und gesperrte z.B.. für die habe ich alle feste Titel aktiviert, womit aber der "Schreibstatus" durch die Rangliste nicht mehr sichtbar ist.

Sinnvoller wäre es hier eh mit case zu arbeiten, allerdings las ich mal irgendwo dass dies nicht so einfach hinzugefügt werden kann - oder sollte - in den Templates.
Hab mich einfach noch nicht mit der Struktur beschäftigt und bin froh das ich zumindest die Bedienung und Einrichtung im Griff habe ;)

LG: Tammy
 
Zuletzt bearbeitet:
Zurück
Oben