Files
VITEC-website/packages/vitec/Classes/DataProcessing/VitecProductProcessor.php
2026-05-18 14:46:25 +02:00

69 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace Evomedien\Vitec\DataProcessing;
use Evomedien\Vitec\Domain\Repository\ProductRepository;
use TYPO3\CMS\Core\Service\FlexFormService;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
/**
* Simple and direct data processor for vitec_productlist
*/
class VitecProductProcessor implements DataProcessorInterface
{
public function __construct(
protected readonly ProductRepository $productRepository,
protected readonly FlexFormService $flexFormService
) {
}
public function process(
ContentObjectRenderer $cObj,
array $contentObjectConfiguration,
array $processorConfiguration,
array $processedData
): array {
// Only process vitec_productlist
if (($processedData['data']['list_type'] ?? '') !== 'vitec_productlist') {
return $processedData;
}
// Get FlexForm settings
$flexFormData = $this->flexFormService->convertFlexFormContentToArray(
$processedData['data']['pi_flexform'] ?? ''
);
$settings = $flexFormData['settings'] ?? [];
// Extract category UIDs
$categoryUids = array_filter(
array_map('intval', explode(',', (string)($settings['categories'] ?? '')))
);
// Get products
$products = $this->productRepository->findFilteredProducts($categoryUids);
// Serialize products
$productsData = [];
foreach ($products as $product) {
$productsData[] = [
'uid' => $product->getUid(),
'title' => $product->getTitle(),
'slug' => $product->getSlug(),
];
}
// Add to processedData at content level
if (!isset($processedData['content'])) {
$processedData['content'] = [];
}
$processedData['content']['products'] = $productsData;
return $processedData;
}
}