*_TABLE Konstanten definieren

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

*_TABLE Konstanten definieren

Beitrag von Dr.Death »

So, stoße nun auf das nächste Thema....

Ich muss neue Konstanten hinzufügen....aber auch diesmal möchte ich keine CORE Files von phpbb 3.1 verändern.

Folgende Konstanten sollen benutzt werden:

Code: Alles auswählen

define('FORMEL_TEAMS_TABLE',         $table_prefix . 'formel_teams');
define('FORMEL_DRIVERS_TABLE',       $table_prefix . 'formel_drivers');
define('FORMEL_RACES_TABLE',         $table_prefix . 'formel_races');
define('FORMEL_TIPPS_TABLE',         $table_prefix . 'formel_tipps');
define('FORMEL_CONFIG_TABLE',        $table_prefix . 'formel_config');
define('FORMEL_WM_TABLE',            $table_prefix . 'formel_wm');
Gibt es dafür bereits auch eine Lösung?
Zuletzt geändert von nickvergessen am 11.05.2014 17:54, insgesamt 1-mal geändert.
Grund: Thema von https://www.phpbb.de/community/viewtopic.php?f=140&t=231336 abgetrennt
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: ACP - Permissions - Sprachdateien?

Beitrag von nickvergessen »

Ja, erstell eine constants.php Datei in deiner Extension und dann benutz anstelle von FORMEL_TEAMS_TABLE einfach \drdeath\formel\constants::FORMEL_TEAMS_TABLE (mit oder ohne slash am anfang musst du ausprobieren)
Alternativ legt man keine Konstante in php mehr an, sondern in der service.yml (siehe tables.yml von phpBB) und lässt sich die dann vom DIContainer geben
kein Support per PN
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: ACP - Permissions - Sprachdateien?

Beitrag von Dr.Death »

Habe jetzt mal in folgendem ext Ordner die constants angelegt:

ext / drdeath / f1webtip / constants.php

der Inhalt sieht wie folgt aus:

Code: Alles auswählen

// Additional tables
// F1 WebTipp
define('\drdeath\f1webtip\constants::FORMEL_TEAMS_TABLE',         $table_prefix . 'formel_teams');
define('\drdeath\f1webtip\constants::FORMEL_DRIVERS_TABLE',         $table_prefix . 'formel_drivers');
define('\drdeath\f1webtip\constants::FORMEL_RACES_TABLE',         $table_prefix . 'formel_races');
define('\drdeath\f1webtip\constants::FORMEL_TIPS_TABLE',         $table_prefix . 'formel_tips');
define('\drdeath\f1webtip\constants::FORMEL_CONFIG_TABLE',         $table_prefix . 'formel_config');
define('\drdeath\f1webtip\constants::FORMEL_WM_TABLE',             $table_prefix . 'formel_wm');
// F1 WebTipp End   
Allerdings werden die neuen Konstanten im meinem ACP Modul nicht erkannt:

Code: Alles auswählen

                        $sql = 'TRUNCATE TABLE ' . FORMEL_TIPS_TABLE;
                        $result = $db->sql_query($sql); 
Ergibt einen Fehler, da die Tabelle nicht gefunden wird.

SQL ERROR [ mysqli ]

Table 'phpbb31.formel_tips_table' doesn't exist [1146]

SQL

TRUNCATE TABLE FORMEL_TIPS_TABLE

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/phpbb/db/driver/driver.php
LINE: 745
CALL: trigger_error()

FILE: [ROOT]/phpbb/db/driver/mysqli.php
LINE: 172
CALL: phpbb\db\driver\driver->sql_error()

FILE: [ROOT]/ext/drdeath/f1webtip/acp/main_module.php
LINE: 40
CALL: phpbb\db\driver\mysqli->sql_query()

FILE: [ROOT]/includes/functions_module.php
LINE: 644
CALL: drdeath\f1webtip\acp\main_module->main()

FILE: [ROOT]/adm/index.php
LINE: 71
CALL: p_master->load_active()
Auch ein verschieben der constants.php in meinen Ordner "includes" bringt keine Besserung
ext / drdeath / f1webtip / includes / constants.php
Gast234254
Gesperrt
Beiträge: 1999
Registriert: 08.02.2009 22:58

Re: ACP - Permissions - Sprachdateien?

Beitrag von Gast234254 »

Teste mal

Code: Alles auswählen

    // Additional tables
    // F1 WebTipp
    define('FORMEL_TEAMS_TABLE',         $table_prefix . 'formel_teams');
usw.

So funktioniert es in meiner Imprint Erweiterung.

[ROOT]/ext/drdeath/f1webtip/acp/main_module.php

Code: Alles auswählen

class main_module
{
	var $u_action;

