Seite 1 von 2

Beitragstitel bestimmter Threads in der sidebar

Verfasst: 14.10.2008 15:30
von webrunde
Hi Jungs, ich brauche noch einmal etwas Hilfe.

ich habe ein phpBB3 Forum mit einem Theme basierend auf Prosilver. Theme ist insofern verändert, dass ich rechts eine Sidebar eingebaut habe.

Nun will ich in diese Sidebar zwei oder gar drei Module einbauen, die jeweils die Titel der letzten 5 Beiträge einer bestimmten Kategorie oder Forum (samt Link zum Thread) beinhalten.

Kann mir jemand sagen, wie ich sowas anstelle?

Verfasst: 14.10.2008 20:42
von JFooty
Das könntest du z.B. mit Einfache Anzeige der letzten Themen in Div-Box realisieren.

Verfasst: 15.10.2008 08:42
von webrunde
Danke!

Ich werde versuchen daraus was zu basteln. 8)

Verfasst: 17.10.2008 19:00
von webrunde
So, ich habe das ganze so weit, dass ich die entsprechende php Datei aufrufen kann und die Ergebnisse bekomme, die ich haben will.

Code: Alles auswählen

// Variablendefinition entfernt!

// ############## output ##############
echo '<h2>Domain Verkauf</h2><ul>';
// ############## output ##############

$where_forums = ( $special_forums == '0' ) ? '' : 't.forum_id IN ('. $forum_ids .') AND ';
$sql = "SELECT t.*, f.forum_id, f.forum_name, u.username AS first_poster, u.user_id AS first_poster_id, u2.username AS last_poster, u2.user_id AS last_poster_id, p.post_username AS first_poster_name, p2.post_username AS last_poster_name, p2.post_time
   FROM ". $table_prefix ."topics t, ". $table_prefix ."forums f, ". $table_prefix ."users u, ". $table_prefix ."posts p, ". $table_prefix ."posts p2, ". $table_prefix ."users u2
   WHERE $where_forums t.topic_poster = u.user_id AND f.forum_id = t.forum_id AND p.post_id = t.topic_first_post_id AND p2.post_id = t.topic_last_post_id AND u2.user_id = p2.poster_id
   ORDER BY t.topic_last_post_id DESC LIMIT $topic_limit";
$result = mysql_query($sql);
if( !$result )
{
   die('SQL Statement Error: '. mysql_error());
   exit();
}

$line = array();
while( $row = mysql_fetch_array($result) )
{
   $line[] = $row;
}

for( $i = 0; $i < count($line); $i++ )
{
   $forum_id = $line[$i]['forum_id'];
   $forum_url = $root_path .'viewforum.php?f='. $forum_id;
   $topic_id = $line[$i]['topic_id'];
   $topic_url = $root_path .'viewtopic.php?t='. $topic_id;

   $topic_title = ( strlen($line[$i]['topic_title']) < $topic_length ) ? $line[$i]['topic_title'] : substr(stripslashes($line[$i]['topic_title']), 0, $topic_length) .'...';

   // ############## output ##############
   echo '<li><a href="'. $topic_url .'">'. $topic_title .'</a></li>';

   // ############## output ##############
}

echo '</ul>';
mysql_close();
?>
Nun die Fragen:

Ich muss das ganze jetzt in die overall_header.html einbinden. :oops:

Die Datenbankverbindung wäre dann bereits aktiv, also kann ich sie aus dem Code rausnehmen, oder?

Da ich nur den Threadtitel samt Link brauche,kann ich doch einiges aus der sql Abfrage rausnehmen, oder. Kann mir jemand sagen, wie sie dann aussehen müsste?

Verfasst: 18.10.2008 23:51
von webrunde
Nun bin ich inzwischen wieder ein ganzes stück weiter, aber trotzdem fehlt mir die endgültige Einbindung in die overall_footer.html

Ich habe jetzt eine Funktion eingerichtet und auch includet:

select_sidebar_threads(zahl)

Wie bekomme ich jetzt den Output im Template?
(Output ist html Code)

Verfasst: 19.10.2008 11:58
von webrunde
Hi, kann keiner weiterhelfen???

Aktueller Stand:

Datei heißt jetzt domainverkauf.php und die Ausgabe (echo) funktioniert einwandfrei: www.domainforum.info/domainverkauf.php

Nun will ich diese im Forum www.domainforum.info einfügen. Die Sidebar ist in der overall_footer drin.

in theme/template/index.php ist eine Zeile eingefügt:

Code: Alles auswählen

	'DOMAIN_VERKAUF' => file_get_contents('http://www.domainforum.info/domainverkauf.php'),
In der overall_footer rufe ich das ganze so auf:

