Tutorials
Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.
TYPO3: Filter in TCA Typ Group verwenden
Neulich habe ich das erste Mal gemerkt, dass man beim TCA Typ "group" nicht die Möglichkeit hat "foreign_table_where" zu verwenden, wie beim Typ "select". Das brachte die Schwierigkeit mit sich, dass ich eine Möglichkeit gesucht habe, den Benutzer daran zu hindern bestimmte Records auszuwählen, die nicht meinen Anforderungen entsprachen. Hierfür habe ich dann die Option "Filter" benutzt.
Diese ermöglicht es einem, eine Userfunc zu übergeben, welche dann die Liste filtert. Leider ist die Dokumentation etwas spärlich und nach mehreren Versuchen habe ich letztendlich geschafft, den Filter zu bauen.
Hier das TCA
...
'product' => [
'exclude' => 1,
'label' => 'LLL:EXT:ar_extension/Resources/Private/Language/locallang.xlf:product',
'config' => [
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'tx_arext_product',
'foreign_table' => 'tx_arext_product',
'filter' => [
[
'userFunc' => 'AR\ArExt\User\ProductFilter->doFilter',
'parameters' => [
// Paramter als Array, die man im Filter benutzen kann
]
]
],
'size' => 1,
'maxitems' => 1,
'minitems' => 0
]
],
...
Hier die Userfunc
Zur Info: Das Array Parameters ist immer mindestens mit dem Key values belegt.
<?php
namespace AR\ArExt\User;
class ProductFilter {
public function doFilter(array $parameters, $parentObject) {
$values = $parameters['values'];
$cleanValues = array();
if (is_array($values)) {
foreach ($values as $value) {
if (empty($value)) {
continue;
}
$parts = \TYPO3\CMS\Core\Utility\GeneralUtility::revExplode('_', $value, 2);
$productUid = $parts[count($parts) - 1];
$product = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecord('tx_arext_product',$productUid);
if ($product['type'] == 'standard') {
$cleanValues[] = $value;
}
}
}
return $cleanValues;
}
}
Der Filter macht nicht mehr, als alle gegebenen Records darauf zu testen, ob sie vom Typ Standard sind. Hier kann man natürlich machen, was man braucht.
Kommentare
Es gibt noch keine Kommentare. Sei der Erste!
Hinterlasse einen Kommentar