Links nach Gruppen freigeben

Delazar

Bekanntes Mitglied
Lizenzinhaber
Registriert
18. Jan. 2011
Beiträge
702
Punkte
108
XF Version
  1. 1.5.2
PHP-Version
5.4.45
MySQL/MariaDB
5.5.46
Provider/Hoster
Privater
Hi,

ich möchte an der Sidebar Links einbauen die zu gewissen Bereichen zeigen. Diese Links aber sollen nur User sehen können die auch das Recht haben in diesen Bereich zu schauen.
Wie kann ich das Realisieren?

Danke
Delazar
 
Was sind das für Bereiche? Threads, Foren?
Entweder hardcoden und über die ismemberof Funktion direkt im Template prüfen, oder PHP Seitig über forummodel->canViewForum($forum) bzw threadmodel->canViewThread machen.
 
Was sind das für Bereiche? Threads, Foren?
Entweder hardcoden und über die ismemberof Funktion direkt im Template prüfen, oder PHP Seitig über forummodel->canViewForum($forum) bzw threadmodel->canViewThread machen.
Es sind Foren.
Im Vb habe ich damals so gelöst!:
Code:
 <if condition="in_array($bbuserinfo['usergroupid'], array(2, 6, 7))"> Diesen Inhalt sehen nur User, die primär der GroupID 2, 6 oder 7 angehören. </if>

Wie meinst du das genau ragtek
 
Code:
<xen:if is="{xen:helper ismemberof, $visitor, 2,6,7}">
inhalt nur für benutzer aus gruppe 2,6,7 sichtbar
</xen:if>
 
Super Danke ;)
Werde es nachher gleich testen
 
Hallo ragtek.

ich habe es so eingetragen:
Code:
<xen:if is="{xen:helper ismemberof, $visitor, 6}">
<a href="categories/magistrat.39/">Magistrat<span class="rpg"></span></a>
</xen:if>

Bekomme folgende Fehlermeldung:
Code:
    Argument 1 passed to XenForo_Template_Helper_Core::helperIsMemberOf() must be an array, null given in /var/www/meine.domaine/htdocs/library/XenForo/Template/Helper/Core.php, line 1153
    Argument 1 passed to XenForo_Model_User::isMemberOfUserGroup() must be an array, null given, called in /var/www/meine.domainehtdocs/library/XenForo/Template/Helper/Core.php on line 1161 and defined in /var/www/meine.domaine/htdocs/library/XenForo/Model/User.php, line 1384

Nehme ich dein Code raus, wird die sidebar wieder normal angezeigt.
 
Ich weiss zwar nicht welches Template du verändert hast aber in forum_list in welcher man die Sidebar handelt
funktioniert die Condition garantiert.
Ausserdem:
Bist du sicher das dein span class="rpg" da hingehört? Ich glaube es eher nicht. ;)
 
$visitor dürfte eigentlich NIE leer sein.

Wo & wie bindest du es den ein?
 
Ich habe mir eine neue sidebar nach dieses Einweisung erstellt:
http://xenforo.com/community/threads/how-to-add-a-new-sidebar-in-the-forum-list.27784/

Dann habe ich im Template "newsidebar_sidebar" so eingetragen:
Code:
<div class="section">
    <div class="secondaryContent">
        <div class="visitorText">
            <h3>Our new Sidebar!</h3>
            <div class="stats">
<xen:if is="{xen:helper ismemberof, $visitor, 6}">
<a href="categories/magistrat.39/">Magistrat</a>
</xen:if>   
              </div>
          </div>
    </div>
</div>
 
Vergess das ganze Gedröhne im Augenblick mal. Es geht einfacher.

1. Erstelle dir im ACP ein eigenes Template und benenne es irgendwie (MeinSchoenesTemplate)
Code:
<!-- Ich bin "MeinSchoenesTemplate -->
<div class="section">
    <div class="secondaryContent">
 
        <h3>Nette Ueberschrift</h3>
        Ab hier alles rein was du willst
 
    </div>
</div>

2. Füge in forum_list diese Zeile ein wo dein Ding in der Sidebar stehen soll.
Orientiere dich dabei einfach nach den bereits vorhandenen Dingen.
So findest du an einfachsten eine schöne passende Stelle.
Code:
<xen:include template="MeinSchoenesTemplate" />

3. Füge um diese o.a. Zeile herum deine Condition ein.

4. Enjoy
 
Danke DSF, jetzt geht es.
Warum kompliziert machen, wenn auch einfach geht ;)

Gruß
Delazar
 
Dazu kann man doch auch eines der add templates nehmen, oder?
Add sidebar top zb.
 
So habs zwar schon geschrieben, aber dann gleich wieder gelöscht, da ich mir nicht sicher war und es erst testen wollte

Das Tutorial ist nur halbwegs richtig.
Richtig wäre es:

PHP:
class NewSidebar_Listener
{
    /**
    * This is our callback method. It uses 4 params. This method will check if the current requested hook is what we want ('forum_list_sidebar')
    * and if it is, we will insert in the contents our template. This way we will have a sidebar right after the XenForo default sidebar.
    *
    */
    public static function templateHook($hookName, &$contents, array $hookParams, XenForo_Template_Abstract $template)
    {
        /* If this hook is what we want! Remember: we have found the hook name when we was looking in the forum_list template! */
        if ($hookName == 'forum_list_sidebar')
        {
            /* Insert our template in the contents. This way our sidebar will be inserted right after the last XenForo sidebar in the forum list page */
            $contents .= $template->create('newsidebar_sidebar', $template->getParams());
   
            /* If you want that our sidebar be BEFORE the XenForo sidebars uncomment the following line (don't forget to comment the line above) */
            //$contents = $template->create('newsidebar_sidebar') . $contents;
        }
    }
}

dann funktioniert auch das mit den globalen Variablen ala $visitor
 
Dazu kann man doch auch eines der add templates nehmen, oder?
Add sidebar top zb.
Ja klar, könnte man auch so machen und dort auch gleich die entsprechende Condition rein.
Einziger Nachteil: Die Plazierung ist mehr oder weniger vorgegeben.

Der aufgezeigte Weg von ragtek ist "eigentlich" der ganz korrekte.
Das Problem besteht nur darin das die meisten es schlicht und ergreifend nicht verstehen und meistens auch nicht verstehen können.

Auf der anderen Seite, für einen mickerigen Link in der Sidebar, ist der Aufwand unverhältnismässig.
Das sind die berühmten Kanonen auf Spatzen ... :)
 
Persönlich finde ich, dass es hier kein richtig, falsch gibt (solange es funktioniert:D ), ich richte mich da mittlerweile eher nach "minimalstem Umsetzungs Zeitaufwand und für größere Boards => nach dem minimalsten Overhead

TemplateHook => overhead
IMO MEGA OVERHEAD bei sehr vielen addons, die einfach nur andere Templates via template hook einfügen! (man denke da an den unnötigen listener aufruf (= klassennamen auflösen, dateizugriff, code abarbeiten, neues template holen, einfügen, eventuell noch nach der einfüg position suchen,.....)

Ich benutze für solche Sachen ausschliesslich nur mehr TMS.
 
Zurück
Oben