【发布时间】:2021-06-04 10:25:55
【问题描述】:
我正在尝试扩展Ext:cart 的模型。当有人从购物车页面订购产品时。我愿意接受来自用户的图片。
我已经添加了以下配置。
配置/TCA/Overrides/tx_cart_domain_model_order_item.php
<?php
$temporaryColumns = [
'images' => [
'exclude' => 0,
'label' => 'Upload Image',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('images', [
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference'
],
'maxitems' => 1,
// custom configuration for displaying fields in the overlay/reference table
// to use the imageoverlayPalette instead of the basicoverlayPalette
'foreign_match_fields' => [
'fieldname' => 'images',
'tablenames' => 'tx_cart_domain_model_order_item',
'table_local' => 'sys_file',
],
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
]
]
], $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'])
],
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
'tx_cart_domain_model_order_item',
$temporaryColumns
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
'tx_cart_domain_model_order_item',
'images',
'',
'after:comment'
);
ext_localconf.php
$dispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$dispatcher->connect(
\Extcode\Cart\Utility\OrderUtility::class,
'changeOrderItemBeforeSaving',
\vendor\myext\Utility\OrderUtility::class,
'changeOrderItemBeforeSaving'
);
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\Extcode\Cart\Domain\Model\Order\Item::class] = [
'className' => \vendor\myext\Domain\Model\Order\Item::class
];
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
->registerImplementation(
\Extcode\Cart\Domain\Model\Order\Item::class,
\vendor\myext\Domain\Model\Order\Item::class
);
配置/Extbase/Persistence/Classes.php
<?php
declare(strict_types = 1);
return [
\Extcode\Cart\Domain\Model\Order\Item::class => [
'tableName' => 'tx_cart_domain_model_order_item'
],
];
模型:Classes/Domain/Model/Order/Item.php
<?php
namespace vendor\myext\Domain\Model\Order;
/*
* This file is part of the package extcode/cart.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/
class Item extends \Extcode\Cart\Domain\Model\Order\Item
{
/**
* images
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
*/
protected $images = NULL;
/**
* __construct
*/
public function __construct() {
//Do not remove the next line: It would break the functionality
$this->initStorageObjects();
}
/**
* Initializes all ObjectStorage properties
* Do not modify this method!
* It will be rewritten on each save in the extension builder
* You may modify the constructor of this class instead
*
* @return void
*/
protected function initStorageObjects() {
$this->images = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/**
* Removes a FileReference
*
* @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageToRemove The FileReference to be removed
* @return void
*/
public function removeImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageToRemove) {
$this->images->detach($imageToRemove);
}
/**
* Returns the images
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images
*/
public function getImages() {
return $this->images;
}
/**
* Sets the images
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images
* @return void
*/
public function setImages(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $images) {
$this->images = $images;
}
}
现在,我创建了一个实用程序类来在下订单时修改 orderItem。但是,我没有得到扩展的图像字段。
<?php
namespace vendor\myext\Utility;
/*
* This file is part of the package extcode/cart.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/
use TYPO3\CMS\Core\Utility\GeneralUtility;
class OrderUtility
{
/**
* @param array $params
*
* @return array
*/
public function changeOrderItemBeforeSaving(array $params) {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($params);die;
}
}
任何人都可以指导如何使用 FAL 图像扩展任何扩展并使用独立扩展进行扩展。
【问题讨论】:
-
很久以前,Helmut 写了一篇关于通过前端创建 FAL 关系的博客文章。他的示例代码得到了扩展:github.com/helhum/upload_example
-
是的,但它是一个独立的扩展,有自己的控制器和动作。虽然我们将模型覆盖到自定义扩展,但我们没有。而且您引用的扩展名太旧了TYPO3 6!我使它与 TYPO3 8 和 TYPO3 9 兼容,但它不能正常工作。见这里:github.com/helhum/upload_example/pull/35
-
Aehm,它与 TYPO3 v10 (github.com/helhum/upload_example/commit/…) 兼容 - 它在我们的 v10 项目之一中运行良好...
标签: typo3 extbase typo3-extensions typo3-10.x