小编Fox*_*Fox的帖子

TYPO3:如何通过控制器初始化操作和页面渲染器添加 css 和 js 文件?

我在控制器级别使用 TYPO3 8 的新页面渲染器通过 initializeAction 添加扩展特定的 css 和 js 文件:

public function initializeAction()
{
    $extPath = ExtensionManagementUtility::siteRelPath(
        $this->request->getControllerExtensionKey()
    );

    $extJs = $extPath . 'Resources/Public/Js/ext_booking_manager.min.js';
    $extCss = $extPath . 'Resources/Public/Css/ext_booking_manager.css';

    /** @var PageRenderer $pageRenderer */
    $pageRenderer = $this->objectManager->get(PageRenderer::class);

    $pageRenderer->addCssFile($extCss);
    $pageRenderer->addJsFooterFile(
        $extJs, 'text/javascript', false
    );
}
Run Code Online (Sandbox Code Playgroud)

这有时工作正常,但只是有时。这意味着有时 css 文件和 js 文件会被正确添加,有时如果我重新加载页面,则文件将无法正确添加。有什么不对?

对于像 TYPO3 7 这样的旧版本,我使用了类似的东西:

public function initializeAction()
{
    $extPath = ExtensionManagementUtility::siteRelPath(
        $this->request->getControllerExtensionKey()
    );

    $extJs = $extPath . 'Resources/Public/Js/ext_booking_manager.min.js';
    $GLOBALS['TSFE']->getPageRenderer()->addJsFooterFile(
        $extJs, 'text/javascript', false
    );

    parent::initializeAction();
}
Run Code Online (Sandbox Code Playgroud)

但这将不再适用于 TYPO3 8。有什么建议?

rendering typo3 webpage-rendering extbase

4
推荐指数
1
解决办法
4564
查看次数

如何避免 TYPO3 中的日期时间问题?

我创建了一个小扩展,它使用日期时间来查看一些特定事件(事件日期和事件时间),但如果我尝试从数据库获取正确的日期时间到前端,我总是会遇到麻烦。

我可以通过 TYPO3 后端设置每个事件的日期时间:

在此输入图像描述

但是如果我尝试在前端获取这个值,例如:

<f:format.date format="d.m.Y - H:i:s">{event.appointment}</f:format.date>
Run Code Online (Sandbox Code Playgroud)

那么输出不是“10.04.2016 - 08:00:00”,而是“10.04.2016 - 10:00:00”。

我怎样才能避免这种行为?我也通过安装工具设置了时区:

[SYS][phpTimeZone] = Europe/Berlin
Run Code Online (Sandbox Code Playgroud)

但我总是得到错误的日期时间。如果我尝试这样的事情:

DebugUtility::debug(new \DateTime());
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的输出:

{"date":"2016-04-09 20:23:38.000000","timezone_type":3,"timezone":"Europe\/Berlin"}
Run Code Online (Sandbox Code Playgroud)

如果我查看数据库,我可以看到存储了正确的日期时间:

在此输入图像描述

所以我不知道为什么我得到了错误的日期时间,有什么建议吗?

datetime typo3

3
推荐指数
1
解决办法
1065
查看次数

有没有办法在TYPO3的扩展安装过程中创建对象/表条目?

我想在安装扩展时创建对象.例如,我有以下两个简单的域模型:

class Product extends AbstractEntity
{
   protected $name = '';
   protected $sku = '';
   ...
}

class Location extends AbstractEntity
{
   protected $name = '';
   protected $city = '';
   ...
}
Run Code Online (Sandbox Code Playgroud)

和第三个域模型,如:

class Mapper extends AbstractEntity
{
   protected $domainModelName = '';
   protected $domainModelProperty = '';
}
Run Code Online (Sandbox Code Playgroud)

现在我想要添加这样的条目:

domain_model_name | domain_model_property
Product           | name
Product           | sku
Location          | city
....
Run Code Online (Sandbox Code Playgroud)

在扩展安装期间或直接安装之后,这样tx_foxexample_domain_model_mapper表将自动填充,这可能吗?

我知道我可以使用initializeAction,但是只有在我添加插件并访问页面等时才会生成条目,但我希望在使用插件或添加一些对象之前条目/对象已经存在.

typo3

3
推荐指数
1
解决办法
57
查看次数

TYPO3:为什么我的 PSR-14 事件侦听器注册不起作用?

我想通过 PSR-14 事件监听器注册替换旧的信号注册。所以我从 ext_localconf.php 中删除了以下内容:

ext_localconf.php

...
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \TYPO3\CMS\Extensionmanager\Utility\InstallUtility::class,
    'afterExtensionInstall',
    \My\Example\Slots\InstallUtility::class,
    'afterExtensionInstall'
);
...
Run Code Online (Sandbox Code Playgroud)

此外,我还创建了以下文件:

配置/服务.yaml

services:
  My\Example\Slots\InstallUtility:
    tags:
      - name: event.listener
        identifier: 'afterExtensionInstall'
        event: TYPO3\CMS\Core\Package\Event\AfterPackageActivationEvent
Run Code Online (Sandbox Code Playgroud)

之后,我向 My\Example\Slots\InstallUtility 添加了一个调用函数:

namespace My\Example\Slots;

use TYPO3\CMS\Core\Package\Event\AfterPackageActivationEvent;

class InstallUtility
{
    /**
     * @param AfterPackageActivationEvent $event
     */
    public function __invoke(AfterPackageActivationEvent $event): void
    {
        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('event got triggered'); die();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。如果通过扩展管理器停用我的扩展然后再次重新激活它,则不会发生任何情况。

我在这里错过了什么吗?

typo3 event-listener event-handling typo3-10.x

3
推荐指数
1
解决办法
1361
查看次数