Zum Inhalt springen

DAM in eigene Extension einbinden

Erstellt am 11. Juli 2008 · 19 Antworten · letzte Antwort am 30. Januar 2009

Tags: Frage

STV ·

Hallo Forum !

Ich erstelle gerade eine Extension, bei der sämtliche Datensätze in einer eignen Tabelle (tx_nxsmh_article) gespeichert werden (also nicht im tt_content).

Ein eigenes FE-Plugin gibt diese dann aus.

Jetzt möchte ich diese Datensätze um ein DAM-Referenz-Feld erweitern.

Ich habe schon so viel gegoogelt und gesucht, aber bisher hat noch nix geholfen, ausprobiert habe ich folgendes:

Die dam_ttcontent habe ich um folgende Einträge erweitert und als dam_nxsmh installiert (ohne Erfolg):

$tempColumns = array(
	'tx_nxsmhdam_images' => txdam_getMediaTCA('image_field', 'tx_nxsmhdam_images'),
);


t3lib_div::loadTCA('tx_nxsmh_article');
t3lib_extMgm::addTCAcolumns('tx_nxsmh_article',$tempColumns,1);


$tempSetup = $GLOBALS['T3_VAR']['ext']['dam_nxsmh']['setup'];

$TCA['tx_nxsmh_article']['types']['0']['showitem'] = str_replace(', image;', ', tx_nxsmhdam_images;', $TCA['tx_nxsmh_article']['types']['0']['showitem']);
t3lib_extMgm::addToAllTCAtypes('tx_nxsmh_article','tx_nxsmhdam_images','image','after:video');

Dann habe ich in der Hauptextension im tca.php den Image-Eintrag so geändert:

"image" => Array (	
   'tx_nxsmhdam_images' => txdam_getMediaTCA('image_field', 'tx_nxsmhdam_images'),	
   "exclude" => 0,		
   "label" => "LLL:EXT:nxs_mh/locallang_db.xml:tx_nxsmh_article.image",
),

Auch das hat nix gebracht, er bringt mir hier bei der Eingabemaske des Datensatzes "Unknown type:"...

Bitte bitte: wer kann mir hier helfen ?!!

Tausend Dank,

Stefan.

STV ·

So, ich bin einen Schritt weiter... 🙂

Mein tca.php Array für das Feld sieht jetzt so aus:

"dam_images" => Array (	
   "dam_images" => txdam_getMediaTCA('image_field', 'dam_images'),	
   "exclude" => 0,		
   "label" => "LLL:EXT:nxs_mh/locallang_db.xml:tx_nxsmh_article.image",
   "config" => $GLOBALS['T3_VAR']['ext']['dam']['TCA']['image_config'],
),

Damit wird in der Eingabemaske schön der DAM-Browser eingeblendet, auch das Speichern klappt.
Hier nur ein kleiner Schönheitsfehler:
In der Tabelle tx_dam_mm_ref steht jetzt in der Spalte "ident" nicht mein Extensionname oder so, sondern "relation_field_or_other_ident".

Ist das normal so, oder muss ich noch nachbessern?

Die mm-Relation stimmt soweit, und mich würde das auch überhaupt nicht stören, aber wenn das so nicht sein soll, hätte ich das auch gerne noch geändert!

Danke,

Stefan.

digedag ·

Also ehrlich gesagt, sieht bei mir die Einbindung etwas anders aus:

'columns' => array (
  'dam_images' => txdam_getMediaTCA('image_field', 'dam_images'),
...

Das war's schon. Die txdam_getMediaTCA liefert doch die komplette Config für das Feld.
Damit wird auch in der ref-Tabelle der richtige Ident-Wert gesetzt.

STV ·

Hm, also ohne das

"config" => $GLOBALS['T3_VAR']['ext']['dam']['TCA']['image_config'],

kommt es bei mir nur zur "Unknown type"-Fehlermeldung.

Komisch, und die fehlende Zuordnung bleibt...

Stefan.

stefantock ·

Hallo zusammen!

Ich bin im Moment ebenfalls daran, ein Frontend-Plugin zu erstellen. Bislang funktionierte es mit der "normalen" Bildeinbindung recht gut, jedoch möchte ich nun das DAM verwenden.

Nun die Eingabemaske scheint bei mir funktioniert zu haben, ich kann ein beliebiges bild auswählen. Bei der anzeige im Plugin scheint es schon schwieriger zu sein. Wie macht man das?

Bisher war immer der Dateiname (inkl. Endung) in meiner DB gespeichert worden. Nun steht dort eine Zahl (Anzahl eingefügter Bilder).

Danke im Voraus!

Gruss
Stefan

STV ·

Also ich mach das so:

$file = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
	 'tx_dam.file_name as f_name, tx_dam.file_path as f_path, tx_dam.title as f_title, tx_dam.caption as f_caption',
	'tx_dam_mm_ref, tx_dam',
	'tx_dam_mm_ref.uid_foreign='.$erg['uid'].' AND tx_dam_mm_ref.ident="relation_field_or_other_ident" AND tx_dam_mm_ref.uid_local=tx_dam.uid AND NOT tx_dam.deleted',
	'',
	'',
	'',1
	);
	$damImage = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($file);
        $damImage['f_path'].$damImage['f_name'];
	$imageI = array(
	'file' => $damImage['f_path'].$damImage['f_name'],
	'file.' => array(
	'maxW' => '117',
	'maxH'=> '119',
	'minW' => '117',
	'minH'=> '119'
	)
	);
	