Code: Alles auswählen

					{DOMAIN_VERKAUF}
Wo ist denn nun der Fehler???

Verfasst: 20.10.2008 11:20
von FatFreddy
Moin.

Hier eine ungeprüfte Notlösung auf die Schnelle.

1.Deine Templatevariable {DOMAIN_VERKAUF} wird nie mit Inhalten versorgt. ;)

In deinem Skript die Werte nicht mit echo ausgeben, sondern einer Variablen (z.B. $domainblock) zuordnen. Beispiel:

Code: Alles auswählen

$domainblock = '<h2>Domain Verkauf</h2><ul>'; 
...
$domainblock .= '<li><a href="'. $topic_url .'">'. $topic_title .'</a></li>';
...
Am Ende des Skripts diese Variable an die Templateengine übergeben.

Code: Alles auswählen

	$template->assign_vars(array(
		'DOMAIN_VERKAUF'		=> $domainblock)
	);
2. Das Skript per Include und nicht mit file_get_contents einbinden.

Durch die Einbindung in index.php wird deine Sidebar allerdings nur versorgt, wenn sich der User im Forenindex bewegt.
Wenn der Block immer erscheinen soll, muß das Skript in der functions.php in die Function page_footer() eingebunden werden.

Wenn ich nix übersehen habe, sollte es damit zumindest funktionieren. Richtig "sauber" ist das Ganze damit noch nicht. ;)

FatFreddy

Verfasst: 20.10.2008 11:40
von webrunde
Danke!

Das ganze muss aber wirklich immer erscheinen und nicht nur auf der Index-Seite.

Wie müsste das ganze denn innerhalb der page_footer.php denn aussehen?

Verfasst: 20.10.2008 11:55
von FatFreddy
Suche in functions.php nach

Code: Alles auswählen

$template->display('body');
und setz deinen include davor.

FatFreddy

Verfasst: 20.10.2008 13:27
von webrunde
Danke, code ist jetzt in der funktions.php includet und die domainverkauf.php entsprechend bearbeitet, aber nun erscheint lediglich die Titelzeile, also h2 titel und der rest nicht. (siehe www.domainforum.info )

Hier der aktualisierte Inhalt von domainverkauf.php

Code: Alles auswählen

<?php
// ############         Edit below         ########################################
$topic_length = '20';   // length of topic title
$topic_limit = '10';   // limit of displayed topics
$special_forums = '1';   // specify forums ('0' = no; '1' = yes)
$forum_ids = '74';      // IDs of forums; separate them with a comma
// ############         Edit above         #######################################


// ############## output ##############
$domain_top = '<h2>Domain Verkauf</h2><ul>';
// ############## output ##############

$where_forums = ( $special_forums == '0' ) ? '' : 't.forum_id IN ('. $forum_ids .') AND ';
$sql = "SELECT t.*, f.forum_id, f.forum_name, u.username AS first_poster, u.user_id AS first_poster_id, u2.username AS last_poster, u2.user_id AS last_poster_id, p.post_username AS first_poster_name, p2.post_username AS last_poster_name, p2.post_time
   FROM ". $table_prefix ."topics t, ". $table_prefix ."forums f, ". $table_prefix ."users u, ". $table_prefix ."posts p, ". $table_prefix ."posts p2, ". $table_prefix ."users u2
   WHERE $where_forums t.topic_poster = u.user_id AND f.forum_id = t.forum_id AND p.post_id = t.topic_first_post_id AND p2.post_id = t.topic_last_post_id AND u2.user_id = p2.poster_id
   ORDER BY t.topic_last_post_id DESC LIMIT $topic_limit";
$result = mysql_query($sql);
if( !$result )
{
   die('SQL Statement Error: '. mysql_error());
   exit();
}

$line = array();
while( $row = mysql_fetch_array($result) )
{
   $line[] = $row;
}

for( $i = 0; $i < count($line); $i++ )
{
   $forum_id = $line[$i]['forum_id'];
   $forum_url = $root_path .'viewforum.php?f='. $forum_id;
   $topic_id = $line[$i]['topic_id'];
   $topic_url = $root_path .'viewtopic.php?t='. $topic_id;

   $topic_title = ( strlen($line[$i]['topic_title']) < $topic_length ) ? $line[$i]['topic_title'] : substr(stripslashes($line[$i]['topic_title']), 0, $topic_length) .'...';

   // ############## output ##############
$domain_top = $domain_top .'<li><a href="'. $topic_url .'">'. $topic_title .'</a></li>';

   // ############## output ##############
}

$domain_top = $domain_top .'</ul>';

$template->assign_vars(array(
      'DOMAIN_VERKAUF'      => $domain_top)
   );

?>