2016-10-10 6 views
0

В tx_news все настройки плагина также можно установить с помощью TypoScript, добавив их имена в overrideFlexformSettingsIfEmpty. Как следует из названия, эти настройки на основе TS используются только в том случае, если соответствующие поля Flexform любого воплощения плагина остаются пустыми. Это то, что я хочу и что мне нужно. Он позволяет создать базовую конфигурацию TS, которая может быть перезаписана в каждом элементе плагина.useStdWrap конфликты с overrideFlexformSettingsIfEmpty в tx_news

Теперь вот проблема:

Как мои значения TS по умолчанию нужны более сложные вычисления, я также активировать useStdWrap для некоторых полей настроек tx_news. Но я обнаружил, что активный stdWrap будет использоваться ВСЕГДА - независимо от того, установлены ли настройки Flexform или нет.

Что мне нужно - это возможность использовать TS stdWrap для вычисления значений по умолчанию, но если задана настройка Flexform, она всегда должна переопределять настройки TS (независимо от того, насколько сложны их вычисления и включает ли она операции stdWrap).

Вот пример:

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

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

Я бы ожидать, что это TS установить категорию любых новостей плагин от параметра строки запроса (кошки) и падают назад к категории 1, но только если не являются категориями, установленными внутри самого плагина.

Но в stdWrap операции (.data и .ifEmpty) всегда пинок, и нет никакого способа, чтобы использовать настройки Flexform больше.

Есть ли способ решить эту проблему?

ответ

1

Невозможно исправить это для всех, потому что, если бы это было изменено, были бы и другие недостатки.

Одним из решений было бы использовать крючок $GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['Controller/NewsController.php']['overrideSettings'], где вы можете управлять настройками на PHP, имея все, что вам нужно.

+0

Привет Георг, я принял ваш ответ. Но я не согласен с вашей оценкой, что нет никакого способа исправить это. Я опубликовал свое собственное решение ниже, и все, что он может добавить в новости EXT. Вам нужно убедиться, что для всех useStdWrapped полей их настройки, определенные прямо в плагине, устанавливаются как содержимое по умолчанию для объекта TS, который обрабатывается через stdWrap. Это не будет конфликтовать с существующими новостными реализациями, так как содержимое по умолчанию useStdWrapped полей в настоящее время прерывается (как описано в выпуске [# 126] (https://github.com/georgringer/news/issues/126)). – Jpsy

1

Я принял GEORGS ответ, но выбрал другой путь решения этой проблемы:

Я создал класс PHP, который считывает и возвращает категорию настройки любого заданного tx_news плагин воплощения и позволяет объединить их обратно в useStdWrap обработать.

Чтобы использовать этот подход, лучше создать рудиментарное пользовательское расширение, и поместите файл класса PHP в его папку Classes. Вот код такого файла класса, хранятся в /your_extension/Classes/TsSetupHelper.php:

<?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; 
    } 
} 

С помощью этого класса на месте, вы можете прочитать в категориях, выбранных в tx_news плагин воплощения в настройки TS, обрабатывать их с помощью stdWrap и вставлять их обратно в плагин как обновленные значения категорий.

Ниже приведен пример соответствующего кода установки TS.

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 
    } 
} 

Мы делаем здесь много причудливых вещей. В качестве примера это все подразумевается. Важная часть состоит в том, что настройки категорий в плагине имеют приоритет, и все настройки TS в блоке categories.ifEmpty{...} используются только в том случае, если в плагине нет категорий, установленных прямо в плагине.

версии на момент написания этой статьи: TYPO3 7.6.11, tx_news 5.2.0