2016-10-10 2 views
0

tx_news에서 모든 플러그인 설정은 overrideFlexformSettingsIfEmpty에 이름을 추가하여 TypoScript를 통해 설정할 수 있습니다. 이름에서 알 수 있듯이 이러한 TS 기반 설정은 플러그인 구현체의 해당 Flexform 필드가 비어있는 경우에만 사용됩니다. 이것은 내가 원하는 것과 필요한 것입니다. 이는 각 플러그인 요소 내에서 겹쳐 쓸 수있는 기본 TS 구성을 허용합니다.useStdWrap이 tx_news의 overrideFlexformSettingsIfEmpty와 충돌합니다.

지금 여기서 문제 야 : 내 TS 기본 값은 더 복잡한 계산을 필요로

, 나는 또한 tx_news 설정 필드의 일부 useStdWrap을 활성화합니다. 그러나 Flexform 설정이 있는지 여부에 관계없이 활성화 된 stdWrap이 항상 사용됩니다.

필요한 것은 TS stdWrap을 사용하여 기본값을 계산할 수 있지만 Flexform 설정이 정의되어 있으면 계산이 얼마나 복잡하고 stdWrap 작업이 포함되었는지에 관계없이 항상 TS 설정을 무시해야합니다. 여기

은 예입니다

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

    categories.data = GP:cat 
    categories.ifEmpty = 1 
} 
내가이 기대

쿼리 문자열 매개 변수 (고양이)의 소식 플러그인의 범주를 설정하고 카테고리 1로 다시 떨어 TS 하지만 경우가 플러그인 자체 내에 설정된 카테고리가 없습니다.

stdWrap 작업 (.data 및 .ifEmpty) 항상이 나오며 더 이상 Flexform 설정을 사용할 방법이 없습니다.

해결 방법이 있습니까?

답변

1

변경된 경우 다른 단점이 있기 때문에 모든이를 해결할 방법이 없습니다.

하나의 해결책은 필요한 모든 것을 가지고있는 PHP의 설정을 조작 할 수있는 후크 $GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['Controller/NewsController.php']['overrideSettings']을 사용하는 것입니다.

+0

안녕 게오르그을 tx_news, 나는 당신의 대답을 받아 들였다. 그러나 나는이 문제를 해결할 방법이 없다는 평가에 동의하지 않습니다. 내가 아래에 내 자신의 솔루션을 게시 한 모든 EXT 뉴스에 추가 할 수 있습니다. 모든 useStdWrapped 필드에 대해 플러그 인 내에서 정의 된 설정이 stdWrap을 통해 처리되는 TS 객체의 기본 내용으로 설정되어 있는지 확인해야합니다. 현재 useStdWrapped 필드의 기본 내용이 현재 문제가 있으므로 ([# 126] (https://github.com/georgringer/news/issues/126) 문제에 설명 된대로) 기존 뉴스 구현과 충돌하지 않습니다. – Jpsy

1

나는 Georgs 대답을 인정하지만,이 문제를 해결하는 또 다른 방법 선택했습니다 : 내가 읽고 화신 플러그인 주어진 tx_news의 설정 범주를 반환하고 useStdWrap에 다시 병합 할 수있는 PHP 클래스를 생성 한

을 방법.

이 접근법을 사용하려면 기본 사용자 정의 확장을 작성하고 PHP 클래스 파일을 클래스 폴더에 넣는 것이 가장 좋습니다. 여기 /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; 
    } 
} 

, 당신은 TS Setup에서 tx_news 플러그인 화신에서 선택한 카테고리에서 읽을 수는, 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 
    } 
} 

여기에 멋진 것들이 많이 있습니다. 이 모든 것은 하나의 예를 의미합니다. 중요한 부분은 플러그인 내에 카테고리 설정이 우선하며 블록 categories.ifEmpty{...}의 모든 TS 설정은 플러그인 내에 카테고리가 설정되지 않은 경우에만 사용된다는 것입니다.이 글을 쓰는 시점에서

버전 : TYPO3 7.6.11은 5.2.0