Simple Machines Community Forum

SMF Support => Language Specific Support => Hilfe zu SMF (German) => Aiheen aloitti: maobe - elokuu 02, 2006, 08:24:57 AP

Otsikko: [gelöst] SSI: Boards aus Recent ausschliessen?
Kirjoitti: maobe - elokuu 02, 2006, 08:24:57 AP
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? :-\
Otsikko: Re: SSI: Boards aus Recent ausschliessen?
Kirjoitti: xduugu - elokuu 03, 2006, 06:47:26 AP
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));
Otsikko: Re: SSI: Boards aus Recent ausschliessen?
Kirjoitti: maobe - elokuu 03, 2006, 07:06:59 AP
ah, wunderbar :D danke, funktioniert :)
Otsikko: Re: SSI: Boards aus Recent ausschliessen?
Kirjoitti: maobe - elokuu 04, 2006, 05:32:15 AP
ahm, geht das auch mit categorien? würde einiges einfacher machen ::)
Otsikko: Re: SSI: Boards aus Recent ausschliessen?
Kirjoitti: maobe - elokuu 04, 2006, 04:24:57 IP
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