[Frage] Typoscript-Setup als DisplayCond? TYPO3-Version: 6.2.7

  • mmecker mmecker
    Padawan
    0 x
    49 Beiträge
    0 Hilfreiche Beiträge
    02. 05. 2016, 10:13

    Kennt jemand einen "eingebauten" Weg, einen per Typoscript-Konstanteneditor gesetzten Wert (im konkreten Fall eine Checkbox) als displayCond für eine Flexform (oder auch TCA) zu verwenden?
    Eine bestimmte Option in der Flexform soll nur verfügbar sein, wenn ein Admin bzw. privilegierter BE-User sie zuvor freigegeben hat.
    Oder geht das tatsächlich nur per UserFunc? In diesem Fall wäre das wohl einen Feature Request wert...


  • 1
  • 0 x
    3270 Beiträge
    157 Hilfreiche Beiträge
    04. 05. 2016, 08:46

    Wenn mich nicht irre, dann arbeitet tt_news mit sowas. Dort kann in den Extensioneinstellungen (-> Extensionmanager) z.B. der Kategoriezwang gesetzt werden, d.h. maxItems>=1. Ob das aber schön/zeitgemäß gelöst ist, weiß ich nicht.

    Über TypoScript/Constants sehe ich es schwieriger. Dazu müsstest Du das TS parsen, was IMHO im Backend erstmal nicht von Haus aus geschieht.

    Kleiner Hinweis:
    das Forum hier ist leider nicht mehr so frequentiert :-(
    Für schnellere Hilfe und mehr Leser, guck mal
    - auf stackoverflow ( https://stackoverflow.com/questions/tagged/typo3 )
    - oder in die slack-Channels ( https://typo3.org/community/meet/chat-slack )

  • mmecker mmecker
    Padawan
    0 x
    49 Beiträge
    0 Hilfreiche Beiträge
    04. 05. 2016, 11:04

    Kurz mein derzeitiger Lösungsansatz:

    • Da das System noch unter 6.2 LTS läuft, braucht es den Backport [url]https://github.com/jacobsenj/display_cond_user_func[/url], um USERfuncs in displayCond verwenden zu können.
    • Die displayCond sieht dann z.B. so aus (_VENDOR und _EXTKEY jeweils durch spezifische Angaben zu ersetzen):
      <displayCond>USER:_VENDOR\_EXTKEY\Controller\BackendController->checkPdfSetting</displayCond>
    • bei dieser Art des Aufrufs werden aber die Settings im BackendController nicht automatisch injected, daher braucht es eine spezielle Methode dafür:
      1. protected function getSettings() {
      2. if(!($this->objectManager instanceof \TYPO3\CMS\Extbase\Object\ObjectManagerInterface)) {
      3. $this->objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
      4. }
      5. $extName = '_EXTKEY';
      6. if($this->request instanceof \TYPO3\CMS\Extbase\Mvc\Request) { // fuer diese Verwendung ueberfluessig, aber es gibt auch noch andere einsatzmoeglichkeiten der methode
      7. $extName = $this->request->getControllerExtensionName();
      8. }
      9.  
      10. $configurationManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface');
      11. $settings = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS,$extName);
      12. return $settings;
      13. }

    • und schließlich die eigentliche Methode
      1. /**
      2. * @return bool
      3. */
      4. public function checkPdfSetting() {
      5. if(empty($this->settings)) {
      6. $this->settings = $this->getSettings();
      7. }
      8. return (bool)$this->settings['enablePDFoutput'];
      9. }


    Allerdings holt sich der BackendConfigurationManager nun immer die Settings aus dem Root-Template, es ist also nicht möglich, unterschiedliche Einstellungen in unterschiedlichen Teilen des Seitenbaums zu haben. Um das zu lösen, muss nun noch analog zu [url]http://blog.1drop.de/en/typoscript-settings-from-different-rootpid-in-typo3-commandcontroller/[/url] ein eigener BackendConfigurationManager eingebaut werden...

    Viel Aufwand für etwas, das imho eigentlich selbstverständlich sein sollte. :'(

  • 1