Seite 1 von 1

Benutzerspezifische Profilfelder ausblenden

Verfasst: 29.05.2009 12:21
von oxpus
Ich habe mal ein Snippet gebastelt, um bestimmte benutzerspezifische Profilfelder nur für Foren-Gründer und für den betreffenden Benutzter sichtbar zu machen:

Öffne

includes/functions_profile_fields.php

finde

Code: Alles auswählen

    function generate_profile_fields_template($mode, $user_id = 0, $profile_row = false)
    {
        global $db;  
und hier die Zeile

Code: Alles auswählen

        global $db; 
ersetzen mit

Code: Alles auswählen

        global $db, $user;  
finde

Code: Alles auswählen

        else if ($mode == 'show')
        {
            // $profile_row == $user_fields[$row['user_id']];
            $tpl_fields = array();
            $tpl_fields['row'] = $tpl_fields['blockrow'] = array();  
danach einfügen

Code: Alles auswählen

            // Hier die Feldkennungen gemäß Profilfeldverwaltung angeben, nicht die angegebenen Namen des Feldes:
            $forbidden_fields = array('field_name_1', 'field_name_2');  
finde

Code: Alles auswählen

                    $tpl_fields['row'] += array(
                        'PROFILE_' . strtoupper($ident) . '_VALUE'    => $value,  
davor einfügen

Code: Alles auswählen

                $is_forbidden = (in_array($ident_ary['data']['field_name'], $forbidden_fields)) ? true : false;

                if (($is_forbidden && ($user->data['user_type'] == USER_FOUNDER || $user->data['user_id'] == $user_id)) || !$is_forbidden)
                {  
finde

Code: Alles auswählen

                    'PROFILE_FIELD_EXPLAIN'    => $ident_ary['data']['lang_explain'],

                        'S_PROFILE_' . strtoupper($ident)        => true
                    );  
danach einfügen

Code: Alles auswählen

                }  
Hiervon nicht betroffen sind die Einstellungen, wo benutzerspezifische Felder angezeigt werden und auch die Erfassung im eigenen Profil, bzw. die Verwaltung der Felder im ACP für Adminstratoren.
Es können dazu auch weitere Felder in dem Array $forbidden_fields gemäß dem Muster hinterlegt werden, die allesamt in der Profilansicht für andere User (Ausnahme in diesem Beispiel eben Forengründer) nicht angezeigt werden sollen.
Bei den Feldern aber unbedingt darauf achten, die Feldkennung anzugeben, die auch im Admin-Bereich zu dem Feld vom Forum angezeigt/hinterlegt wird und nicht der selbst eingegebene Feldname.

Beispiele weiterer Bedingungen, wer die Profilfelder nicht sehen darf:

Nur für den Benutzer selber:

Code: Alles auswählen

                if (($is_forbidden && $user->data['user_id'] == $user_id)) || !$is_forbidden)
                {   
Bestimmte Benutzer ausnehmen:

Code: Alles auswählen

                if (($is_forbidden && !in_array($user->data['user_id'], array(10,11,12))) || !$is_forbidden)
                {   
Hier ist

Code: Alles auswählen

array(10,11,12) 
mit den Benutzer-IDs zu füllen, die die Profilfelder nicht sehen sollen.

06.06.2009: Anpassung wegen ungenauer Suchstelle