VITEC Import module: Products tab is now a searchable/sortable product overview. "Edit Product" opens an XLSX upload with per-field source mapping (component + cell), old/new preview and checkbox apply via DataHandler; the mapping and manual matches are persisted and preselect the next workbook. Category workbooks are detected and rejected. - new: ProductXlsxReader (PhpSpreadsheet), ProductTextImportController, Products/ProductTexts templates, 4 module routes - related products: per-pair card text in new side table tx_vitec_product_related_text (survives MM rewrites), emitted as `cardtext` in the product JSON; missing MM relations added add-only - card copy read from Body Copy (D) with fallback to CTA/Card Copy (E) - the workbooks fill either depending on row type - product detail page <title> now uses seotitle with title fallback (provider made singleton and fed from the JSON renderer) - per-user recent-search badges; last loaded workbook stored per product (tx_vitec_product_workbook), Edit Product reopens on it - composer: add phpoffice/phpspreadsheet ^5.9 - diagnostics: migrations/check_workbook.php
31 lines
862 B
PHP
31 lines
862 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Evomedien\Vitec\PageTitle;
|
|
|
|
use TYPO3\CMS\Core\PageTitle\AbstractPageTitleProvider;
|
|
use TYPO3\CMS\Core\SingletonInterface;
|
|
|
|
/**
|
|
* Singleton on purpose: whoever sets the title (ProductShowJsonRenderer in
|
|
* headless mode, ProductController in classic mode) and the
|
|
* PageTitleProviderManager that later reads it both obtain the provider via
|
|
* GeneralUtility::makeInstance(). Without the singleton those are two
|
|
* different instances and the title set here is never seen by the manager.
|
|
*/
|
|
final class ProductPageTitleProvider extends AbstractPageTitleProvider implements SingletonInterface
|
|
{
|
|
private string $seotitle = '';
|
|
|
|
public function setSeoTitle(string $seotitle): void
|
|
{
|
|
$this->seotitle = $seotitle;
|
|
}
|
|
|
|
public function getTitle(): string
|
|
{
|
|
return $this->seotitle;
|
|
}
|
|
}
|