PHP in Templates (include-Problem)

Alles zu Styles, Templates, Icons und Smilies für phpBB 3.0.x, sowie allgemeine Designfragen zur Integration von phpBB in bestehende Websites.
phpBB Styles Demo
Forumsregeln
Bei Style spezifischen Fragen ist der Stylename und die Downloadquelle des Styles erforderlich, besser noch die URL vom betroffenen Forum.
dopeline
Mitglied
Beiträge: 3
Registriert: 01.06.2007 13:15

PHP in Templates (include-Problem)

Beitrag von dopeline »

Hallo!

Ich habe im Admin-Panel die "PHP in Templates"-Funktion aktiviert... Nun hab ich folgendes Problem:

Ich möchte im Template "index_body.html" den Rückgabewert einer PHP-Funktion ausgeben.
"/var/www/html/web256/html/phpBB" ist das root-Verzeichnis vom Board und
"/var/www/html/web256/html/chat/info_embedded.php" ist die php-Datei, von der ich die Funktion "numusers()" aufrufen und den Wert auf der Index-Seite (unter "Letzter Besuch....") ausgeben möchte.

Hier mein Versuch der Anpassung des Templates:

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<p class="right<!-- IF S_USER_LOGGED_IN --> rightside<!-- ENDIF -->"><!-- IF S_USER_LOGGED_IN -->{LAST_VISIT_DATE}<!-- ELSE -->{CURRENT_TIME}<!-- ENDIF --><br>Benutzer im Chat: <?php include("/chat/info_embedded.php") echo numusers(); ?></p>
Ich nehme an, dass die Pfadangabe der unclude-Datei nicht korrekt ist, aber ich habe schon alles Mögliche ausprobiert und komme einfach nicht weiter..... Auf der Index-Seite wird zwar "Benutzer im Chat:" an der richtigen Stelle angezeigt, jedoch findet keine Ausgabe des Funktions-Rückgabe-Wertes statt. Zu Testzwecken habe ich auch versucht, statt

Code: Alles auswählen

echo numusers();
einfach mal

Code: Alles auswählen

echo "Test";
ausgeben zu lassen... Das hat auch nicht funktioniert... Ist es möglich, dass ich den PHP-Code anders in das Template eingeben muss?


Ich bin für jeden Lösungsansatz dankbar!

Gruß, dopeline
Triplex
Mitglied
Beiträge: 95
Registriert: 05.01.2003 14:45

Beitrag von Triplex »

Hi dopeline,

auch wenn es etwas spät ist, vielleicht brauchst du es noch.


Code: Alles auswählen

<!-- PHP -->
DEINCODE
<!-- ENDPHP -->
sollte dir helfen :-)

Gruß,
triplex.
Woschod
Mitglied
Beiträge: 22
Registriert: 22.03.2007 09:50
Wohnort: Dresden
Kontaktdaten:

Beitrag von Woschod »

Also mir hat das gerade enorm geholfen. Danke! :grin:
Das Leben ist wie eine Pralinenschachtel.

http://www.forum.stalinwerke.de/
dopeline
Mitglied
Beiträge: 3
Registriert: 01.06.2007 13:15

Beitrag von dopeline »

Ganz große Klasse! Das hat funktioniert.... Hatte die betreffende Datei zeitweilig mit einem iFrame eingebunden und bin froh, eine saubere Methode anwenden zu können! Ach PHP ist schon was feines.... :)

Gruß, dopeline
Vogt
Mitglied
Beiträge: 8
Registriert: 23.03.2006 23:25
Wohnort: Ulm
Kontaktdaten:

Beitrag von Vogt »

Hallo,

ich glaube, meine Frage passt hierher.
Ich möchte im Header einen Tipp des Tages als Lauftext einfügen. Der Tipp soll aus einer Tabelle aus der DB ausgelesen werden. Die Tabelle phpbb_spruch habe ich angelegt und in der constants.php mit define('SPRUCH_TABLE', $table_prefix . 'spruch'); eingefügt.

