[Frage] Dateiauswahl im eigenen Backendmodul TYPO3-Version: 7.6.15

  • KatzenDrache KatzenDra...
    TYPO3-Anwärter
    0 x
    4 Beiträge
    0 Hilfreiche Beiträge
    03. 02. 2017, 14:48

    Hallo,

    wie kann ich es bewerkstelligen im Typo3 Backend eine Dateiauswahl im PopUp einzurichten.

    Ich habe kein TCA, da es sich hierbei nicht um modul für die Datenbank handelt.

    Wenn ich versuche die FormEngine einzubinden gibt mir die DebugConsole ein TypeError: TYPO3.settings.FormEngine is undefined zurück

    Ich binde die Formengine im default Layout ein mit

    1. <f:be.pageRenderer
    2. loadJQuery="true"
    3. jQueryNamespace="none"
    4. includeCssFiles="{
    5. 0:'{f:uri.resource(path:\'Lib/bootstrap-colorpicker/css/bootstrap-colorpicker.min.css\')}',
    6. 1:'{f:uri.resource(path:\'Css/Backend/BackendLayout/input.css\')}'
    7. }"
    8. includeRequireJsModules="{
    9. 0:'TYPO3/CMS/Backend/FormEngine',
    10. 1:'{f:uri.resource(path: \'Lib/bootstrap-colorpicker/js/bootstrap-colorpicker.min.js\')}',
    11. 2:'{f:uri.resource(path: \'Js/Backend/BackendLayout/input.js\')}'
    12. }"
    13. />

    Die dateiauswahl wollte ich wie folgt einbinden:

    1. <f:if condition="{var.header.type} == 'path'">
    2. <div class="input-group-addon">
    3. <a href="#" onclick="setFormValueOpenBrowser('file','tx_layout_web_layoutbackendlayout[scss_{var.name}]|||*|'); return false;" class="btn btn-default" title="Dateien durchblättern">
    4. test
    5. </a>
    6. </div>
    7. </f:if>

    Was mache ich falsch?


  • 1
  • jenshh jenshh
    Padawan
    0 x
    37 Beiträge
    0 Hilfreiche Beiträge
    18. 04. 2017, 17:53

    Ich stehe vor dem gleichen Problem, bin aber einen Schritt weiter.
    In meiner Controller Action habe ich folgendes:

    1. $allowed = 'gif,jpg,jpeg,tif,tiff,bmp,pcx,tga,png,pdf,ai,svg';
    2. $foreign_table = 'sys_file_reference';
    3. $objectPrefix = 'data-636-tt_content-NEW58ef3ea48c3ed282512530-image' . '-' . $foreign_table;
    4. $browserParams = 'templatepath|||' . $allowed . '|' . $objectPrefix . '|inline.checkUniqueElement||inline.importElement';
    5. $onClick = 'setFormValueOpenBrowser(' . GeneralUtility::quoteJSvalue($mode) . ', ' . GeneralUtility::quoteJSvalue($browserParams) . '); return false;';
    6. $button = '<a href="#" class="btn btn-default inlineNewRelationButton b66e2bfc095ad43b352902a3a66be505" onclick="'.$onClick.'" title="Add image">
    7. <span class="t3js-icon icon icon-size-small icon-state-default icon-actions-insert-record" data-identifier="actions-insert-record">
    8. <span class="icon-markup">
    9. <img src="/Wrage/typo3/sysext/core/Resources/Public/Icons/T3Icons/actions/actions-insert-record.svg" height="16" width="16">
    10. </span>
    11.  
    12. </span>
    13. Add image
    14. </a>
    15. ';
    16. $this->view->assign('button', $button);

    $button wird dann in meinem Template aufgerufen. Das sieht dann erst mal so aus

    1. <script type="text/javascript">
    2. /*<![CDATA[*/
    3. top.TYPO3.configuration = {PopupWindow:{height:700, width: 700}};
    4. TYPO3.lang = {};
    5. TYPO3.settings = {}
    6. <script type="text/javascript">
    7. /*RequireJS-Module-TYPO3/CMS/Backend/FormEngineb14f81e751872aa2cc8d26a5c4f3861e0ca88798*/
    8. require(["TYPO3/CMS/Backend/FormEngine"], function(FormEngine) {
    9. FormEngine.setBrowserUrl('\/meinVerzeichnis\/typo3\/index.php?route=%2Fwizard%2Frecord%2Fbrowse\u0026token=08570ee1a3390217e6b687013032746862e5689a');
    10. });

    Wichtig sind noch die TYPO3.settings. Da muss mehr stehen als oben
    Das ist erst einmal nicht schön. Zumindest wird das PopUp aber geöffnet. Allerdings weiß ich nicht, wie es jetzt weiter geht. Wenn ich eine Datei auswähle, muss sie ja auch wieder an das Hauptfenster übergeben werden. Vielleicht bist du ja mittlerweile weiter

  • 0 x
    15 Beiträge
    0 Hilfreiche Beiträge
    05. 11. 2018, 10:53

    Ich weiss, das ist alt - aber ich bin bei der Suche auf diesen Thread gestossen. Hatte dasselbe Problem (T3 8.7) und keine Lösung gefunden. Nach stundenlangem Probieren und Analysieren, hab' ich letztlich aber doch eine Lösung erarbeitet:

    Im Controller, der das Feld benötigt, im Header folgendes einfügen:

    [code]use TYPO3\CMS\Backend\Form\Element\InputLinkElement;
    use TYPO3\CMS\Backend\Form\NodeFactory;
    [/code]

    In der Funktion, die das Formular generiert, folgenden Code einfügen:

    [code]$options = [
    'renderType' => 'inputLink',
    'tableName' => 'myTable',
    'fieldName' => 'url',
    'databaseRow' => [
    'uid' => $myModel->getUid(),
    'pid' => 0
    ],
    'parameterArray' => [
    'fieldConf' => [
    'label' => 'URL',
    'config' => [
    'eval' => 'trim',
    'size' => 1024,
    ],
    ],
    'itemFormElValue' => $url,
    'itemFormElName' => 'data[myTable][editform][url]',
    'itemFormElID' => 'data[mytable][editform][url]',
    'field' => 'url',
    'fieldChangeFunc' => [
    'TBE_EDITOR_fieldChanged' => "TBE_EDITOR.fieldChanged('mytable','editform','url','data[mytable][editform][url]');"
    ],

    ];

    $nodeFactory = new NodeFactory();
    $linkField = new InputLinkElement($nodeFactory, $options);
    $urlField = $linkField->render();

    $this->view->assign('renderedUrlField', $urlField['html']);
    [/code]

    Das Formular MUSS «editform» heissen, weil gewisse sysext-Javascripts darauf referenzieren.
    MyTable ist natürlich die Tabelle, auf die der Controller zugreift.

    Im Fluid-Template, das Feld so ausgeben:

    [code]<f:format.raw>{renderedUrlField}</f:format.raw>[/code]

    Format-raw, weil die Funktion aus dem Controller HTML-Code zurückgibt.

    Im Default-Template müssen jetzt die Javascripts eingebunden werden, die das Feld benötigt:

    [code]includeJsFiles="{
    1:'/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js',
    3:'/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.inline.js',
    4:'/typo3/sysext/backend/Resources/Public/JavaScript/backend.js'
    }"

    includeRequireJsModules="{
    0:'{f:uri.resource(path:\'JavaScript/ckeditor/ckeditor.js\')}',
    3:'/typo3/sysext/backend/Resources/Public/JavaScript/backend.js',
    4:'TYPO3/CMS/Backend/FormEngine',
    5:'TYPO3/CMS/Backend/FormEngineValidation',
    7:'TYPO3/CMS/Backend/ContextMenu',
    8:'TYPO3/CMS/Backend/FormEngineReview',
    9:'{f:uri.resource(path:\'JavaScript/main.js\')}'
    }"
    [/code]

    Zu guter Letzt muss das Javascript-Modul noch aktiviert werden. Das passiert bei mir im main.js (im Javascript-Verzeichnis der Extension:

    [code]

    TYPO3.settings.FormEngine = {"formName":"editform"};

    define(['jquery', 'TYPO3/CMS/Backend/FormEngine'], function($){
    'use strict';

    $(function(){
    TYPO3.FormEngine.initialize();
    });
    });

    [/code]

    TYPO3.settings.FormEngine = {...} ist wichtig, das verhindert die Fehlermeldung, die der OP gepostet hat.

    Vielleicht hilft das hier ja jemandem ;)

    Sorry, aber die code-tags scheinen bei mir nicht zu funktioneren... :(

  • 1