Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
Forenliste erstellen lassen
#1
Guten Tag MyBB-Coder Community!

Ich schraube gerade an einem Plugin herum, welches ich gerne auch - sobald dieses fertig ist - hier releasen möchte.
Das einzige Problem, welches die Arbeiten am Plugin zum Stillstand gebracht hat, ist folgender Schritt, den ich unbedingt einbauen möchte:

Das Plugin erlaubt das Auswählen von einzelnen Foren in den BenutzerCP's, um die jeweiligen, forenspezifischen Informationen einzuschränken, welches das Plugin ausgibt.
Bisher müssen die Benutzer die Foren-ID's in ein Textfeld eingeben, was natürlich besonders für MyBB-Anfänger sehr kompliziert ist, überhaupt die fid's zu finden (!).

Nun möchte ich die Sache für die Benutzer erleichtern, indem ich die Forenauflistung des Boards ermittle und neben jedem Subforum-Namen ein kleines Check-Button setze, damit der User bequem einzelne Foren usw abwählen kann.

Um das zu realisieren, habe ich mir die build_forumbit()-Funktion in der functions_forumlist.php angeschaut - da dieses natürlich das Templatesystem benutzt, um eine ausgabefertige Forumauflistung zu erstellen, konnte ich die Funktion nicht benutzen.
So habe ich versucht einzelne Teile der Funktion für mich zu extrahieren und umzuschreiben - leider ohne großen Erfolg.

Im Moment verstehe ich zwar wie das $fcache zustande kommt und wie dieses mehrdimensionale Array aufgebaut ist - jedoch verstehe ich nicht ganz wie man relativ sicher sämtliche Kategorien und deren Unterforen (und evt. Unterforen der Unterforen) zusammenbringt - die foreach-Verästelungen haben mich doch sehr verwirrt.

Nun bin ich so ziemlich ratlos und frage mich, wie ich es am besten realisieren kann, eine Auflistung der gesamten Foren (unsichtbare und von den Forenberechtigungen verbotene ausgeschlossen) zu erreichen.
Ich würde dann die Forenliste mit <ul> und <li> unterordnen, sodass ein Forum-Tree entsteht. Neben jedem Forennamen werde ich eine Checkbox einfügen, welche im <form> die Forenid zurückgibt, welches ich wie mit dem zuvorigen System (mit dem Textfeld) verwenden kann.
Code:
<ul>
<li> Kategorie 1 </li>
  <ul>
   <li> Subforum 1 </li>
   <li> Subforum 2 </li>
   ...
  </ul>
<li> Kategorie 2 </li>
  <ul>
   <li> Subforum 1 </li>
    <ul>
     <li> Unterforum zu Subforum 1 </li>
    </ul>
   <li> Subforum 2 </li>
   ...
  </ul>
</ul>
PHP-Code:
$query $db->simple_select(TABLE_PREFIX."forums""*""active != 'no'", array('order_by' => 'pid, disporder'));
       while(
$forum $db->fetch_array($query))
       {
                 
$fcache[$forum['pid']][$forum['disporder']][$forum['fid']] = $forum;
       }
       
$forumpermissions forum_permissions(); 
Das ist der einzige Code, den ich bisher sicher deuten konnte....

Ich hoffe ihr könnt mir helfen, hinter das Geheimnis zu kommen, der Datenbank eine ansehnliche Forenauflistung zu entlocken mit lediglich dem Forennamen und der Foren-ID.

mfg,
animus
Zitieren
#2
Mit der Funktion build_forum_jump kannst du die Foren als Dropdown-Menü ausgeben lassen. Das könnte dir auch reichen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#3
Ich habe mir die Funktion etwas zurechtgeschrieben, jedoch komme ich nicht auf das Ergebnis was ich erhofft hatte; ich weiß nicht warum, aber die ganzen foreachs verwirren mich doch sehr Smile
PHP-Code:
foreach($jumpfcache[$pid] as $main)
                {

                        foreach(
$main as $forum)
                        {
                                
$perms $permissioncache[$forum['fid']];
                                if(
$forum['fid'] != "0" && $perms['canview'] != "no")
                                {
                                        
$optionselected "";
                                        if(
$selitem == $forum['fid'])
                                        {


                                        }
                                          if (
$depth)
                                          {
                                          
$forumjumpbits.= "<ul>";
                                          }
                                        
$forumjumpbits .= $depth." <li>".$forum[name]."</li>";

                                        if(
$forum_cache[$forum['fid']])
                                        {
                                                
$newdepth $depth."--";
                                                
$forumjumpbits .= build_forum_jump($forum['fid'], $selitem0$newdepth$showextras);
                                        }
                                }
                        }
                } 
Ich bin ratlos; ich weiß nicht wie ich es in den For-Schleifen schaffen soll, die <li> und <ul> zu positionieren; depth == "--": <ul> <li> ... depth=="----": <ul> <ul> <li>....

:/
Zitieren
#4
Du musst das auf jeden Fall in eine Funktion auslagern. Da es ja beliebig viele Ebenen geben kann, muss dann inerhalb der Funktion die selbige wieder ausgeführt werden. Übertrage doch die von mir genannte Funktion auf Listen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
Ich verstehe nicht ganz, wieso du nicht einfach die Original Funktion benutzt, mit folgendem Funktionsaufruf wird z.B. das ForenSpring Menü beim anSchauen eines Threads erstellt:
Code:
$forumjump = build_forum_jump("", $fid, 1);
Zitieren
#6
Das geht nicht da ich kein Select-Feld haben möchte, sondern eine <ul>-Liste, sozusagenen eine kleinere Ansicht eines Foren-"Baums".

Ich habe das Problem jedoch lösen können, in dem ich ein <select>-Form mit build_forum_jump erstelle und mit regex durch Listenelemente ersetze.

Danke für die tatkräftige Unterstützung Smile
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  User Präfixe selbst erstellen lassen? paperlove 0 1.043 16.08.2015, 13:46
Letzter Beitrag: paperlove