php TYPO3 EXT:购物车_产品:具有自身外延的外延类积

eoigrqb6  于 2023-02-15  发布在  PHP
关注(0)|答案(1)|浏览(104)

我尝试用我自己的扩展来扩展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模板的。
向你问好,约翰尼斯

ni65a41a

ni65a41a1#

您忘记将模型Map到扩展名cart_products的产品表。为此,请创建一个文件myext/Configuration/Extbase/Persistence/Classes.php并粘贴以下行:

<?php
declare(strict_types = 1);

return [
    \Vendor\myext\Domain\Model\Product\Product::class => [
        'tableName' => 'tx_cartproducts_domain_model_product_product',
    ],
];

您需要刷新所有缓存以应用此更改。
您可以在TYPO3 here中阅读更多关于持久性处理的内容。
关于你的第二个问题:您必须在TypoScript中配置模板的路径:

plugin.tx_cartproducts {
    view {
        templateRootPaths.10 = EXT:myext/Resources/Private/Templates/
        partialRootPaths.10 = EXT:myext/Resources/Private/Partials/
        layoutRootPaths.10 = EXT:myext/Resources/Private/Layouts/
    }
}

请注意这里的索引10。您可以配置多个路径。TYPO3将从配置了最高编号索引的文件夹中开始查找模板。如果该位置不存在该文件,它将从下一个较低的索引继续查找。
当你检查文件cart_products/Configuration/TypoScript/setup.typoscript时,你会发现扩展名使用了索引0,所以如果你没有提供任何模板,默认的模板将被使用。
确保文件夹和文件使用与原始扩展名相同的名称。
您可以在这里阅读更多关于TYPO3模板路径的信息

相关问题