Konflikt mit Rangliste und Gruppeneinstellung

Dieses Thema im Forum "Diskussionen rund um XenForo" wurde erstellt von Tamara-Jasmin, 21. Juni 2019.

  1. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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 (Text):

    Ü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
     
  2. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

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

    Code (Text):

    <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: 22. Juni 2019
  3. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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
     
  4. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    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?
     
    Tealk gefällt das.
  5. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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: 25. Juni 2019
  6. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    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: 25. Juni 2019
  7. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    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.
     
    Tamara-Jasmin und McAtze gefällt das.
  8. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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
     
    McAtze und Boothby gefällt das.
  9. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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!
     
  10. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    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
     
    Tamara-Jasmin gefällt das.
  11. kelle

    kelle Mitglied Lizenzverwender

    @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.
     
  12. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    Die User werden in keine Gruppe gesteckt. Sie erhalten im Postbit lediglich einen zusätzlichen Titel.
     
  13. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    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: 2. Juli 2019
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden