DAM in eigene Extension einbinden [Gelöst]

  • STV STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    11. 07. 2008, 13:17

    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):

    1. $tempColumns = array(
    2. 'tx_nxsmhdam_images' => txdam_getMediaTCA('image_field', 'tx_nxsmhdam_images'),
    3. );
    4.  
    5.  
    6. t3lib_div::loadTCA('tx_nxsmh_article');
    7. t3lib_extMgm::addTCAcolumns('tx_nxsmh_article',$tempColumns,1);
    8.  
    9.  
    10. $tempSetup = $GLOBALS['T3_VAR']['ext']['dam_nxsmh']['setup'];
    11.  
    12. $TCA['tx_nxsmh_article']['types']['0']['showitem'] = str_replace(', image;', ', tx_nxsmhdam_images;', $TCA['tx_nxsmh_article']['types']['0']['showitem']);
    13. 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:

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

    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 STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    11. 07. 2008, 14:40

    So, ich bin einen Schritt weiter... :)

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

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

    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 digedag
    Jedi-Ratsmitglied
    0 x
    584 Beiträge
    3 Hilfreiche Beiträge
    14. 07. 2008, 12:33

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

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

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

  • STV STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2008, 13:13

    Hm, also ohne das

    1. "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 stefantoc...
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2008, 16:50

    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 STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2008, 16:59

    Also ich mach das so:

    1. $file = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
    2. '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',
    3. 'tx_dam_mm_ref, tx_dam',
    4. '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',
    5. '',
    6. '',
    7. '',1
    8. );
    9. $damImage = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($file);
    10. $damImage['f_path'].$damImage['f_name'];
    11. $imageI = array(
    12. 'file' => $damImage['f_path'].$damImage['f_name'],
    13. 'file.' => array(
    14. 'maxW' => '117',
    15. 'maxH'=> '119',
    16. 'minW' => '117',
    17. 'minH'=> '119'
    18. )
    19. );
    20.  
    21. #output with <img>-Tag
    22. # $image = $this->cObj->IMAGE($imageI);
    23. $image = $this->cObj->IMG_RESOURCE($imageI);

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

    Stefan.

  • digedag digedag
    Jedi-Ratsmitglied
    0 x
    584 Beiträge
    3 Hilfreiche Beiträge
    14. 07. 2008, 20:04

    Da wird aber von DAM auch schon was mitgeliefert. ;)

    1. $damPics = tx_dam_db::getReferencedFiles('tx_cfcleague_teams', $team->uid, 'dam_images');
    2. 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:

    1. $mediaClass = tx_div::makeInstanceClassName('tx_dam_media');
    2. $media = new $mediaClass($filePath);
    3. // Check DAM-Version
    4. if(method_exists($media, 'fetchFullMetaData'))
    5. $media->fetchFullMetaData();
    6. else
    7. $media->fetchFullIndex();

  • STV STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2008, 20:15

    [quote="digedag"]
    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:

    ...

    [/quote]

    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 digedag
    Jedi-Ratsmitglied
    0 x
    584 Beiträge
    3 Hilfreiche Beiträge
    15. 07. 2008, 18:34

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

    1. // Deine Version:
    2. 'columns' => array (
    3. "dam_images" => Array (
    4. "dam_images" => txdam_getMediaTCA('image_field', 'dam_images'),
    5. "exclude" => 0,
    6. "label" => "LLL:EXT:nxs_mh/locallang_db.xml:tx_nxsmh_article.image",
    7. "config" => $GLOBALS['T3_VAR']['ext']['dam']['TCA']['image_config'],
    8. ),
    9. // Meine Version
    10. 'columns' => array (
    11. '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 STV
    Padawan
    0 x
    34 Beiträge
    0 Hilfreiche Beiträge
    15. 07. 2008, 20:44

    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.