Zum Inhalt springen

Hook Problem

Erstellt am 21. März 2007 · 32 Antworten · letzte Antwort am 23. März 2007 · Seite 2 von 2

Tags: Frage

just2b ·

wie schon vorher erwähnt, es geht nur mit einer erweiterung der jeweiligen tabellen. natürlich kannst du im hook dann auch noch in deine 2. tabelle schreiben

georg

mab82 ·

Hallo just2b,

ich werde es jetzt so machen wie du es auch empfohlen hast also mit der erweiterung der Tabellen.
Es werden Parameter per TS übergeben welche Tabellen zu erweitern sind.

Und daraufhin wird die ext_tables.sql, ext_tables.php und locallang_db.xml
der Extension modifiziert.

z.B in ext_tables.sql

#
# Table structure for table 'tt_content'
#
CREATE TABLE tt_content (
	tx_myExtension2_catsfromcontents blob NOT NULL
);

in ext_tables.php

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
$tempColumns = Array (
	"tx_myExtension2_catsfromcontents" => Array (		
		"exclude" => 1,		
		"label" => "LLL:EXT:myExtension2/locallang_db.xml:tt_content.tx_myExtension2_catsfromcontents",		
		"config" => Array (
			"type" => "select",	
			"foreign_table" => "tx_abfachbeitraege_kategorien",	
			"foreign_table_where" => "ORDER BY tx_abfachbeitraege_kategorien.uid",	
			"size" => 10,	
			"minitems" => 0,
			"maxitems" => 5,
		)
	),
);


t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_content","tx_myExtension2_catsfromcontents;;;;1-1-1");
?>

Wenn jetzt der Redakteur per TS Parameter (also die jeweiligen Tabellennamen die zu Erweitern sind) an meine Extension 'MyExtension2' übergibt,
schreibt meine Extension 'MyExtension2' die ext_tables.php, ext_tables.sql und locallang_db.xml von der 'MyExtension2' neu.
Also er fügt die jeweiligen Erweiterungszeilen für die zuständingen Tabellen hinzu.
Da normalerweise solche Datein von der Extension Kickstarter erzeugt werden wäre meine Idee von der Kickstarter Klasse 'tx_kickstarter_compilefiles' ein Objekt erzeugen und versuchen über diese Klasse diese Datein neu zu erzeugen.
Leider habe ich denn Prozess in der Datei 'tx_kickstarter_compilefiles' nicht ganz verstanden.
Hättest du da eine Idee wie ich das über so ein Objekt realisieren kann?

just2b ·

das alles ist so absolut nicht sauber!
um soviele tabellen kanns ja gar nicht gehen...
mach eine normale tabelle mit allen erweiterungen, und dann kannst du zB über eine variable im extension manager (stichwort: ext_conf_template.txt) die tabellen angeben und auf diese variable kannst du in der ext_Tables.php zurückgreifen und die felder ausgeben die in frage kommen,... alles klar?

georg

mab82 ·

Auf jeden Fall hast schon recht ist sehr unsauber was ich
vorgeschlagen hatte 🙂

Aber wenn ich ehrlich bin ist es mir nicht ganz klar deine Beschreibung,
denke habe zu viel gearbeitet diese Woche 🙂 bzw. 'ext_conf_template.txt' sagt mir im mom. nicht richtig was.

Also folgende schritte:
1.Schritt:

'mach eine normale tabelle mit allen erweiterungen'

Also eine globale Tabelle Anlegen unabhängig von jeglicher Extension und deren
Inhalt mit denn Tabellennamen der vorhandenden Extension füllen. Richtig ?

2.Schritt:

und dann kannst du zB über eine variable im extension manager (stichwort: ext_conf_template.txt) die tabellen angeben

Hier habe ich leider nichts verstanden 🙁

3.Schritt:

und auf diese variable kannst du in der ext_Tables.php zurückgreifen und die felder ausgeben die in frage kommen

Hier leider auch nichts

Hoffe die Fragerei nervt nicht, aber ist halt etwas was gelöst werden muss für denn Betrieb und ich blicke leider nicht mehr durch 🙂[/quote]

just2b ·

Ok,

also statt lieber kurz danach zu suchen eine Antwort schreiben mit "kenn mich nicht aus" 😉

Erstelle in der Extension die Datei ext_conf_template.txt mit dem Inhalt

# cat=basic; type=string; label=Development, forget it
tables = tt_address,fe_users

Nun geh in den Extension Manager zu der Ext, klick auf titel, da siehst den Eintag, klick 1x update

====
zum Auslesen
====
in der ext_tables_php

$tmp_confArr = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['deinExtKey!!']);

und dann mit

$tmp_confArr['tables']

erhältst du die Einstellungen vom Extension Manager, machst mit explode ein array draus und dann kannst du das ganze angeben, ca so

<?
$tables = explode(',',$tmp_confArr['tables']);
foreach ($tables as $key=>$value) {
  $value = trim($value);
  t3lib_div::loadTCA($value);
  t3lib_extMgm::addTCAcolumns($value,$tempColumns,1);
  t3lib_extMgm::addToAllTCAtypes($value,"tx_rggooglemap_lng;;;;1-1-1, tx_rggooglemap_lat, tx_rggooglemap_display,  tx_rggooglemap_cat2, tx_rggooglemap_ce");
}
?>