#output with <img>-Tag
	# $image = $this->cObj->IMAGE($imageI);	
$image = $this->cObj->IMG_RESOURCE($imageI);

Wobei natürlich das "maxW, minW" etc. ins TS gehört... 😉

Stefan.

digedag ·

Da wird aber von DAM auch schon was mitgeliefert. 😉

$damPics = tx_dam_db::getReferencedFiles('tx_cfcleague_teams', $team->uid, 'dam_images');
list($uid, $filePath) = each($damPics['files']);

Also man übergibt den Namen der Tabelle, die UID des Records und die referenzierte Spalte. Da wird es aber bestimmt Probleme geben, wenn in der DB nur "relation_field_or_other_ident" drin steht...
Ich hab grad ein neues Projekt, wo ich auch DAM verwende. Da probiere ich die TCA-Configuration nochmal aus. Mal sehen, ob ich auf Probleme stosse.

Der $filePath wird dann wie üblich in der IMAGE-Methode von cObj verwendet.
Die Metadaten kann man dann übrigens so laden:

$mediaClass = tx_div::makeInstanceClassName('tx_dam_media');
$media = new $mediaClass($filePath);
// Check DAM-Version
if(method_exists($media, 'fetchFullMetaData'))
	$media->fetchFullMetaData();
else
	$media->fetchFullIndex();
STV ·
digedag schrieb

Da wird aber von DAM auch schon was mitgeliefert. 😉

...

Also man übergibt den Namen der Tabelle, die UID des Records und die referenzierte Spalte. Da wird es aber bestimmt Probleme geben, wenn in der DB nur "relation_field_or_other_ident" drin steht...
Ich hab grad ein neues Projekt, wo ich auch DAM verwende. Da probiere ich die TCA-Configuration nochmal aus. Mal sehen, ob ich auf Probleme stosse.

Der $filePath wird dann wie üblich in der IMAGE-Methode von cObj verwendet.
Die Metadaten kann man dann übrigens so laden:

...

Sehr cool, vielen Dank - das versuche ich Morgen gleich mal!

Und es wäre super, wenn du kurz wegen dem TCA noch bescheid gibst.

Viele Grüße,

Stefan.

digedag ·

Also die $TCA Einbindung funktioniert perfekt. Ich mach vielleicht den Unterschied zu deiner Version nochmal etwas deutlicher:

