Eigene Tabelle in constants.php definiert - Und dann?

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Eigene Tabelle in constants.php definiert - Und dann?

Beitrag von 4seven »

Hallo,

ich habe nach gültigem Schema eine eigene Tabelle in der constants.php definiert.

Code: Alles auswählen

define('BBCB3_TABLE',			    $table_prefix . 'bbcb3');

?>
Tabelle erstellt und befüllt.

So schön, so gut.

Mit

Code: Alles auswählen

$config['irgendein_feld']
hole ich Werte aus der Tabelle phpbb*_config. Das weiß ich nun.

Wunderbar . Doch wie hole ich nun Werte aus meiner eigenen Tabelle? :-?

Code: Alles auswählen

$bbcb3['irgendein_feld']
funktioniert nämlich nicht.

Wär warscheinlich auch zu einfach gewesen.

Muss ich da noch irgendwo was "anmelden"? :roll:
FCM
Mitglied
Beiträge: 1863
Registriert: 03.05.2006 14:47
Kontaktdaten:

Beitrag von FCM »

Ich kenne mich mit phpBB3 so gut wie gar nicht aus, da ich schlanke Software eher bevorzuge aber ich versuche es dir mal zu erklären.

Code: Alles auswählen

define('BBCB3_TABLE', $table_prefix . 'bbcb3'); 
Damit definierst du eine Konstante, welche den Namen "BBCB3_TABLE" hat. Diese hat den Wert "phpbb_bbcb3" (außer du hast einen anderen Tabellen-Prefix).

Gut, was heißt dann

Code: Alles auswählen

$config['irgendein_feld']
? Wo ist das definiert? Ganz einfach:

Hier hast du einen Code, der etwas aus der Datenbank anfragt:

Code: Alles auswählen

$sql = 'SELECT topic_id, forum_id FROM ' . POSTS_TABLE . " WHERE post_id = $post_id";

$result = $db->sql_query($sql);
$name = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
Jetzt hast du hier die Zeile ...

Code: Alles auswählen

$name = $db->sql_fetchrow($result);
.. um einen Wert aus $sql = ... aufzurufen, wurde diese definiert. In ...

Code: Alles auswählen

$sql = 'SELECT topic_id, forum_id FROM ' . POSTS_TABLE . " WHERE post_id = $post_id";
... siehst du, dass diese Zeile die Werte topic_id und forum_id abfragt.

Um diese Werte aufzurufen, schreibt man dann:

Code: Alles auswählen

$name['spaltenname']
Du willst topic_id abfragen, dann schreibst du ...

Code: Alles auswählen

$name['topic_id']
Für diese Abfragen wurde die Konstante "POSTS_TABLE" benutzt, die auf die POSTS-Tabelle verweist. Da setzt du dann einfach nur "BBCB3_TABLE" ein und die Spaltennamen.

So kannst du was neues aus einer neuen Tabelle abfragen.

Verständlich oder zu umständlich? :lol:
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Ja, du musst Deine Tabelle zentral auslesen und in ein Array packen.

Die Boardeigenen "config" wird in folgender Datei generiert:

includes/cache.php

Code: Alles auswählen