Im ACP ist PHP-Code in Templates zulassen auf "ja" gesetzt.
Jetzt wollte ich den PHP-Code zum Auslesen der Tipps aus der Tabelle in die overall_header.html wie folgt einfügen:

Code: Alles auswählen

<!-- PHP -->

$sql = "SELECT datum, tipp FROM ".$table_prefix. 'spruch'. " ORDER BY ID DESC ";

$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result))
{
  if ($row["datum"] == date("d.m.Y")) 
       {
       echo "<p><marquee scrollamount='1' scrolldelay='5'>" . $row['tipp'] . "</marquee></p>";
       }
}

<!-- ENDPHP --> 
Es kommt aber kein Lauftext.
Beim An- bzw. Abmelden kommt eine Warnung:
"Warning: mysql_query() [function.mysql-query]: Acces denied for unser 'ODBC'@'localhost' (using password: NO) in N:\xampp\htdocs\phpBB3\cache\tpl_subsilver2_overall_header.html.php on line 144"

"Warning: mysql_query() [function.mysql-query]: Alink to the server could not be etablished in N:\xampp\htdocs\phpBB3\cache\tpl_subsilver2_overall_header.html.php on line 144"

"Warning: mysql_fetch_assoc(): supplied argument ist not valid MySQL result resource in N:\xampp\htdocs\phpBB3\cache\tpl_subsilver2_overall_header.html.php on line 146"

Was kann ich tun, um mein Vorhaben zu verwirklichen?

Mit phpBB2 konnte ich den "Tipp des Tages" realisieren. Der nachfolgende Link zeigt, was ich meine.

http://www.leben-mit-stoma.de/forum/index.php

Danke im Voraus für eure Hilfe.

Vogt
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Vogt,

ich habe auf meiner "noch" aktuellen Homepage auch eine Laufzeile drinnen, welche mir aber die neusten Thementitel eines bestimmten Forums anzeigt. Ich habe es damals so gelöst, dass ich den Code in die php Datei (bei mir index.php) geschrieben habe und die Ausgabe in die index_body.tpl.

Theoretisch müsste es eigentlich bei dir gehen, könnte mir aber vorstellen dass das hier noch fehlt, bin mir aber nicht sicher ob es damit dann geht.

Code: Alles auswählen

include($phpbb_root_path . 'common.' . $phpEx); // include the common.php file, this is important, especially for database connects.
Probier doch mal diese Abfrage:

Code: Alles auswählen

	$sql = 'SELECT datum, tipp
		FROM ' . SPRUCH_TABLE . "
		ORDER BY ID DESC";
	$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
		if ($row["datum"] == date("d.m.Y"))
		{
			echo "<p><marquee scrollamount='1' scrolldelay='5'>" . $row['tipp'] . "</marquee></p>";
		}
	}
	$db->sql_freeresult($result);



Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Vogt
Mitglied
Beiträge: 8
Registriert: 23.03.2006 23:25
Wohnort: Ulm
Kontaktdaten:

Beitrag von Vogt »

Hallo Helmut,

danke für den Hinweis, aber es klappt nicht. Es kommt eine Meldung "Fatal Error...."
In phpBB2 hatte ich den Code in die page_header.php geschrieben und da unter diesen Eintrag gemacht.

Code: Alles auswählen

