2016-12-24 5 views
1

Ich habe eine Verlängerung mit einer Haupttabelle mit einem Kontrollkästchen, die nicht verfügbar sein sollten, wenn der Artikel bereits eine Beziehung über eine MM-Tabelle hat, die relative TCA:TYPO3 TCA Anzeigebedingung (displayCond) mit mysql MM Tabelle

'checkbox' => [ 
    'displayCond' =>'FIELD:uid:!IN:SELECT uid_foreign FROM tx_myext_object_object_mm', 
    'exclude' => 0, 
    'label' => 'checkbox', 
    'config' => [ 
    'type' => 'check', 
    'items' => [ 
     '1' => [ 
     '0' => 'LLL:EXT:lang/locallang_core.xlf:labels.enabled' 
     ] 
    ], 
    'default' => 0 
    ] 
], 

kann diese Syntax korrigiert wird oder ist es unmöglich, verfügbar ist

+0

IN erfordert einen Wert. Vielleicht versuchst du es mit einer Benutzerfunktion mit deiner Abfrageanweisung. https://docs.typo3.org/typo3cms/TCAReference/Reference/Columns/Index.html?#displaycond – jokumer

+0

@jokumer das ist 1 Schritt nützlich, mehr Code/Beispiel für einen Anfänger? Ich habe die Syntax nicht gesehen, um eine Benutzerfunktion noch eine Benutzerfunktion zu verwenden, die nicht in der Referenz ist, die du gabst – webMan

Antwort

6

da TYPO3 7.6 userFunc als Bedingung für die Anzeige (dieser Schnipsel nicht funktioniert).

In Ihrem Fall empfehle ich für Ihre TCA-Konfiguration:

'checkbox' => [ 
    'displayCond' =>'USER:VendorName\\Myext\\DisplayConditionMatcher->displayIfTxMyextObjectHasNoMMRelation', 
    'exclude' => 1, 
    'label' => 'Checkbox', 
    'config' => [ 
     'type' => 'check', 
     'default' => 0 
    ] 
], 

Und eine PHP-Klasse mit dem Namen DisplayConditionMatcher.php befindet sich in der Verlängerung EXT: myext/Klassen/mit folgendem Inhalt:

<?php 
namespace VendorName\Myext; 

/** 
* Class DisplayConditionMatcher 
* 
* @package TYPO3 
* @subpackage tx_myext 
* @author 2016 J.Kummer <typo3 et enobe dot de> 
* @copyright Copyright belongs to the respective authors 
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later 
*/ 

class DisplayConditionMatcher { 

    /** 
    * Checks for already existing mm relation of tx_myext_object 
    * Returns true, if no mm relation found 
    * 
    * @param array $configuration 
    * @param \TYPO3\CMS\Backend\Form\FormDataProvider\EvaluateDisplayConditions $evaluateDisplayConditions 
    * @return bool 
    */ 
    public function displayIfTxMyextObjectHasNoMMRelation(array $configuration, $evaluateDisplayConditions = null) 
    { 
     $result = true; 
     if (isset($configuration['record']['uid'])) { 
      $countRows = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows(
       'uid_foreign', 
       'tx_myext_object_object_mm', 
       'uid_foreign = ' . intval($configuration['record']['uid']) 
      ); 
      if ($countRows > 0) { 
       $result = false; 
      } 
     } 
     if (isset($configuration['conditionParameters'][0]) && $configuration['conditionParameters'][0] === 'negate') { 
      $result = !$result; 
     } 
     return $result; 
    } 
} 

Sie können zusätzliche Parameter, die durch einen Doppelpunkt getrennt sind, für displayCondition vom Typ userFunc übergeben, wie in TYPO3 CMS TCA Reference beschrieben. Zum Beispiel Negation, wie bereits in PHP-Klasse implementiert:

'displayCond' =>'USER:VendorName\\Myext\\DisplayConditionMatcher->displayIfTxMyextObjectHasNoMMRelation:negate', 

anpassen Namen für die Erweiterung, Pfad und Anbieter, der Ihren Bedürfnissen entspricht.

+0

Das ist ein Geschenk für Weihnachten !! Hab schöne Tage und ein frohes neues Jahr, um zu sehen, wie es gemacht wird, ist eine große Hilfe, aber nicht, weil du meine Arbeit gemacht hast !! – webMan

Verwandte Themen