如何获取 Typo3 内容元素图片的 Fluid 中的类别对象?
Posted
技术标签:
【中文标题】如何获取 Typo3 内容元素图片的 Fluid 中的类别对象?【英文标题】:How can I get the category object in Fluid of Typo3 Content Element Pictures? 【发布时间】:2016-11-25 08:04:07 【问题描述】:google了半天,终于可以得到Typo3 7.6 Fluid中FAL Objects的类别了。但我只能返回一个字符串。我想得到一个像 data 这样的对象。
我做什么: 排版
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
在流体中我有:
<f:for each="files" as="file">
<p>
- file.uid<br />
- <f:cObject typoscriptObjectPath="lib.category" data="fuid:file.uid" />
</p>
</f:for>
在它打印的网页上:
883Black7Small
89
2Blue7Big
90
1红色但我认为 Fluid 中的对象更好,所以我可以使用 f:for each 等。但我不知道如何返回它。
谁能帮帮我?
【问题讨论】:
Fal 对象默认没有分类关系,您是否使用扩展来对它们进行分类?还有流体中的files
变量来自哪里?您使用的是 fluid_styled_content 还是旧的 css_styled_content?
我使用了 fluid_styled_content 并且我有文件的类别。
【参考方案1】:
看起来这项任务非常棘手。 files
数组中的 file
对象是 \TYPO3\CMS\Core\Resource\FileReference
类型,其中 uid、标题或描述等属性从 \TYPO3\CMS\Core\Resource\File
类型的原始文件对象传递。 FileReference
实际上是作为模型而不是文件实现的,所以你不能扩展它。
我看到的唯一其他方法是创建一个 viewhelper,它将使用本机 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 查询,但这应该可以工作。我也希望你知道如何在你的流体模板中包含 viewhelpers,如果没有,我会提供一个例子。
【讨论】:
如何在 Fluid-Template 中使用 Viewhelper? @dimitriL $categoryRepository 必须是TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository
而不是 \TYPO3\CMS\Extbase\Domain\Model\Category
,然后才能正常工作。要在 composer 模式下自动加载 ViewHelpers 和一个不是通过 composer 安装的扩展,请查看:***.com/a/42293786/2564552以上是关于如何获取 Typo3 内容元素图片的 Fluid 中的类别对象?的主要内容,如果未能解决你的问题,请参考以下文章
我还可以使用 Fluid Powered TYPO3 滑动内容吗?
从 Flexform 上传图像后出现 Fluid TYPO3 Flux 500 错误