$template->assign_vars(array(
  . 
  . 
 'L_TIPP_INFO' => $tipp_info,
 .
 .
);
In der overall_header.tpl habe ich dann den Platzhalter

Code: Alles auswählen

 <span class="gensmall">{L_TIPP_INFO} {TIPP_INFO}</span>
angelegt. Da hat alles geklappt.
Aber in phpBB3 finde ich noch keinen Weg.

Wenn ich es richtig verstanden habe, kann man in phpBB3 mit

Code: Alles auswählen

<!-- PHP -->
DEINCODE
<!-- ENDPHP -->
php-Code einfügen. Aber mit der DB-Abfrage klappt es nicht.

Viele Grüße
Vogt
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Vogt,

in phpBB2 habe ich es ähnlich gemacht wie du und funktioniert dort auch einwandfrei. Was für eine Fehlermeldung kam denn genau?

Ich bin mir nicht sicher, aber es könnte durchaus sein, dass mit <!-- PHP --> keine Datenbankabfrage in der html möglich ist, dann müsstest du es genauso machen, wie in phpBB2. Warum willst du es nicht genauso machen und alles in die html stopfen?

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Vogt
Mitglied
Beiträge: 8
Registriert: 23.03.2006 23:25
Wohnort: Ulm
Kontaktdaten:

Beitrag von Vogt »

Hallo Helmut,

die Fehlermeldung lautet:
Fatal error: Call to a member function sql_query() on a non-object in N:\xampp\htdocs\phpBB3\includes\template.php(527) : eval()'d code on line 149.

Nun habe ich es noch mal versucht wie in phpbb2, aber es funktioniert auch nicht.

Ich werde jetzt mal eine kleine Pause machen, um Abstand zu gewinnen. Vielleicht kommt mir noch eine Idee.

Vielen Dank
Vogt
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Beitrag von Helmut »

Hallo Vogt,

hm .....
scheint wirklich nicht zu gehen mit der Datenbankabfrage aus der html raus. Ich schau mir das nochmal genauer an, vielleicht fällt mir ja eine Lösung ein.

[EDIT]
Also ich hab das jetzt gelöst, aber es geht nicht mit <!-- PHP --> oder mit <!-- INCLUDEPHP --> weil sich damit anscheinend keine Datenbank aufrufe realisieren lassen. Die Lösung sieht jetzt wie folgt aus:

Öffne includes/funktions.php und finde

Code: Alles auswählen

// The following assigns all _common_ variables that may be used at any point in a template.
davor einfügen:

Code: Alles auswählen

	//Laufzeile
	$laufzeile = '';
	$sql = 'SELECT *
		FROM ' . SPRUCH_TABLE . "
		ORDER BY ID DESC";
	$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
	{
		if ($row["datum"] == date("d.m.Y"))
		{
			$laufzeile = $row['tipp'];
		}
	}
	$db->sql_freeresult($result);
	//-------------------------
finde etwas später:

Code: Alles auswählen

'PRIVATE_MESSAGE_INFO_UNREAD'	=> $l_privmsgs_text_unread,
darunter einfügen:

Code: Alles auswählen

		// Laufzeile
		'LAUFZEILE' 				=> $laufzeile, 
		//
Öffne includes/constants.php und finde: davor einfügen:

Code: Alles auswählen

//Laufzeile
define('SPRUCH_TABLE',		$table_prefix . 'spruch');
Öffne overall_header.html (für prosilver) und finde:

Code: Alles auswählen

<p style="display: none;"><a href="#start_here">{L_SKIP}</a></p>
darunter einfügen:

Code: Alles auswählen

<p><b><marquee scrollamount='1' scrolldelay='8'>{LAUFZEILE}</marquee></b></p>


Tabelle in der Datenbank:

Code: Alles auswählen

CREATE TABLE `phpbb3_spruch` (
  `ID` int(10) unsigned NOT NULL auto_increment,
  `tipp` text collate utf8_unicode_ci,
  `datum` char(255) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='tipps' AUTO_INCREMENT=4 ;


INSERT INTO `phpbb3_spruch` VALUES(1, 'nun geht es an eingemachte', '30.01.2008');
INSERT INTO `phpbb3_spruch` VALUES(2, 'es klappt nicht', '31.01.2008');
INSERT INTO `phpbb3_spruch` VALUES(3, 'und es klappt doch .......', '01.02.2008');
Damit müsstest du eigentlich klar kommen. Den Teil für das Style musst du halt noch entsprechend an deine Wünsche anpassen bzw. an der gewünschten Stelle einbauen.


@Dr.Death
Wenn du willst, dann kannst du daraus noch ein Snippet oder einen kleinen Mod machen.


Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Antworten

Zurück zu „[3.0.x] Styles, Templates und Grafiken“