【问题标题】:Listing files and folders with TYPO3 extbase fluid?使用 TYPO3 extbase 流体列出文件和文件夹?
【发布时间】:2018-03-06 14:36:35
【问题描述】:

我有像

这样的文件数组
'file1.pdf',
'file2.pdf',
'file3.JPG',
'Folder1/file1.pdf',
'Folder1/Subfolder1/Subfolder-file1.txt',
'Folder2/text.txt',
'Folder2/file2.pdf'

为了获取文件和文件夹列表,我使用以下流体

<f:for each="{files}" as="userFile">
  <f:if condition="{userFile -> myext:explode(delimiter:'/') -> f:count()} == 1">
  <f:then>
    <a href="{userDirectory}{userFile}" target="_blank">{userFile}</a><br />
  </f:then>
  <f:else>
   <div class="folder">
    <f:for each="{userFile -> myext:explode(delimiter:'/')}" as="segment" iteration="itemIteration">
    <f:if condition="{itemIteration.isFirst}">
      <f:then>{segment}</f:then>
      <f:else><a href="{userDirectory}{userFile}" target="_blank">{segment}</a><br /></f:else>              
    </f:if>
   </f:for> 
  </div>    
 </f:else>
</f:if>
</f:for>    

我正在使用我自己的爆炸视图助手

我只得到列表文件和文件夹

<a href="">file1.pdf</a>
<a href="">file2.pdf</a>
<a href="">file3.JPG</a>
  <div class="folder">Folder1</div>
    <a href="">file1.pdf</a>
  <div class="folder">Folder1</div>
   <a href="">Subfolder1 
     <a href="">Subfolder-file1.txt</a>

<div class="folder">Folder2</div>
  <a href="">text.txt</a>
<div class="folder">Folder2</div>
 <a href="">file2.pdf</a>

我怎样才能像使用流体一样获得列表?

<a href="">file1.pdf</a>
<a href="">file2.pdf</a>
<a href="">file3.JPG</a>

<div class="folder">Folder1</div>
  <a href="">file1.pdf</a>
  Subfolder-file1.txt
    <a href="">Subfolder-file1.txt</a>

<div class="folder">Folder2</div>
 <a href="">text.txt</a>
 <a href="">file2.pdf</a>

有可能吗?

【问题讨论】:

  • 也许从控制器获取准备好的数组是一个更好的解决方案,这样您就可以简单地循环它们。你如何获得{files}
  • 你应该检查这个扩展:extensions.typo3.org/extension/file_list
  • 我通过 $files = \TYPO3\CMS\Core\Utility\GeneralUtility::getAllFilesAndFoldersInPath(array(), $dirPath, '', 0, 99, '');
  • @D.Vasiliev 请在下一个问题中提供 yopur TYPO3 实例的版本号。这将帮助您避免导致版本之间中断更改的失败原因

标签: typo3 fluid extbase


【解决方案1】:

在您的 Extbase 控制器中,您可以使用 TYPO3\CMS\Core\Resource\ResourceFactory 获取文件夹:

$resourceFactory = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance();
// Format [ID OF STORAGE]:[FOLDER]
$folder          = $resourceFactory->getFolderObjectFromCombinedIdentifier('1:my/directory/to/scan');
$this->view->assign('folder', $folder);

现在您可以在流体中使用以下部分来遍历文件夹:

Partial/FolderRecusive.html

<f:for each="{folder.files}" as="file">
  <a href={file.publicUrl}>{file.name}</a>
</f:for>
<f:for each={folder.subFolders} as="subFolder">
  <f:if condition="{subFolder.files -> f:count()} > 0 OR {subFolder.subFolders -> f:count()} > 0">
    <div class="folder">{subFolder.name}</div>
    <f:render partial="FolderRecursive" arguments="{folder:subFolder}" />
  </f:if>
</f:for>

在你的模板中加入这样的东西来显示文件夹:

<f:render partial="FolderRecursive" arguments="{folder:folder}" />

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多