使用 Fluid 显示 Extbase FileReference

Display Extbase FileReference with Fluid

在 extbase 扩展中,我有一个 FileReference 对象。它最初是用 extension_builder 创建的。 来自模特:

/**
 * apprenticeshipDocument
 *
 @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 */
protected $apprenticeshipDocument = NULL;

等等

在前端,<f:debug>{institution.apprenticeshipDocument}</f:debug> 给我这个:

第一件事:originalResource 丢失。

其二:直接调用{institution.apprenticeshipDocument.uidLocal}时,值为NULL!虽然上面说是450

第三:假设我们可以得到uidLocal,对应sys_file.

中的uid

可搜索的解决方案:

<f:link.page pageUid="{f:uri.image(src:450)}" target="_blank">Text</f:link.page>

不指向 PDF 文件本身,而是指向 PDF 的渲染 GIF。 我想要做的就是在 link 中输出文件 (sys_file.identifier) 的路径...一定有办法,不是吗?

编辑:Jost 提供的解决方案:

<f:if condition="{institution.apprenticeshipDocument}">
    <li>
    <f:link.page pageUid="{institution.apprenticeshipDocument.originalResource.publicUrl}" target="_blank">Text</f:link.page>
    </li>
</f:if>

文件和文件引用在流体中的行为与平时略有不同:

  1. 它们是延迟加载的,因此 originalResource(Extbase 文件引用)和 originalFile(核心文件引用)值在第一次访问它们之前是 NULL。但您可以像往常一样访问它们。
  2. 无法访问 extbase 文件引用的值 uidLocal,因为它没有 getter(自 TYPO3 6.2.12 和 7.2 起)。
  3. 要获取文件的 url,请使用其 publicUrl 属性,或使用 EXT:vhs 中的 ViewHelper v:link.typolink,如下所示:

    <v:link.typolink configuration="{parameter: 'file:{uid}'}>
        Linktext
    </v:link.typolink>
    

    uid是本例中文件的id。

  4. 文件的许多属性(尤其是元数据属性)不会保存为普通对象属性,而是在内部保存到关联数组中,然后使用魔术 getter 获取。它们也是惰性加载的。因此,它们通常不会在变量转储中显示为单独的属性,并且可能根本没有设置或 NULL(与上面相同)。