/**
* Class for grabbing/handling cached entries, extends acm_file or acm_db depending on the setup
* @package acm
*/
class cache extends acm
{
	/**
	* Get config values
	*/
	function obtain_config()
	{
		global $db;

		if (($config = $this->get('config')) !== false)
		{
			$sql = 'SELECT config_name, config_value
				FROM ' . CONFIG_TABLE . '
				WHERE is_dynamic = 1';
			$result = $db->sql_query($sql);

			while ($row = $db->sql_fetchrow($result))
			{
				$config[$row['config_name']] = $row['config_value'];
			}
			$db->sql_freeresult($result);
		}
Das Array $config wird dann wie folgt erzeugt ( Beispiel common.php )

Code: Alles auswählen

// Grab global variables, re-cache if necessary
$config = $cache->obtain_config();

Aber vielleicht hilft Dir dieser Code am Ende der includes/functions.php :

Code: Alles auswählen

function get_bbcb3_config()
{
	global $db;

	$config = array();
	$sql = 'SELECT * 
		FROM ' . BBCB3_TABLE;
	$result = $db->sql_query($sql);

	while ($row = $db->sql_fetchrow($result))
	{
		$config[$row['config_name']] = $row['config_value'];
	}
	$db->sql_freeresult($result);

	return $config;
}

In Deiner normalen Datei sollte dann ein:

Code: Alles auswählen

$bbcb3 = get_bbcb3_config();
reichen um das Array zu füllen.
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

Vielen Dank an euch beide :grin:

Da war noch eine tiefe Lücke :-?
Aber vielleicht hilft Dir dieser Code am Ende der includes/functions.php :
Mehr als :wink:
Verständlich oder zu umständlich?
Du solltest Lehrer werden :D

lg
4seven
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

Dazu hab ich noch eine Frage

In der ac_boards.php werden on-the-fly Werte in die config Tabelle geschrieben, mittels radio_button und absenden
case 'features':
$display_vars = array(
'title' => 'ACP_BOARD_FEATURES',
'vars' => array(
'legend1' => 'ACP_BOARD_FEATURES',
'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
Wie kann ich nun auf die gleiche Weise etwas, mittels radio_button und absenden, in meine selbst-definierten Tabelle schreiben?

Das hier (Beispiel)
case 'features':
$display_vars = array(
'title' => 'ACP_BOARD_FEATURES',
'vars' => array(
'legend1' => 'ACP_BOARD_FEATURES',
''.BBCB3_CONFIG_TABLE.'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_topic_notify' => array('lang' => 'ALLOW_TOPIC_NOTIFY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
blieb wirkungslos (leider)
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

du kannst doch einfach die vorhandene phpbb_conifg erweitern

Das

TABLE.'irgendwas' erfolglos bleibt ist logisch weil "irgendwas" aber auch TABLEIrgendwas nicht in der Spalte config_key auftauchen und somit auch keine config_value zugewiesen werden kann, du solltest nach switch in dem du garade die ganzen cases hast die eigentlichen Funktionen finden.


Am besten ist halt du legtst weiter Zeilen in der phpbb_conifg an z.B. bbcb3_allow_privmsg
So kannst du dieses eigendlich recht einfache System für die Configuration nutzen. Abraten würde ich dir auf jedenfall davon vorhandene Felder in ein anderes Format zu bringen.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

So gesehen funktioniert ja alles, ich dachte nur ein Mod darf nicht etliche (natürlich konforme) neue Einträge in der phpbb_config machen. Von mir aus mache ich das gern, weil wie gesagt, klappt ja hervorragend. Wenn das guideline-mäßig ok ist, gern. Macht vieles einfacher.

Dennoch bleibt die Frage offen, da ich doch gerne eigene eigene Tabelle hätte, wo noch komplexere Dinge rein sollen, wie ich das machen kann. Ich guck mir aber nochmal die case's an :-?

Oder noch einfacher: Wie schreibe ich etwas in meine Tabelle?
Muss halt noch die Basis checken. Wie ich etwas auslesen weiß ich ja jetzt, aber wie krieg ich da was rein?
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Weiter untem in der acp_board.php solltest du die Querys finden

If (dein Mod)
{
Nimm andere Tabelle
}
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

Hm, alles sehr vage. Ich hoffe, ich kann mich da durchkämpfen :-?
4seven
Mitglied
Beiträge: 5869
Registriert: 21.04.2007 06:18

Beitrag von 4seven »

So schön, so gut.

Das Abrufen und die grundsätzliche SQL-Syntax verstehe ich jetzt halbwegs.

Jetzt habe ich ein Textfeld, was mir wunderbar einen Wert aus der DB anzeigt, den ich vorher manuell eingefügt habe.

Ich hänge jetzt aber an der folgenden Stelle:

Wie realisiere ich ein Feld, das mir nicht nur den Wert anzeigt (ist ja schon realisiert),
sondern zusätzlich per Edit + Submit den veränderten Wert in die Datenbank schreibt
und, wie gehabt, auch wieder im selben Feld anzeigt?

Submit und Funktion ist soweit klar.

Doch wie sieht ein kombinierter SELECT/UPDATE Befehl aus?

Bin für jeden Ansatz dankbar....
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“