Uutiset:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu
Advertisement:

[gelöst] SSI: Boards aus Recent ausschliessen?

Aloittaja maobe, elokuu 02, 2006, 08:24:57 AP

« edellinen - seuraava »

maobe

Hi Folks,

Ich möchte bestimmte Boards aus der Anzeige der Recent Topics/Posts ausschliessen.

In der Suche hab Ich dazu nix gefunden. Es gibt in der SSI.php einen Query in den entsprechenden Funktionen der so aussieht:


...
AND b.ID_BOARD = m.ID_BOARD" . (empty($exclude_boards) ? '' : "
AND b.ID_BOARD NOT IN (" . implode(', ', $exclude_boards) . ")") . "
...


Das sieht mir danach aus als wäre die Funktion bereits vorbereitet um recht einfach Boards per ID aus der Anzeige auszuschliessen. Aber wie setz Ich das ein!? Was muss Ich da genau machen? :-\


"Ich weiß nicht ob es besser wird, wenn es anders wird. Ich weiß nur, dass es anders werden muss, damit es besser werden kann."

www.phantastischewelten.de

xduugu

function ssi_recentPosts($num_recent 8$exclude_boards null$output_method 'echo')

function ssi_recentTopics($num_recent 8$exclude_boards null$output_method 'echo')


Man muss einfach beim Aufruf der Funktion ne Anzahl von letzten Beiträgen/Themen und einen array mit den Boardids übergeben.

z.B.
ssi_recentPosts(5, array(1,2,3));

maobe



"Ich weiß nicht ob es besser wird, wenn es anders wird. Ich weiß nur, dass es anders werden muss, damit es besser werden kann."

www.phantastischewelten.de

maobe

ahm, geht das auch mit categorien? würde einiges einfacher machen ::)


"Ich weiß nicht ob es besser wird, wenn es anders wird. Ich weiß nur, dass es anders werden muss, damit es besser werden kann."

www.phantastischewelten.de

maobe

So, Ich hab ein wenig getüftelt und es hat auf Anhieb funktioniert 8)

Wenn man die recentTopics per SSI auf dem Boardindex oder einer Website haben möchte, in diesen aber nur Topics aus bestimmten Kategorien anzeigen lassen will, dann muss man IN DER SSI.PHP den QUERY der 

function ssi_recentTopics

wie folgt verändern. Zuerst einmal den originalen:



// Find all the posts in distinct topics.  Newer ones will have higher IDs.
   $request = db_query("
      SELECT
         m.posterTime, ms.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, b.ID_BOARD, b.name AS bName,
         IFNULL(mem.realName, m.posterName) AS posterName, " . ($user_info['is_guest'] ? '1 AS isRead, 0 AS new_from' : '
         IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, 0)) >= m.ID_MSG_MODIFIED AS isRead,
         IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from') . ", LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon
      FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ms)
         LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
         LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)
         LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)" : '') . "
      WHERE t.ID_LAST_MSG >= " . ($modSettings['maxMsgID'] - 35 * min($num_recent, 5)) . "
         AND t.ID_LAST_MSG = m.ID_MSG
         AND b.ID_BOARD = t.ID_BOARD" . (empty($exclude_boards) ? '' : "
         AND b.ID_BOARD NOT IN (" . implode(', ', $exclude_boards) . ")") . "
         AND $user_info[query_see_board]
         AND ms.ID_MSG = t.ID_FIRST_MSG
      ORDER BY t.ID_LAST_MSG DESC
      LIMIT $num_recent", __FILE__, __LINE__);



Und jetzt das selbe nochmal mit Änderungen



// Find all the posts in distinct topics.  Newer ones will have higher IDs.
   $request = db_query("
      SELECT
         m.posterTime, ms.subject, m.ID_TOPIC, m.ID_MEMBER, m.ID_MSG, b.ID_BOARD, b.ID_CAT, b.name AS bName,
         IFNULL(mem.realName, m.posterName) AS posterName, " . ($user_info['is_guest'] ? '1 AS isRead, 0 AS new_from' : '
         IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, 0)) >= m.ID_MSG_MODIFIED AS isRead,
         IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from') . ", LEFT(m.body, 384) AS body, m.smileysEnabled, m.icon
      FROM ({$db_prefix}messages AS m, {$db_prefix}topics AS t, {$db_prefix}boards AS b, {$db_prefix}messages AS ms)
         LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
         LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)
         LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = b.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)" : '') . "
      WHERE t.ID_LAST_MSG >= " . ($modSettings['maxMsgID'] - 35 * min($num_recent, 5)) . "
         AND t.ID_LAST_MSG = m.ID_MSG
         AND b.ID_BOARD = t.ID_BOARD" . (empty($exclude_boards) ? '' : "
         AND b.ID_CAT NOT IN (" . implode(', ', $exclude_boards) . ")") . "
         AND $user_info[query_see_board]
         AND ms.ID_MSG = t.ID_FIRST_MSG
      ORDER BY t.ID_LAST_MSG DESC
      LIMIT $num_recent", __FILE__, __LINE__);



Die SSI-Funktion sieht dann so aus:

ssi_recentTopics(8, array(2,9,22,26));

Die Zahlen im Array geben dabei die Kategorien an aus denen KEINE neuen Topics angezeigt werden sollen. Die Zahl vor dem Array gibt an, wieviele Topics insgesamt angezeigt werden sollen.

Thats it :D


"Ich weiß nicht ob es besser wird, wenn es anders wird. Ich weiß nur, dass es anders werden muss, damit es besser werden kann."

www.phantastischewelten.de

Advertisement: