Seite 1 von 3
*_TABLE Konstanten definieren
Verfasst: 11.05.2014 15:40
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?
Re: ACP - Permissions - Sprachdateien?
Verfasst: 11.05.2014 15:44
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
Re: ACP - Permissions - Sprachdateien?
Verfasst: 11.05.2014 16:18
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
Re: ACP - Permissions - Sprachdateien?
Verfasst: 11.05.2014 17:40
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);
Re: ACP - Permissions - Sprachdateien?
Verfasst: 11.05.2014 17:50
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);
Re: *_TABLE Konstanten definieren
Verfasst: 11.05.2014 19:03
von Dr.Death
Ah... jetzt geht mir ein Licht auf....
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.
Re: *_TABLE Konstanten definieren
Verfasst: 12.05.2014 07:52
von Dr.Death
Gelöst:
im eigenen config/services.yml hinzugefügt:
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"

Re: *_TABLE Konstanten definieren
Verfasst: 11.12.2014 18:16
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
Re: *_TABLE Konstanten definieren
Verfasst: 14.12.2014 22:16
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;
Re: *_TABLE Konstanten definieren
Verfasst: 17.12.2014 01:06
von D@ve
Ich meinte nicht unbedingt Klassen und Methoden. Die findet meine IDE...
Ich meine eben genau solche Konstrukte:
Vorher:
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