Wichtig, die Ext, in der du dich gerade befindest muss nach den installiert sein, die du erweiterst!

lg georg

mab82 ·

Vielen Dank für die ausführliche Antwort, doch habe zwar gesucht
wurde mir aber nicht so ganz klar wie und wo 😉

Aber ne schlechte Nachricht es geht irgendwie nicht.

1. 'ext_conf_template.txt' Datei angelegt mit folgendem Inhalt
# cat=basic; type=string; label=Development, forget it
tables = tx_autoren
2. Im ExtManager auf denn Titel der Ext geklickt dannach auf Update
3. In ext_tables.php
$tmp_confArr = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['meinExtKey']);
4. In der localconf.php wird folgender Eintrag erstellt
$TYPO3_CONF_VARS['EXT']['extConf']['meinExtKey'] = 'a:1:{s:6:"tables";s:26:"tx_autoren";}'; // Modified or inserted by TYPO3 Extension Manager.
// Updated by TYPO3 Extension Manager 23-03-2007 15:00:02
5. Folgendes noch in die ext_tables.php eingefügt
$tables = explode(',',$tmp_confArr['tables']);

foreach ($tables as $key=>$value) {
$value = trim($value);
t3lib_div::loadTCA($value);
t3lib_extMgm::addTCAcolumns($value,$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes($value,"tx_meineExtension_globalCats;;;;1-1-1");

}

Aber es gibt keinerlei Änderung in der Tabelle tx_autoren ich hätte jetzt gedacht das diese Tabelle um das Feld tx_meineExtension_globalCats erweitert wäre. Alle Extension waren vor dieser Extensio installiert.

Werde bald wahnsinnig ich weis nicht was ich falsch mache #angry#

just2b ·

Hallo,

- steht denn was in "$tmp_confArr['tables']" drin?
- was ist wenn du $value manuell auf tx_autoren setzt?
- tabelle selbst heißt auch tx_autoren? sicher?
- tx_meineExtension_globalCats gibts auch?

georg

mab82 ·

Habe nur fürs testen am Anfang nur tx_autoren angegeben.
Und $tmp_confArr['tables'] sowie $value liefert als Ausgabe: tx_autoren

Habe folgendes mal eingetragen:

t3lib_div::loadTCA("tt_content");
t3lib_extMgm::addTCAcolumns("tt_content",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_content","tx_abdiplExtension_cats;;;;1-1-1");

Und da ging es. Wenn ich statt $value tx_autoren schreibe und es Manuell eingebe
geht es auch nicht.
Dein Ansatz ist Perfekt genau das was ich suche, nur ich bekomme
es irgendwie nicht hin weis auch nicht Falsch mache #angry# #angry# #angry#

just2b ·

dann schau mal in die localconf.php in die extList, ob auch wirklich dort die ext, die die anderen manipuliert, nach den anderen eingetragen ist... das hat mich mal ein paar tage gekostet

georg

mab82 ·

In Localcon im Array $TYPO3_CONF_VARS['EXT']['extList'] steht als letzter Eintrag
'ab_diplExtension' also mein ExtKey.

Und in der letzten Zeile folgendes:
$TYPO3_CONF_VARS['EXT']['extConf']['ab_diplExtension'] = 'a:1:{s:6:"tables";s:26:"tx_autoren";}'; // Modified or inserted by TYPO3 Extension Manager.

just2b ·

Ich bezweifle immer noch, dass die Tabelle tx_autoren heißt, eher tx_autoren_item, was sagt phpmyadmin

georg

mab82 ·

Schau mal habe zum Testen folgendes gemacht :
Statt die tx_autoren die tt_adress manuell eingetragen

t3lib_div::loadTCA("tt_address");
t3lib_extMgm::addTCAcolumns("tt_address",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("tt_address","tx_abdiplExtension_cats;;;;1-1-1");

Inhalt von Localconf:

$TYPO3_CONF_VARS['EXT']['extConf']['ab_diplExtension'] = 'a:1:{s:6:"tables";s:10:"tt_address";}';       // Modified or inserted by TYPO3 Extension Manager.

Aber die ext_tables.sql die muss doch auch erweitert werden oder?

[/url]

just2b ·

die ext_tables.sql muss nicht erweitert werden wenn man nur schauen will ob das funkt. beim speichen eines datensatzes bekommst du natürlich schon einen fehler.

hat aber grad eben meine frage nicht beantwortet

just2b ·

schau dir mal den code an, den der kickstarter bei folgendem produziert: leg schnell ne neue ext an, erweiter dabei die tx_autoren und dann geh auf die die neue ext_tables.php.. da sthet drin wie es heißen muss

georg

mab82 ·

genau das habe ich eben gemacht, er legt für jeden neuen Eintrag eine
eigene $tempColumns an.
Somit erzeugt er in der Locallang_db.xml für jede neue Tabelle einen Eintrag.

Der Einzige Unterschied zu dem was wir gemacht haben ist das er für jeden neuen Tabellen Eintrag eine $tempColums anlegt