Hallo zusammen,
ich habe zwei Tabellen, welche mittels ein dritten MM Tabelle verbunden sind.
Um genau zu sein, handelt es sich hierbei um eine Termin Tabelle und eine Location Tabelle.
Ich möchte für meine Termine in der Listenansicht die Location anzeigen lassen. Also habe ich als Label mein MM Relation Feld angegeben.
Logischerweise zeigt er mir jetzt nur die ID der MM Relation an und nicht den Titel / Namen der Location (wie bspw. Bahnhof, Markplatz etc.)
Kann ich meiner extension irgendwie beibiegen, dass er den entsprechenden Datensatz aus der Locationtabelle ausliest und im Backend anzeigt? Bei ein paar hundert Terminen wird das nur mit IDs schon abartig unübersichtlich.
Grüße
Sven
Hi,
Du kannst über das "label" Feld steuern, welches Feld der DB angezeigt wird: $TCA["ExtensionTabelleXY"]["ctrl"][label] = "FELDNAME"
Du kannst hierzu einfach dass TCA Array in der Datei ext_tables.php Deiner Extension ergänzen/modfizieren:
$TCA["user_products_main"] = array (
"ctrl" => array (
'title' => 'LLL:EXT:user_products/locallang_db.xml:user_products_main',
'label' => 'product_name',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
...
würde das nicht einfach den Titel aus dem Locallang File auslesen!?
ich bräuchte aber den Titel einer anderen Tabelle...
label untertützt keine mm-Relation. Dafür musst Du label_userFunc nutzen und das label selber generieren.
nochmal eine Nachfrage dazu. Habe das beim letzten Mal nicht weiter verfolgt, weil es dann nicht soooo wichtig war.
jetzt habe eine ähnliche, wenn auch andere Problematik.
Ich habe zwei Tabellen. Eine enthält Termine mit Namen und eine andere die Kontingente. Ist eine ganz einfache 1:1 Beziehung.
Wenn ich im Backend jetzt einfach ein Kontingent bearbeiten möchte, habe ich das Problem, dass ich nicht die Daten des zugehörigen Termins (Datum, Ort) auslesen kann. Ich sehe zwar den Namen des Termins, aber bei bis zu 20 Wiederholungen eines Termins (bei gleichem Namen) habe ich kaum eine Chance das richtige Kontingent zu treffen.
Ich würde jetzt gerne als Label Daten des Termins auslesen. (Optimalerweise: Name, Datum, Ort)
Geht sowas überhaupt? Wäre sowas via label_userFunc zu realisieren?
Grüße
Sven
So... ich habe mich mal in das Thema eingelesen und habe es eigentlich schon (fast) so, wie ich es haben wollte.
Man kann mittels der label_userFunc eigentlich so ziemlich alles auslesen, was eine Relation hat.
Falls es mal jemand sucht hier die Lösung. Zuerst muss man die ext_tables.php erweitern:
//Custom Labels
require_once(t3lib_extMgm::extPath($_EXTKEY).'class.userLabelClass.php');
// enable label_userFunc only for TYPO3 v 4.1 and higher
if (t3lib_div::int_from_ver(TYPO3_version) >= 4001000) {
$TCA['tx_meineextension']['ctrl']['label_userFunc'] = "user_LabelClass->getUserLabel";
}
wobei man den Extension key austauschen muss und dem Klassenaufrufen das "user_" voranstellen muss.
Dann erstellt man im gleichen Verzeichnis (wo auch ext_tables.php liegt) eine neue Datei (class.userLabelClass.php)
<?php
require_once(PATH_t3lib.'class.t3lib_befunc.php');
class user_LabelClass {
function getUserLabel(&$params, &$pObj) {
$id = $params['row']['uid']; //aktuelle uid
$mylabel = $params['row']['datum']; //wie oben holen wir uns den ersten Label
// die($id);
if ($id) { //zur Sicherheit...
$item = t3lib_BEfunc::getRecord('tx_meineextension_tabelle2', $id); //uid aus Tabelle holen
$params['title'] = date("d.m.Y H:i", $item['datum']).", ".$item['titel'];
} else {
$label = "Fehler";
$params[’title’] = $mylabel.', '.$label;
}
}
}
?>
fertisch... Im Endeffekt müssen hier nur die Extension Keys ausgetauscht und die Tabellennamen sowie Feldnamen korrekt gesetzt werden. Ich lasse mir erst das Datum und dann den Titel ausgeben.
Quelle: http://blog.beimax.de/2007/08/17/typo3-eigene-labels-mit-label_userfunc/
Wobei darauf zu achten ist, dass dort die Syntax falsch ist und der Grundgedanke etwas anders war.
Prinzipiell habe ich jetzt nur noch das Problem, dass ich im Backend nicht die "Suche" nutzen kann. Ich lasse mir jetzt das Datum und den Titel aus der anderen Tabelle anzeigen.
Ist es vielleicht auch möglich in den Werten zu suchen? Sprich ich gebe als Suchbegriff ein Datum ein? Oder vielleicht den Titel? Ich habe dazu leider nichts finden können.
Hallo, habe alles genauso gemacht wie hier beschrieben, jedoch habe ich mir so glauibe ich mein Typo3 zerschossen....
Bitte echt um schnelle Hilfe!! Muss mein Diplom in 3 Tagen abgeben und komme weder ins Backend noch das Frontend wird richtig dargestellt.
Habe den Code hier übernommen und angepasst.
Was passiert is das da:
http://test.opus-kulturmagazin.de/index.php?id=1
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/typo3/sysext/cms/tslib/class.tslib_fe.php on line 3219
oder beim Backend
http://test.opus-kulturmagazin.de/typo3/index.php
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/t3lib/class.t3lib_userauth.php on line 311
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/t3lib/class.t3lib_userauth.php on line 312
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/t3lib/class.t3lib_userauth.php on line 313
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/t3lib/class.t3lib_userauth.php on line 314
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web299/html/typo3/typo3conf/ext/tx_opus_archiv/class.userLabelClass.php:20) in /var/www/web299/html/typo3/typo3/index.php on line 428
Ich bekomm die Krise. Habe den Code wieder rückgängig gemacht und alles so germacht wie es war. Mist ging auch nicht. Schreibt sich die Funktion noch in irgendeine Datei????
DRINGENDE HILFE. 1000 Dank!!!
Hallo Leute,
coole Anleitung. Ich habe das Ganze mal probiert, hatte bisher aber kein Erfolg. In meiner Extension habe ich in der ext_tables.php folgendes eingetragen:
require_once(t3lib_extMgm::extPath($_EXTKEY).'class.userLabelClass.php');
$TCA[LIST_VIEW]["ctrl"]["label_userFunc"] = "user_LabelClass->getUserLabel";
LIST_VIEW müsste mit dem Namen der Listenansicht im Backend ersetzt werden, oder?
Dann habe ich im selben Verzeichnis die class.userLabelClass.php angelegt. Der Inhalt ist kurz und knackig:
<?php
require_once(PATH_t3lib.'class.t3lib_befunc.php');
class user_LabelClass {
function getUserLabel(&$params, &$pObj) {
$item = t3lib_BEfunc::getRecord('FOREIGN_TABLE', $params['row']['uid']);
$label = $item['FOREIGN_TABLE_FIELD_NAME'];
$params['title'] = $label;
}
}
?>
Der Code hat keinerlei Auswirkung. Für FOREIGN_TABLE habe ich eine bestimmte Tabelle angegeben (einfach nur der String, keine eckigen Klammern etc.). Für FOREIGN_TABLE_FIELD_NAME habe ich die Spaltenbezeichnung in der entsprechenden Tabelle gewählt. Mal dumm gefragt: was müsste sich den ändern? Wird in meiner Listenansicht im Backend die erste Spalte (die in der ext_tables via title, label etc. definiert wird) ergänzt oder wird eine weitere bestimmte Spalte geändert? Ich habe auch versucht, mit bspw. das Array $item ausgeben zu lassen, doch nirgends ändert sich was im Backend. Die ganze Funktion hat keine Auswirkungen. Den Cache habe ich bei Änderungen stets gelöscht. Hat jemand einen Tipp für mich?
Danke und viele Grüße, dabjoern