如何通过 viewhelper 从内容元素访问页面错别字中的复杂变量?

How to access complex variables in page typoscript from content element via viewhelper?

我在我的页面打字稿中使用 cobj_xpath 对象,如下所示。

lib.xpath = XPATH
lib.xpath {
   source = http://docsouth.unc.edu/southlit/poe/poe.xml
   return = string
   resultObj {
      cObjNum = 1
      1.current = 1
   }
}

page.10 = FLUIDTEMPLATE
page.10.variables {
      title < lib.xpath
      title.expression = /TEI.2/text/front/titlePage/docTitle/titlePart

      author < lib.xpath
      author.expression = /TEI.2/text/front/titlePage/docAuthor
}

我可以通过 {title} 和 {author} viewhelpers 成功访问页面模板中的 'title' 和 'author' 变量,但我无法在内容元素级别访问它们。我什至无法在 CE 级别找到它们。我对其他 COA 也有同样的问题,例如:

   taleArgument = TEXT
   taleArgument.data = GP:tale

更多信息:

我已经通过掩码扩展创建了 CE,并将其配置为在 /Resources/Mask/ 文件夹中创建所需的文件。在此文件夹中有一个 json 文件,其中包含 CE 配置和两个名为 Backend 和 Frontend 的文件夹。这些文件夹中的每一个都包含 Layout/Partial/Templates 个文件夹。我在我的一个页面中插入了由 mask 创建的 CE。我将 Frontend/Templates 中的 HTML 文件作为模板文件进行操作,我可以正确访问我在 CE 后端创建的字段,所以我想我的配置在这方面运行良好。

进一步调查:

为了摆脱外部扩展,我安装了一个新的 Typo3。然后我从头开始在我的站点包中开发了一个 CE。我的配置如下:

my_ext/Configuration/TsConfig/Page/Mod/Wizards/NewContentElement.tsconfig

mod.wizards.newContentElement.wizardItems.common {
    elements {
        my_ext_newcontentelement {
            iconIdentifier = folder-open
            title = Registration Example
            description = Create a registration form
            tt_content_defValues {
                CType = my_ext_newcontentelement
            }
        }
    }
    show := addToList(my_ext_newcontentelement)
}

my_ext/Configuration/TCA/Overrides/tt_content.php

<?php
defined('TYPO3_MODE') or die();

call_user_func(function () {

    // Adds the content element to the "Type" dropdown
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
        'tt_content',
        'CType',
        [
            'Registration Example',
            'my_ext_newcontentelement',
            'form-checkbox',
        ],
        'textmedia',
        'after'
    );

    // Configure the default backend fields for the content element
    $GLOBALS['TCA']['tt_content']['types']['my_ext_newcontentelement'] = [
        'showitem' => '
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
            --palette--;;general,
            --palette--;;headers,
            bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext_formlabel,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
            --palette--;;frames,
            --palette--;;appearanceLinks,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
            --palette--;;language,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
            --palette--;;hidden,
            --palette--;;access,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
            categories,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
            rowDescription,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
    ',
        'columnsOverrides' => [
            'bodytext' => [
                'config' => [
                    'enableRichtext' => true,
                    'richtextConfiguration' => 'default',
                ],
            ],
        ],
    ];
});

my_ext/Configuration/TypoScript/setup.typoscript

lib.contentElement {
    templateRootPaths.200 = EXT:my_ext/Resources/Private/Templates/ContentElements/
}

tt_content {
    my_ext_newcontentelement =< lib.contentElement
    my_ext_newcontentelement {
        templateName = NewContentElement
    }
}

my_ext/Resources/Private/Templates/ContentElements/NewContentElement.html:

<div>{data.bodytext -> f:format.html()}</div>

我在后端添加一个后测试了我的 CE,到目前为止它工作正常。

然后我在my_ext/Configuration/TypoScript/setup.typoscript中创建一个新变量:

page.10.variables {
    test = TEXT
    test.value = test
}

当我将 {_all} 添加到我的页面模板时,我可以看到变量:

但是当我尝试在我的 CE 模板中捕获它时,运气不佳:

TLDR:
每个流体渲染都有它自己的变量。没有 global 流体变量。


很明显,您无法从内容元素访问 test,因为 page.10.variables 的定义会导致在渲染页面模板时使用流体变量(page.10 ).

在您的内容元素中,您有一个独立的渲染,它有自己的一组变量。

同时,您经常使用流体进行某些渲染,但每个渲染都有自己的定义和变量集。

  • 整个页面呈现页面流畅

  • 每个插件都有自己的流体渲染,可能针对每个动作。尽管它们共享一个共同的扩展设置,从而导致一些共同的流体变量。

  • 每个内容元素都有一个 Fluid 渲染,尽管它们可能共享一些定义作为来自同一类型数据(tt_content 记录)的结果。 CE的种类定义了从哪个模板开始,有不同的效果图。

使用 TYPO9 和 ext:bootstrap_package(和 ext_fluid_styled_content)您可以找到:
CE 的呈现在 tt_content. 下面定义,CE 的名称作为下一个键。所有定义均基于lib.dynamicContent


如果你想访问任何独立于流体中上下文的数据,你可以使用 typoscript viewhelpers,如:

lib.text = TEXT
lib.text.value = test

lib.getText = TEXT
lib.getText.data = GP:text

流畅的通话:

<f:cObject typoscriptObjectPath="lib.text" />
{f:cObject(typoscriptObjectPath:'lib.getText')}