	function main($id, $mode)
	{
		global $db, $user, $cache, $request, $template;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpbb_container, $phpEx;

		$this->root_path = $phpbb_root_path . 'ext/drdeath/f1webtip/';

		include($this->root_path . 'includes/constants.' . $phpEx);
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: ACP - Permissions - Sprachdateien?

Beitrag von nickvergessen »

Sorry, da hab ich mich missverständlich ausgedrückt.
constants.php sollte eine php Klasse sein, aber das mit der .yml Datei ist eigentlich der bessere Weg.
das wär dann:
config/services.yml einfach oben folgendes einfügen:

Code: Alles auswählen

parameters:
    tables.f1webtip.teams: %core.table_prefix%formel_teams
Im ACP Modul machst du dann:

Code: Alles auswählen

	global $phpbb_container; // Falls noch nicht da
	$sql = 'TRUNCATE TABLE ' . $phpbb_container->getParameter('tables.f1webtip.teams');
	$result = $db->sql_query($sql); 
kein Support per PN
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von Dr.Death »

Ah... jetzt geht mir ein Licht auf.... :cookie:

Vielen Dank, werde ich morgen oder nächste Woche mal testen..... reicht für heute....

Extension aktivieren, neue Module, Modul Berechtigungen und ACP Settings Teil ist schon mal fertig.... musste doch einige Teile umschreiben, da ich von meiner $formel_config weggehe und die globale $config nutzen möchte.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17399
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von Dr.Death »

Gelöst:

im eigenen config/services.yml hinzugefügt:

Code: Alles auswählen

imports:
    - { resource: tables.yml }
Neue Datei im eigenen config Verzeichnis angelegt:

config / tables.yml

Inhalt:

Code: Alles auswählen

parameters:
    tables.f1webtip.drivers: %core.table_prefix%formel_drivers
    tables.f1webtip.teams: %core.table_prefix%formel_teams
    tables.f1webtip.races: %core.table_prefix%formel_races
    tables.f1webtip.wm: %core.table_prefix%formel_wm
    tables.f1webtip.tips: %core.table_prefix%formel_tips
Tabellen können nun über:

Code: Alles auswählen

global $phpbb_container;

$tabelle = $phpbb_container->getParameter('tables.f1webtip.tips');
angesprochen werden.


Nochmals Danke für die Unterstützung....ist ja doch einiges "neu" :-)
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

Dr.Death hat geschrieben: Tabellen können nun über:

Code: Alles auswählen

global $phpbb_container;

$tabelle = $phpbb_container->getParameter('tables.f1webtip.tips'); 
angesprochen werden.
Gibt es da keine einfachere bzw. elegantere Lösung Konstanten (oder sonstigen Code) global einzubinden?
Für jede Tabelle so einen Sermon zu tippen empfinde ich als ziemlich umständlich.
Ich habe Mods mit über 50.000 Zeilen Code und hunderten von SQL-Queries... Da würde ich die Konstanten gerne so stehen lassen wie sie sind (wird so schon genug Arbeit, das umzuwandeln)

Das neue Extension System ist echt toll. Aber in vielen Punkten sehr unintuitv. Code-Completion meiner Entwicklungsumgebung wird da komplett ausgehebelt und kann man vergessen. Das macht imo das Leben von Entwicklern unnötig schwer.
Bisher konnte man sich, wenn man Methoden nicht versstanden hat einfach über Code-Following die Definitionen anzeigen lassen, das funktioniert bei 3.1 fast nie, da die Klassen oft über irgendwelche YML-Files eingebunden werden.

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von nickvergessen »

D@ve hat geschrieben:Gibt es da keine einfachere bzw. elegantere Lösung Konstanten (oder sonstigen Code) global einzubinden?
Für jede Tabelle so einen Sermon zu tippen empfinde ich als ziemlich umständlich.
Ich habe Mods mit über 50.000 Zeilen Code und hunderten von SQL-Queries... Da würde ich die Konstanten gerne so stehen lassen wie sie sind (wird so schon genug Arbeit, das umzuwandeln)
Du "kannst" immer noch eine Datei mit Konstanten machen, sollte man aber nicht.
da wäre es zu bevorzugen eine Klasse zu erstellen in der dann die Konstanten sind (danach einfach statisch aufrufen).
Ich würde aber schon den DI (dependency injection) weg hier verfolgen und das so machen.
D@ve hat geschrieben:Code-Completion meiner Entwicklungsumgebung wird da komplett ausgehebelt und kann man vergessen. Das macht imo das Leben von Entwicklern unnötig schwer.
Also meine IDE (phpStorm) schafft das gut, solange nicht $phpbb_container->get() verwendet wird.
Aber auch dann kann man nachhelfen, bsp:

Code: Alles auswählen

/** @var $db \phpbb\db\driver\driver_inferface */
$db = $phpbb_container->get('dbal.conn');
Und schon ist $db wieder vom gewünschten Typ und Methoden und ähnliches können getrackt werden.
Im phpBB Code an sich fehlt das jedoch, kommt aber wieder.

Wenn es sich um einen Member in ner Klasse handelt, geht das übrigens genau so:

Code: Alles auswählen

/** @var \phpbb\db\driver\driver_inferface */
protected $db;
kein Support per PN
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: *_TABLE Konstanten definieren

Beitrag von D@ve »

Ich meinte nicht unbedingt Klassen und Methoden. Die findet meine IDE...

Ich meine eben genau solche Konstrukte:


Vorher:

Code: Alles auswählen

TIPS_TABLE
Nachher:

Code: Alles auswählen

$phpbb_container->getParameter('tables.f1webtip.tips'); 
Mal ganz abgesehen davon, dass es ellenlang ist: Hier übergibt man einen String, in dem der eigentliche Tabellenname steht. Das parst keine IDE, weil der Tabellenname keine Methode oder Property ist.

Empfinde ich als einen Rückschritt, der es vielen "Moddern", die nicht so tief in die Materie einsteigen wollen/können erschwert. Viel praktischer wäre da eine Möglichkeit in einem yml-File direkt Konstanten definieren zu können, die global innerhalb der Extension ganz normal als solche verwendet werden können.

Gruß, Dave
Zuletzt geändert von D@ve am 17.12.2014 09:38, insgesamt 1-mal geändert.
There are only 10 types of people in the world: Those who understand binary, and those who don't
Antworten

Zurück zu „Extension Bastelstube“