Zum Inhalt springen

Eigene Tabellen und TYPO3-API

Erstellt am 13. Mai 2004 · 1 Antwort · letzte Antwort am 19. Mai 2004

Tags: Frage

felix ·

Hallo,

ich habe ein Backend-Modul geschrieben, dass einen Stellenmarkt verwaltet. Ich habe dafür eine Tabelle mit dem Namen user_stellenmarkt in meiner von TYPO3 genutzten Datenbank angelegt wie im Tutorial "Backend Programming" gezeigt wird. Ich habe nun folgende 2 Probleme, für die ich im Netz keine Antworten gefunden habe:

1. Ich habe ein Feld categories in meiner Tabelle vom Typ "set" - also eine Liste - angelegt. Ich habe es bisher nicht geschafft, dieses Feld per TCA-Definition von TYPO3 auslesen zu lassen. Stattdessen habe ich mir eine Funktion geschrieben, die die Liste als Array per "item"-Eintrag an TYPO3 übergibt.

Gibt es keine Möglichkeit, TYPO3 ein Feld vom Typ "set" automatisch bearbeiten zu lassen?

Wie kann ich eine 2. Tabelle - user_stellenmarkt_categories einbinden, damit ich die Kategorien meinem user_stellenmarkt-TCA-Eintrag übergeben kann?

Ich habe es bereits mit "foreign_table" versucht, hatte aber leider nicht funktioniert.

2. Ich kann zwar Einträge meiner Tabelle editieren und löschen, wenn ich aber einen neuen Datensatz eingeben möchte erscheint beim speichern die folgende Fehlermeldung:

"1: Attempt to insert record on page '[root-level]' (0) where this table, user_stellenmarkt, is not allowed"

Dabei habe ich schon versucht, der Stellenmarktseite einen Benutzer zuzuweisen und das Modul über einen SysFolder aufzurufen, hat aber alles nichts genutzt...

felix ·

In der Zwischenzeit habe ich die Lösungen für meine Probleme gefunden:

1. Bei der "label"-Angabe in der TCA-Definition muss das Feld für die foreign-Tabelle eingetragen werden. Hier:

"label" => "jobcategory"

Im folgenden soll in das "select"-Feld der Tabelle klinikum_stellenmarkt die Kategorien übernommen werden, die in klinikum_stellenmarkt_categories definiert sind:

$TCA["klinikum_stellenmarkt_categories"] = Array ( 
	"ctrl" => Array (
		"label" => "jobcategory",
		"label_alt" => "sorting", 
		"tstamp" => "tstamp", 
		"crdate" => "crdate", 
		"fe_cruser_id" => "fe_cruser_id",
		"delete" => "deleted",
		"title" => "LLL:EXT:ustellenmarkt/locallang.php:title",
		"enablecolumns" => Array ("disabled" => "hidden")  
	), 
	"columns" => Array (

---------------------- SNIP ------------------------------

		"jobcategory" => Array ( 
			"label" => "LLL:EXT:klinikum_stellenmarkt/mod1/locallang.php:jobcategory",
			"config" => Array ( 
					"type" => "input", 
					"size" => "20", 
					"eval" => "required", 
					"max" => "255" 
			) 
		), 

----------------- SNIP --------------------------------

);

$TCA["klinikum_stellenmarkt"] = Array ( 
	"ctrl" => Array (
		"tstamp" => "tstamp", 
		"crdate" => "crdate", 
		"fe_cruser_id" => "fe_cruser_id",
		"delete" => "deleted",
		"title" => "LLL:EXT:klinikum_stellenmarkt/mod1/locallang.php:title",
		"enablecolumns" => Array ("disabled" => "hidden")  
	), 
	"columns" => Array (

--------------------------- SNIP ------------------------------

		"jobcategory" => Array ( 
			"label" => "LLL:EXT:klinikum_stellenmarkt/mod1/locallang.php:jobcategory",
			"config" => Array (
				"type" => "select",
				"items" => Array ( 
					Array("", "0") 
				),
				"foreign_table" => "klinikum_stellenmarkt_categories",
				"foreign_table_where" => " order by klinikum_stellenmarkt_categories.sorting",
				"default" => "1",
			)

------------------------ SNIP ---------------------------------

	)
);

2. Ich hatte die ID bei meinem Symbol nicht übergeben. Der korrekte Link, um eigene Datensätze anzulegen lautet:

<A HREF="#" onClick="' . t3lib_BEfunc::editOnClick('&edit[tx_klinikumneuigkeiten_neuigkeiten]['23']=new', $BACK_PATH, '', 1).'"><img src="'.$BACK_PATH.'gfx/new_el.gif" width=11 height=12 hspace=2 border=0 alt="New" title="New" align="top"></a> ' . $LANG->getLL('create_news') . '<br />

wobei die 23 für die ID der Seite steht, mit der das Modul aufgerufen werden soll.