我尝试用我自己的扩展来扩展Typo3(版本11)cart_products扩展中的现有类Product,因此我已经扩展了后端和表来存储一个名为productpackagetype的新值。
下一步是在myext/Classes/Domain/Model/Product/Product.php
中实现新的class Product,如下所示:
<?php
namespace Vendor\myext\Domain\Model\Product;
class Product extends \Extcode\CartProducts\Domain\Model\Product\Product
{
protected $productpackagetype = '';
public function getProductpackagetype()
{
return $this->productpackagetype;
}
public function setProductpackagetype($productpackagetype)
{
$this->productpackagetype = $productpackagetype;
}
}
为了告诉typo3使用新的类定义,我在myext/ext_localconf.php
中尝试了以下代码
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\Extcode\CartProducts\Domain\Model\Product\Product::class] = [
'className' => \Vendor\myext\Domain\Model\Product\Product::class
];
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)
->registerImplementation(
\Extcode\CartProducts\Domain\Model\Product\Product::class,
\Vendor\myext\Domain\Model\Product\Product::class
);
只要我不向myext/ext_localconf.php
写入任何内容,前端就不会发生任何变化。但只要我添加上述代码,typo3就会出现错误503Return value of Extcode\CartProducts\Domain\Model\Product\Product::getBeVariants() must be an instance of TYPO3\CMS\Extbase\Persistence\ObjectStorage, null returned
那么什么是正确的方法来打开我的扩展类呢?也许有人可以告诉我,我是如何告诉typo3使用我的扩展私有模板show.html而不是cart_products模板的。
向你问好,约翰尼斯
1条答案
按热度按时间ni65a41a1#
您忘记将模型Map到扩展名
cart_products
的产品表。为此,请创建一个文件myext/Configuration/Extbase/Persistence/Classes.php
并粘贴以下行:您需要刷新所有缓存以应用此更改。
您可以在TYPO3 here中阅读更多关于持久性处理的内容。
关于你的第二个问题:您必须在TypoScript中配置模板的路径:
请注意这里的索引
10
。您可以配置多个路径。TYPO3将从配置了最高编号索引的文件夹中开始查找模板。如果该位置不存在该文件,它将从下一个较低的索引继续查找。当你检查文件
cart_products/Configuration/TypoScript/setup.typoscript
时,你会发现扩展名使用了索引0
,所以如果你没有提供任何模板,默认的模板将被使用。确保文件夹和文件使用与原始扩展名相同的名称。
您可以在这里阅读更多关于TYPO3模板路径的信息