Seite 1 von 2

Eigene Tabelle in constants.php definiert - Und dann?

Verfasst: 21.06.2008 20:53
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:

Verfasst: 21.06.2008 21:08
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:

Verfasst: 21.06.2008 21:08
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.

Verfasst: 21.06.2008 21:59
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

Verfasst: 23.06.2008 00:24
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)

Verfasst: 23.06.2008 16:30
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.

Verfasst: 23.06.2008 16:39
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?

Verfasst: 23.06.2008 16:44
von Boecki91
Weiter untem in der acp_board.php solltest du die Querys finden

If (dein Mod)
{
Nimm andere Tabelle
}

Verfasst: 23.06.2008 17:02
von 4seven
Hm, alles sehr vage. Ich hoffe, ich kann mich da durchkämpfen :-?

Verfasst: 26.06.2008 17:31
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....