// Deine Version:
'columns' => array (
  "dam_images" => Array ( 
    "dam_images" => txdam_getMediaTCA('image_field', 'dam_images'),     
     "exclude" => 0,           
     "label" => "LLL:EXT:nxs_mh/locallang_db.xml:tx_nxsmh_article.image",
     "config" => $GLOBALS['T3_VAR']['ext']['dam']['TCA']['image_config'],
  ), 
// Meine Version
'columns' => array (
  'dam_images' => txdam_getMediaTCA('image_field', 'dam_images'),

Bei dir ist die Einbindung quasi eine Ebene zu tief und daher eigentlich vollkommen nutzlos. Das config-Array wird so nämlich gar nicht gesetzt und du bekommt den Fehler mit "Unkown Type".
Probier's mal aus. Das klappt bestimmt! 🙂

STV ·

Yeah !

Das hast du jetzt davon: du bist mein Held des Tages... 😉

Vielen vielen Dank !!

Auch die Abfrage der Bilder über getReferencedFiles klappt (natürlich) vorzüglich - aber wo finde ich denn als Anfänger diese hilfreiche Funktionen, wenn nicht über das Forum ?

Allerdings mag er mir das mit der mediaClass nicht ausführen, da schimpft er (obwohl ich div/lib nachinstalliert habe) - irgendwie finde ich die richtige Syntax für den Loader nicht...

Hast du hier vielleicht auch noch einen Tipp für mich ?

Ansonsten markiere ich den Thread jetzt als gelöst - die Anfangsfrage ist ja meisterlich beantwortet worden!

Vielen Dank,

Stefan.

digedag ·
STV schrieb

Das hast du jetzt davon: du bist mein Held des Tages... 😉

Zuviel der Ehre... #giggle#

Auch die Abfrage der Bilder über getReferencedFiles klappt (natürlich) vorzüglich - aber wo finde ich denn als Anfänger diese hilfreiche Funktionen, wenn nicht über das Forum ?

Tja, leider gibt es nur sehr spärliche Entwicklerdoku über DAM. Ich hab damals auch recht lang im Quellcode geforscht. 😉

Allerdings mag er mir das mit der mediaClass nicht ausführen, da schimpft er (obwohl ich div/lib nachinstalliert habe) - irgendwie finde ich die richtige Syntax für den Loader nicht...

Stimmt. Da hält man sich bei DAM leider noch nicht an die TYPO3 Konvention. Darum musst du die Datei doch noch manuell includen:

require_once(t3lib_extMgm::extPath('div') . 'class.tx_div.php');
require_once(t3lib_extMgm::extPath('dam') . 'lib/class.tx_dam_media.php');

Ansonsten ist das Laden der Klassen mit tx_div genial gelöst. Die DAM-Klasse müsste im Prinzip nur tx_dam_util_media heissen und es würde funktionieren. #paralyzed#

DocMcFly ·

Für alle die DAM 1.0.11 nutzen und sich wundern das es nicht so funktioniert: Vielleicht liegt es hier dran - einfach statt

require_once(t3lib_extMgm::extPath('dam').'lib/class.tx_dam_media.php');

Diese hier includen:

require_once(t3lib_extMgm::extPath('dam').'tca_media_field.php');

Ansonsten Danke dieser Thread hat mir sehr geholfen!

Gruß Clemens

digedag ·

Aufpassen! Das sind zwei verschiedene Baustellen.

require_once(t3lib_extMgm::extPath('dam').'tca_media_field.php');

Dieser include wird in der TCA benötigt. Da hat sich meines Wissens auch in der neuen Version nichts geändert.

require_once(t3lib_extMgm::extPath('dam').'lib/class.tx_dam_media.php');

Das benötigt man später, wenn man die Daten im FE ausgeben will. Auch diese Datei ist in beiden Version verfügbar. Allerdings wurde in dieser Klasse in der SVN-Version die Methode umbenannt, mit der man die Meta-Daten abfragen kann:

if(method_exists($media, 'fetchFullMetaData'))
  $media->fetchFullMetaData();
else
  $media->fetchFullIndex();

Ich finde es übrigens gut, daß sich wieder ein paar mehr Leute für DAM interessieren. Vielleicht hilft das langfristig die Weiterentwicklung der Extension zu beschleunigen. 🙂

STV ·

So,
endlich konnte ich auch das Auslesen der Metadaten versuchen.
Und: es klappt ausgezeichnet!

Danke, digedag !!!

Viele Grüße,

Stefan.

PS: Das DAM ist wirklich eine unglaublich gute und imho sehr wichtige Extension für TYPO3 - die sollte man wirklich unter keinen Umständen vernachlässigen !

STV ·

Jetzt ist mir noch etwas aufgefallen:
das "Label"-Field wird vom DAM automatisch gesetzt, wie kann ich das denn über das TCA auf meine locallang "umschreiben" ?

Danke,

Stefan.

digedag ·

Du kannst die Felder in der tca.php problemlos ändern:

$TCA['tx_cfcleague_teams']['columns']['dam_logo']['label'] = 'LLL:EXT:cfc_league/locallang_db.xml:tx_cfcleague_teams.logo';
$TCA['tx_cfcleague_teams']['columns']['dam_logo']['config']['size'] = 1;
$TCA['tx_cfcleague_teams']['columns']['dam_logo']['config']['maxitems'] = 1;

Das sollte natürlich nach dem Array der entsprechenden Tabelle stehen. 🙂

STV ·

@digedag:
wunderbar, vielen Dank !

@steffenk:
danke für den Link - wie gesagt: für mich ist das DAM eine der wichtigsten TYPO3-Extensions...

Stefan.

lorrey ·

hallo zusammen,

ich hab irgendwie die gleichen problem wie STV - aber leider klappt es nicht mit den Lösungen...

hier mein tca:

		'image' => Array (
			"dam_images" => txdam_getMediaTCA('image_field', 'dam_images'),     
			"exclude" => 0,           
			"label" => "Bild",
			"config" => $GLOBALS['T3_VAR']['ext']['dam']['TCA']['image_config'],			
		),

ohne den config teil - kommt auch bei mir "unknown type".

speichern klappt auch, aber auch hier steht in der tx_dam_mm_ref "relation_field_or_other_ident" ... was mache ich falsch?

ich benutze typo3 4.2.5 und dam 1.1.1

hoffe ihr habt einen tipp!

danke!

lorrey ·

hallo,

habs gelöst - wen es interesiert:

geht nicht:

'config' => txdam_getMediaTCA('image_field', 'dam_images')

geht!

'config' => txdam_getMediaTCA('image_config', 'dam_images')