Seite 1 von 2
Url "letzter Beitrag"
Verfasst: 17.10.2004 15:07
von Be123
moin moin!
Hat jemand eine Idee, wie man die Url des letzten Beitrags dahingehend ändern kann, dass nicht eine eigene Seite geschaffen wird, um den letzten Beitrag aufzurufen, sondern man auf die topic-Seite kommt und dann runter zum letzten Beitrag? Nix verstanden? Macht nichts, hier ein Beispiel:
http://www.schoolwork.de/forum/viewtopic.php?p=63#63
http://www.schoolwork.de/forum/viewtopic.php?t=34#63
Die erste Url möchte ich so ändern, dass die zweite entsteht. (In der Spalte "letzter Beitrag".)
Der Sinn an der Sache ist, dass Google die Forum-Seiten dann nicht doppelt findet.
Weiß jemand Rat?
Verfasst: 17.10.2004 15:49
von Be123
Ich habe mir überlegt, dass die Nummer für den letzten Beitrag (p=) jeweils pro Forum in die Datenbank geschrieben wird. Genau das Gleiche müsste mit den Topics (t=) geschehen, damit man dann die Nummer für das letzte Thema pro Forum abrufen kann. Ist das irgendwie zu bewerkstelligen?
Verfasst: 14.04.2005 15:55
von Be123
Zusätzlich zu dem Feld "forum_last_post_id" in der Tabelle phpbb_forums möchte ich ein Feld einbauen, das "forum_last_topic_id" heißen soll und die Nummer des letzten Themas enthält. Dann müsste ich dafür sorgen, dass
1) die last_topic_id bei jedem Post in die Datenbank eingetragen wird
2) die last_topic_id beim Anzeigen der einzelnen Foren-Übersichten abgerufen wird.
Eine Alternative wäre, dass ich anhand der last_post_id die zu der post_id passende topic_id herausbekomme.
1) Mit der last_post_id in die Tabelle phpbb_posts gehen und das dazugehörige Feld topic_id finden.
Bei beiden Möglichkeiten habe ich die Frage: Wie kann ich das erreichen?

Verfasst: 14.04.2005 16:12
von Be123
Ich glaube, es wäre ganz sinnvoll, wenn in der nächsten Version von phpbb die letzten Beiträge-Urls nach dem oben beschriebenen Schema aufgebaut wären, weil Suchmaschinen dann die Beiträge nicht mehr doppelt finden würden.
*Hier* hat man sich zu dem Problem auch Gedanken gemacht.
Verfasst: 15.04.2005 14:05
von Be123
...keine Angst, ich führe gerne Selbstgepräche ...
Wie kann ich jetzt mit einer Datenbankabfrage meinen forum_last_topic_id Wert erhalten?
Die dritte folgende Möglichkeit verwerfe ich sogleich wieder, weil alte Foren dann nicht aufgerüstet werden könnten: Beim Posten gleich topic_id#post_id zusammen in das Feld forum_last_topic_id eintragen.
Meine Wahl fällt also zunächst auf die zweite Möglichkeit, weil dann kein neues Feld in der Datenbank angelegt werden muss.
Aus der Tabelle
phpbb_forums erhalte ich die zu
forum_id passende
forum_last_post_id. Mit diesem Wert gehe ich in die Tabelle
phpbb_posts und suche die zu
post_id passende
topic_id.
Fertig! ...jetzt das ganze nochmal in mysql.

Kennt sich jemand damit aus?
Verfasst: 15.04.2005 14:20
von itst
phpBB liest auf dem Index die forum_last_post_id des aktuellen Forums aus. Die nimmst Du und packst sie hier (index.php, if-Schleife ab Zeile 395) rein:
Code: Alles auswählen
$sql = "SELECT topic_id FROM phpbb_topics WHERE topic_last_post_id = " . $forum_data[$j]['forum_last_post_id'];
Damit bekommst Du die topic_id dieses Posts.
Verfasst: 15.04.2005 17:07
von Be123
hi,
danke für die Antwort!
Folgendes müsste ja eigentlich auch funktionieren:
Code: Alles auswählen
$sql = "SELECT topic_id FROM phpbb_posts WHERE post_id =".$forum_data[$j]['forum_last_post_id'];
Nur leider funktioniert beides nicht. Wenn ich das Ergebnis einfach mal mit
echo zum Vorschein rufe, sieht es so aus, als wenn er den ersten Teil der Datenbankabfrage überhaupt nicht ausführen würde.
SELECT topic_id FROM phpbb_posts WHERE post_id =2323SELECT topic_id FROM phpbb_posts WHERE post_id =2331SELECT topic_id FROM phpbb_posts WHERE post_id =2328 usw.
Verfasst: 15.04.2005 18:21
von itst
Poste mal Deine Code.
Verfasst: 15.04.2005 18:51
von Be123
Code: Alles auswählen
if ( $forum_data[$j]['forum_last_post_id'] )
{
$sql = "SELECT topic_id FROM phpbb_posts WHERE post_id =".$forum_data[$j]['forum_last_post_id'];
echo $topic_id;
$last_post_time = create_date($board_config['default_dateformat'], $forum_data[$j]['post_time'], $board_config['board_timezone']);
$last_post = $last_post_time . '<br />';
$last_post .= ( $forum_data[$j]['user_id'] == ANONYMOUS ) ? ( ($forum_data[$j]['post_username'] != '' ) ? $forum_data[$j]['post_username'] . ' ' : $lang['Guest'] . ' ' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '=' . $forum_data[$j]['user_id']) . '">' . $forum_data[$j]['username'] . '</a> ';
$last_post .= '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $forum_data[$j]['forum_last_post_id']) . '#' . $forum_data[$j]['forum_last_post_id'] . '"><img src="' . $images['icon_latest_reply'] . '" border="0" alt="' . $lang['View_latest_post'] . '" title="' . $lang['View_latest_post'] . '" /></a>';
}
echo $topic_id; habe ich als
Test reingeschoben. Allerdings bekomme ich dann 27 Siebenen, also 777777777777777777777777777. Eines der letzten Themen hat die id 777 und ich habe neun Foren; 3*9=27. ...Ein kleiner Erfolg?
Verfasst: 15.04.2005 19:15
von itst
Du definierst zwar die SQL-Abfrage, führst sie aber nicht aus.
Code: Alles auswählen
$sql = "SELECT topic_id FROM phpbb_posts WHERE post_id = ".$forum_data[$j]['forum_last_post_id'];
if ( !($result = $db->sql_query($sql)) )
{
// Fehler abfangen, siehe message_die()
}
$row = $db->sql_fetchrow($result);
$topic_id = $row['topic_id'];
Mal schnell aus dem Ärmle, keine Gewähr. Schau Dir mal die Datenbankabfragen in phpBB an, die funktionieren immer so.