如何在 Extbase 中检索 FAL 对象的元数据
How to retrieve meta data of a FAL Object in Extbase
在我的扩展中,我阅读了文件夹和图像。但结果总是 sys_file_metadata 的元数据丢失,我找不到如何加载它。
数据库条目在那里,因此文件已编入索引,一切似乎都正常。 BE 运行良好。
这里是一些代码:
控制器操作:
$storageId = 1;
$storageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Resource\StorageRepository');
$storage = $storageRepository->findByUid($storageId);
$singleFile = $storage->getFile('/user_upload/my_file.pdf');
$singleFile = true;
$this->view->assign('singleFile', $singleFile);
如果我执行 f:debug 它会向我显示:
Extbase Variable Dump
TYPO3\CMS\Core\Resource\Fileprototypeobject
metaDataLoaded => FALSE
metaDataProperties => array(empty)
indexingInProgress => FALSE
updatedProperties => array(empty)
indexerService => NULL
properties => array(15 items)
storage => TYPO3\CMS\Core\Resource\ResourceStorageprototypeobject
identifier => '/user_upload/my_file.pdf' (24 chars)
name => 'my_file.pdf' (11 chars)
deleted => FALSE
如您所见,有一个字段 metaDataProperties 和 metaDataLoaded,因此未加载。
有人知道怎么加载吗?
你可以尝试在流体中使用这个
{singleFile.properties.description}, {singleFile.properties.title} or {singleFile.properties.alternative}
或此获取所有属性
$singleFile->_getMetaData()
这也很有帮助
$singleFile->getProperty('description')
为了读取相关文件(由 "media" 扩展提供),一种解决方案是以下代码。这是为了完成上面评论中的问题。
private function getRelatedFiles($fileId) {
$items = array();
$resSub = 'SELECT sys_file_reference.uid_local '.
' FROM sys_file_reference LEFT JOIN sys_file_metadata ON sys_file_reference.uid_foreign = sys_file_metadata.uid LEFT JOIN sys_file ON sys_file.uid = sys_file_metadata.file '.
' WHERE sys_file.uid = '.$fileId;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('sys_file.identifier',
'sys_file',
'sys_file.uid IN ('.$resSub.')'
);
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
$items[] = $this->getDocumentStorage()->getFile($row['identifier']);
}
return $items;
}
在我的扩展中,我阅读了文件夹和图像。但结果总是 sys_file_metadata 的元数据丢失,我找不到如何加载它。
数据库条目在那里,因此文件已编入索引,一切似乎都正常。 BE 运行良好。
这里是一些代码:
控制器操作:
$storageId = 1;
$storageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Resource\StorageRepository');
$storage = $storageRepository->findByUid($storageId);
$singleFile = $storage->getFile('/user_upload/my_file.pdf');
$singleFile = true;
$this->view->assign('singleFile', $singleFile);
如果我执行 f:debug 它会向我显示:
Extbase Variable Dump
TYPO3\CMS\Core\Resource\Fileprototypeobject
metaDataLoaded => FALSE
metaDataProperties => array(empty)
indexingInProgress => FALSE
updatedProperties => array(empty)
indexerService => NULL
properties => array(15 items)
storage => TYPO3\CMS\Core\Resource\ResourceStorageprototypeobject
identifier => '/user_upload/my_file.pdf' (24 chars)
name => 'my_file.pdf' (11 chars)
deleted => FALSE
如您所见,有一个字段 metaDataProperties 和 metaDataLoaded,因此未加载。
有人知道怎么加载吗?
你可以尝试在流体中使用这个
{singleFile.properties.description}, {singleFile.properties.title} or {singleFile.properties.alternative}
或此获取所有属性
$singleFile->_getMetaData()
这也很有帮助
$singleFile->getProperty('description')
为了读取相关文件(由 "media" 扩展提供),一种解决方案是以下代码。这是为了完成上面评论中的问题。
private function getRelatedFiles($fileId) {
$items = array();
$resSub = 'SELECT sys_file_reference.uid_local '.
' FROM sys_file_reference LEFT JOIN sys_file_metadata ON sys_file_reference.uid_foreign = sys_file_metadata.uid LEFT JOIN sys_file ON sys_file.uid = sys_file_metadata.file '.
' WHERE sys_file.uid = '.$fileId;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('sys_file.identifier',
'sys_file',
'sys_file.uid IN ('.$resSub.')'
);
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
$items[] = $this->getDocumentStorage()->getFile($row['identifier']);
}
return $items;
}