当前位置: 首页 > 知识库问答 >
问题:

如何克隆TYPO3扩展?

许毅
2023-03-14

我想制作一份扩展的副本,作为我自己扩展的基础。我如何克隆一个TYPO3扩展,以同样的行为开始我自己的扩展。我必须更改哪些文件和参数?

共有3个答案

阴高寒
2023-03-14

如果您想手动更改EXT-Key

对于Shell:

cp -r source_ext target_ext

无外壳:

  • 复制源_ext
  • 将源\外部\副本重命名为目标\外部\名称

重要的是要知道:

如果你的扩展目录有一个像vendor_extkey这样的_,命名空间看起来像这样:没有下划线的VendorExtkey,但是有CamelCase拼写。

ext_emconf.php:做出你的改变...这不是那么重要...

ext_localconf.php:

  • 在configurePlugin中:

至您的供应商/ExtKey。

  • 在ext_打字稿_设置中。txt:如果存在,您必须更改如下内容:
TYPO3\CMS\Extbase\Domain\Model\FrontendUser {
    subclasses {
        Tx_VendorExtkey_User = Vendor\VendorExtkey\Domain\Model\User
    }
}
Vendor\VendorExtkeyn\Domain\Model\User {
    mapping {
        tableName = fe_users
        recordType = Tx_VendorExtkey_User
    }
}

如果你有一个模型在 /Classes/Domain/Model/Yourmodel.php第一行必须看起来像这样:

<?php
namespace Vendor\ExtKey\Domain\Model;
// Directory ext_key

<?php
namespace Vendor\Extkey\Domain\Model;
// Directory extkey

在存储库中,它看起来是一样的:只需将Model更改为Repository

在ViewHelper中有点不同:只需将Domain\Model更改为ViewHelpers

在模型的任何地方,你都必须检查这样的东西:

/**
 * @param \Vendor\ExtKey\Domain\Model\Yourmodel $yourmodel
 * @return void
 */
public function addLink(\Vendor\ExtKey\Domain\Model\Yourmodel $yourmodel)
{
    ...
}

在这里,您必须使用FQCN(完全合格的类名)。其他设置保持原样。

在每个TCA/Overrides/文件中。php搜索路径:LLL:EXT:source\u EXT/Resources/Private/Language/locallang\u db。xlf并将其更改为:

LLL:EXT:target_ext/Resources/Private/Language/locallang_db.xlf

通常,您可以搜索EXT:source\u EXT并将其替换为EXT:target\u EXT。

通常在这里你会发现这样的东西:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('source_ext','Configuration/TypoScript','Extension Name');

将源文本更改为目标文本。请参阅此处有关addStaticFile的更多信息。

// Register Plugin
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    'Vendor.ExtKey',
    'Plugin Name',
    'Plugin Title'
);

更多关于registerPlugin的信息。如果sys_模板和tt_内容中的部分不存在,请查看ext_表。php-

这里只需将EXT:source\u EXT更改为EXT:target\u EXT。

如果你体内有这样的东西:

## Override storagePid for UserGroups
Vendor\SourceExt\Domain\Model\UserGroup {
    newRecordStoragePid = {$plugin.tx_sourceext.settings.groupStoragePid}

只需将供应商和SourceExt更改为CamelCase拼写即可。

如果在其中使用ViewHelper,则只需迁移名称空间。应出现在第一行中。

{命名空间短代码=Vendor\SourceExt\ViewHelper}更改为{命名空间短代码=NewVendor\TargetExt\ViewHelper}

我希望我能帮忙。如果我忘了什么,请留下评论。

支嘉祥
2023-03-14

虽然您可以克隆现有扩展并更改扩展键、插件名称、名称空间、数据库表等(在大多数情况下,简单的搜索/替换可能有效,但请确保区分大小写!)。。。

但是,您是否考虑过使用extension_builder作为启动新扩展的替代方案?对于8.7版本,使用github的extension_builder。

叶健柏
2023-03-14

你可以看看github上的这个脚本:https://github.com/colorcube/typo3_clone_extension

基本上,你必须替换扩展键的所有实例,例如“my_ext”,以及包含该键的文件名。

 类似资料:
  • 为了在处理JavaScript对象时通过另一个对象继承一个对象的属性,我经常看到使用,其目的是创建一个具有另一个对象属性的对象,然后对其进行扩展。 为什么我们不能只使用与扩展对象更相关的 ? 请告诉我这两者之间的区别,以及为什么我们不能而不是这是一个昂贵的操作。

  • 问题内容: 我有一个其中包含许多bufferedimages的对象,我想创建一个新对象,将所有bufferedimages复制到新对象中,但是这些新图像可能会更改,并且我不希望通过更改原始对象图像来更改新对象图像。 明白了吗? 这有可能做到吗,有人可以建议一个好方法吗?我曾经想到过getSubImage,但在某处阅读过,该子映像的任何更改都被重新关联回了父映像。 我只希望能够获得BufferedI

  • 问题内容: 如何克隆 Java并同时在Java中克隆其项目? 例如,我有: 我希望其中的对象与狗列表中的对象不同。 问题答案: 你将需要迭代这些项目,然后逐个克隆它们,然后将克隆放入结果数组中。 显然,要使该方法起作用,你将必须使你的类实现接口并重写该方法。

  • 问题内容: 如果克隆数组,我将使用 我想知道如何在nodejs中克隆对象。 问题答案: 对于不需要压缩每一滴性能的实用程序和类,我经常作弊,只是使用JSON执行深层复制: 这不是唯一的答案,也不是最优雅的答案。所有其他答案都应考虑成为生产瓶颈。但是,这是一个快速而肮脏的解决方案,非常有效,并且在大多数情况下(我会克隆属性的简单哈希值)很有用。

  • 我已经在数据库中保存了一个JPA实体。 我想拥有它的副本(具有不同的id),并修改了一些字段。 最简单的方法是什么?例如: 将它的字段设置为并持久化它会起作用吗? 我是否必须为实体创建一个克隆方法(复制除之外的所有字段)? 还有其他方法吗(比如使用克隆框架)?

  • 我有下面的java代码,当我稍后尝试访问MiscDoc对象时,它似乎是空的。我找不到答案。NotesDocument上的clone()方法。 if语句只被访问一次 我该如何解决这个问题