如何在Typo3内容元素图片的Fluid中获取分类对象?

3

经过长时间的Google搜索,我终于能够获取Typo3 7.6 Fluid中FAL Objects的类别。但我只能返回一个字符串,我希望能够获得像{data}这样的对象。

我的做法: TypoScript

lib.category = CONTENT
lib.category {
    table=sys_category
    wrap=|
    select {
        pidInList = root,0,1 
        recursive = 99
        max=10
        selectFields=sys_category.title,sys_category.uid
        join = sys_category_record_mm on sys_category_record_mm.uid_local = sys_category.uid join sys_file_metadata on sys_file_metadata.uid = sys_category_record_mm.uid_foreign join sys_file_reference on sys_file_reference.uid_local = sys_file_metadata.file
        where.field = fuid
        where.wrap = sys_file_reference.uid=|
    }
    renderObj=COA
    renderObj {
        1=TEXT
        1.field = uid
        2=TEXT
        2.field = title
    }
}

在 Fluid 中,我有:

<f:for each="{files}" as="file">
    <p>
    - {file.uid}<br />
    - <f:cObject typoscriptObjectPath="lib.category" data="{fuid:file.uid}" />
    </p>
</f:for>

在网页上,它打印出以下内容:
  • 88
  • 3Black7Small

  • 89

  • 2Blue7Big

  • 90

  • 1Red
但我认为在Fluid中使用对象会更好,这样我就可以使用f:for each等。但我不知道如何返回它。
有人能帮帮我吗?

默认情况下,Fal对象没有类别关系,您是否使用扩展来对它们进行分类?另外,fluid中的files变量来自哪里?您是使用fluid_styled_content还是较旧的css_styled_content? - Dimitri L.
我使用fluid_styled_content,并且我有文件分类。 - Burner
1个回答

2
看起来这个任务非常棘手。在{files}数组中,file对象的类型为\TYPO3\CMS\Core\Resource\FileReference,其中像uid、title或description这样的属性是从原始文件对象\TYPO3\CMS\Core\Resource\File中传递的。FileReference实际上是作为模型而不是文件实现的,因此您无法扩展它。
我唯一看到的另一种方法是创建一个视图助手,使用本地SQL查询获取类别,并且CategoryRepository会自动将结果映射到Category模型。就像这样:
<?php
namespace Vendor\Extension\ViewHelpers;
/**
 *
 * @version $Id$
 * @copyright Dimitri Lavrenuek <lavrenuek.de>
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
 */
class GetFileCategoriesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

    /**
     * @var \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository
     * @inject
     */
    protected $categoryRepository;

    /**
     * @param int $uid 
     * @return array
     */
    public function render ($uid) {
        $query = $this->categoryRepository->createQuery();
        $sql = "SELECT sys_category.* FROM sys_category
            INNER JOIN sys_category_record_mm ON sys_category_record_mm.uid_local = sys_category.uid AND sys_category_record_mm.fieldname = 'categories' AND sys_category_record_mm.tablenames = 'sys_file_metadata'
            INNER JOIN sys_file_metadata ON  sys_category_record_mm.uid_foreign = sys_file_metadata.uid
            WHERE sys_file_metadata.file = '" . (int)$uid . "'
            AND sys_category.deleted = 0
            ORDER BY sys_category_record_mm.sorting_foreign ASC";
        return $query->statement($sql)->execute();
    }
}

我还没有测试过实际的代码,只测试了SQL查询语句,但是这应该可以工作。同时,我希望你知道如何在你的Fluid模板中包含视图助手,如果不知道,我会提供一个示例。


我该如何在我的Fluid模板中使用Viewhelper?@dimitriL - Sebastian
1
$categoryRepository 必须是 TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository 而不是 \TYPO3\CMS\Extbase\Domain\Model\Category,这样才能正常工作。如果要在 composer 模式下自动加载 ViewHelpers 并且安装的扩展程序不是通过 composer 安装的,请参考以下链接:https://stackoverflow.com/a/42293786/2564552 - spackmat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接