2016-10-10 2 views
0

In tx_news können alle Plugin-Einstellungen auch über TypoScript eingestellt werden, indem ihre Namen zu overrideFlexformSettingsIfEmpty hinzugefügt werden. Wie der Name schon sagt, werden diese TS-basierten Einstellungen nur verwendet, wenn die entsprechenden Flexform-Felder einer Plugin-Inkarnation leer bleiben. Das ist was ich will und was ich brauche. Es ermöglicht eine grundlegende TS-Konfiguration, die in jedem Plugin-Element überschrieben werden kann.useStdWrap steht in Konflikt mit overrideFlexformSettingsIfEmpty in tx_news

Hier ist das Problem:

Da meine TS Standardwerte müssen komplexere Berechnungen, aktiviere ich auch useStdWrap für einige der tx_news Einstellungen Felder aus. Aber ich habe festgestellt, dass IMMER ein aktiver stdWrap verwendet wird - egal, ob es Flexform-Einstellungen gibt oder nicht. Wenn ich eine Flexform-Einstellung definiere, sollte sie immer die TS-Einstellungen überschreiben (unabhängig davon, wie komplex ihre Berechnung war und ob sie Standard-Wdk-Operationen beinhaltete). Ich brauche die Möglichkeit, TS stdWrap zur Berechnung von Standardwerten zu verwenden. Hier

ein Beispiel:

plugin.tx_news.settings { 
    overrideFlexformSettingsIfEmpty := addToList(categories) 
    useStdWrap := addToList(categories) 

    categories.data = GP:cat 
    categories.ifEmpty = 1 
} 

ich dieses TS erwarten würde die Kategorie einer Nachrichten-Plugin aus einem Abfrage-String-Parametern (cat) und fällt zurück in Kategorie 1, aber nur wenn es eingestellt sind keine Kategorien innerhalb des Plugins selbst gesetzt.

Aber die stdWrap Operationen (.data und .ifEmpty) immer Kick-in und es gibt keine Möglichkeit, die Flexform-Einstellungen nicht mehr zu verwenden.

Gibt es eine Möglichkeit, dies zu lösen?

Antwort

1

Es gibt keine Möglichkeit, dies für jedermann zu beheben, denn wenn es geändert würde, gäbe es andere Nachteile.

Eine Lösung wäre, den Haken zu verwenden $GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['Controller/NewsController.php']['overrideSettings'], wo Sie die Einstellungen in PHP mit allem, was Sie brauchen, manipulieren können.

+0

Hallo Georg, ich habe Ihre Antwort akzeptiert. Aber ich stimme Ihrer Einschätzung nicht zu, dass es keine Möglichkeit gibt, dies zu beheben. Ich habe meine eigene Lösung unten gepostet und alles, was es tut, könnte zu EXT News hinzugefügt werden. Sie müssen sicherstellen, dass für alle useStdWrapped-Felder ihre Einstellungen, die direkt in einem Plugin definiert sind, als Standardinhalt für das TS-Objekt festgelegt werden, das durch stdWrap verarbeitet wird. Dies steht nicht im Konflikt mit bestehenden Nachrichtenimplementierungen, da der Standardinhalt von useStdWrapped-Feldern derzeit ohnehin nicht verfügbar ist (wie in Problem [# 126] beschrieben (https://github.com/georgringer/news/issues/126)). – Jpsy

1

Ich habe Georgs akzeptierte Antwort, aber einen anderen Weg gewählt, um dieses Problem zu lösen:

ich eine PHP-Klasse erstellt haben, die die Kategorien liest und gibt zu beliebigen tx_news Einstellung Inkarnation Plugin und ermöglicht es ihnen, wieder in die useStdWrap zu fusionieren verarbeiten.

Um diesen Ansatz zu verwenden, ist es am besten, eine rudimentäre benutzerdefinierte Erweiterung zu erstellen und die PHP-Klassendatei in ihren Klassenordner zu stellen. Hier ist der Code einer solchen Klasse-Datei, wie /your_extension/Classes/TsSetupHelper.php gespeichert:

<?php 
namespace YourVendor\YourExtension; 

class TsSetupHelper { 

    /** 
    * Reference to the parent (calling) cObject set from TypoScript 
    */ 
    public $cObj; 


    /** 
    * Return the categories chosen in a tx_news plugin content element. 
    * Can be used in TS Setup to stdWrap the categories without losing the settings defined within a plugin incarnation. 
    * 
    * @param string   Empty string (no content to process) 
    * @param array   TypoScript configuration 
    * @return string   return categorie value list from plugin in page, e.g.: '1,3,4' 
    */ 
    public function getNewsPluginCategory($content, $conf) { 

     $newsPluginFlexformArr = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array($this->cObj->data['pi_flexform']); 
     $newsPluginCategories = $newsPluginFlexformArr['data']['sDEF']['lDEF']['settings.categories']['vDEF']; 

     return $newsPluginCategories; 
    } 
} 

Mit dieser Klasse vorhanden ist, können Sie in den Kategorien lesen in einer tx_news Plugin Inkarnation in TS-Setup gewählt, Verarbeite sie mit stdWrap und schiebe sie als aktualisierte Werte in das Plugin zurück.

Hier ist ein Beispiel für einen entsprechenden TS-Setup-Code.

plugin.tx_news.settings { 
    overrideFlexformSettingsIfEmpty := addToList(categories,categoryConjunction) 
    useStdWrap := addToList(categories) 
    categoryConjunction = or 

    # pre fill categories with value from plugin in page 
    categories.cObject = USER 
    categories.cObject { 
     userFunc = YourVendor\YourExtension\TsSetupHelper->getNewsPluginCategory 
    } 
    # only if no categories are chosen within plugin, 
    # use TS to define categories: 
    categories.ifEmpty { 
     # get cat from parameter in query 
     data = GP:cat 
     # ignore cat parameter if page layout 5 is chosen in page properties 
     override = 1,2,3,4,5,6,7,8,9,10 
     override.if.value.data = page:layout 
     override.if.equals = 5 
     # default categories to 3 if cat param is not set 
     ifEmpty = 3 
    } 
} 

Wir machen eine Menge schicker Sachen hier. Es ist alles als ein Beispiel gemeint. Wichtig ist, dass die Kategorieneinstellung innerhalb des Plugins Vorrang hat und alle TS-Einstellungen im Block categories.ifEmpty{...} nur dann verwendet werden, wenn keine Kategorien innerhalb des Plugins gesetzt sind.

Versionen zum Zeitpunkt des Schreibens dieses Artikels: TYPO3 7.6.11, tx_news 5.2.0

Verwandte Themen