【问题标题】:Typoscript filelink - Wrap URL within linkTyposcript filelink - 在链接中包装 URL
【发布时间】:2018-07-16 22:40:59
【问题描述】:

首先,这里是排版:

20 = TEXT
20 {
 value {
  field = field_title
  wrap = |.txt
  }
 filelink {
  stdWrap.wrap = <li>|</li>  
  path = fileadmin/txt-files/
  }
 } 

我得到的结果是:

<li>
 <a href="/fileadmin/txt-files/Title.txt">
  <img src="typo3/sysext/frontend/Resources/Public/Icons/FileIcons/txt.png">
 </a>
</li>

而我需要的是:

<li>
 <a href="/fileadmin/force_download_script.php?filepath=/fileadmin/txt-files/Title.txt">
  <img src="typo3/sysext/frontend/Resources/Public/Icons/FileIcons/txt.png">
 </a>
</li>

我需要使链接可下载,而不是在浏览器中打开文件。为此我有一个force_download_script.php,但是当我这样做时:

wrap = fileadmin/force_download_script.php?filepath=|txt

filelink 不再找到该文件,而不是当前的换行。

我尝试过使用ATagBeforeWrap.wrap,但它看起来不像是为此目的而设计的。我也试过typolinkConfiguration.wrap,但没有成功。

知道如何实现这一目标吗?可以使用 COA 吗?

谢谢!

【问题讨论】:

  • 您使用的是哪个 TYPO3 版本?我不建议您使用 TYPO3 旁边的一些脚本进行下载。使用核心及其可能性!
  • 我正在使用 Typo3 7.6。我当然希望不需要脚本,但我还没有找到使用 Typoscript 的方法。然而 =)

标签: typo3 typoscript


【解决方案1】:

我不会使用脚本来执行此操作,而是使用服务器配置。如果您使用 Apache 并启用了 .htaccess,则可以将配置添加到文件所在目录中的 .htaccess 文件中。见https://css-tricks.com/snippets/htaccess/force-files-to-download-not-open-in-browser/

或者,您也可以使用HTML5 download attribute。但是 Internet Explorer 不支持此功能(但 Edge 支持)。

【讨论】:

    【解决方案2】:

    这个问题可能会变得相当复杂,但要一步一步来:

    • 如果不仅仅是复制和粘贴错误,您上面的代码可能是错误的:
      wrap = fileadmin/force_download_script.php?filepath=|.txt
      txt 之前的点不见了。
      尽管如此,如果触发 php 脚本仍然很有趣。
    • 可能由于typo3conf/LocalConfiguration.php 中的某些设置或安装工具中的某些设置导致脚本未触发。
    • 根据 TYPO3 版本,也可能根本不会触发脚本,因为现在扩展程序中需要所有脚本。这意味着您可能需要为该脚本创建一个扩展。
    • 同样,使用脚本路径简单地包装结果可能还不够,但您必须通过 TypoScript 显式调用它,也许通过将脚本包含为用户函数或 lib。

    管理面板可能有助于调试有关脚本的某些内容,但如果不是,您必须首先在自己的代码中包含一些调试输出,如果核心(临时)还不够。
    所以你必须找出你的脚本是否被触发,如果没有,是什么原因。

    【讨论】:

      【解决方案3】:

      你确定.filelink 是你要找的吗?

      .filelink 用于一组文件。对于.path 给出的文件夹中的所有文件,将生成一个链接。见manual

      根据您的描述,您想要一个包含指向单个文件的链接的文本。对于.typolink 来说,这将是一个更大的问题,您在.parameter 中指定链接。

      如果你真的想要一个包含多个文件的链接列表,每个文件都包含在你的脚本中,你需要修改.typolinkConfiguration.parameter,这将是used internaly by .filelink

      无论如何,有可能做一个包装,然后是:

      .typolinkConfiguration.parameter.wrap = /fileadmin/force_download_script.php?|
      

      也许使用.stdWrap.filelist 构建您的列表更容易,您可以在其中以任何方式使用文件名来包装您自己的href 参数以用于A 标记。

      【讨论】:

      • 我使用的是filelink 而不是typolink,因为它允许我“检查”我要链接的文件是否存在(请参阅Old post)。 typolinkConfiguration.parameter 似乎不可能:TsRef 但也许我错了…….stdWrap.filelist 是个好主意,但考虑到我的文件管理器的制作方式,很难实现。
      • .filelist 只能获取现有文件,它是一个文件夹列表。如果您的编辑器应该选择文件,则永远不要在他输入名称的文本/字符串字段中执行此操作。始终使用与 sys_file 的关系,因此文件被引用且无法删除(在 TYPO3 BE 中)
      【解决方案4】:

      要使用带有文件链接的 TYPO3 核心解决方案,您可以使用本指南:

      1. 在 TYPO3 后端中创建您想要“安全”文件的文件存储
      2. 不要设置复选框“是否公开?”在存储记录中
      3. 链接将使用 eID 和文件参数呈现
      4. 您可以查看处理这些链接的 FileDumpController:https://github.com/TYPO3/TYPO3.CMS/blob/2348992f8e3045610636666af096911436fa1c89/typo3/sysext/core/Classes/Controller/FileDumpController.php
      5. 您可以使用包含的钩子通过您的逻辑扩展此控制器。

      很遗憾,我找不到任何有关此功能的官方文档,但是当我找到一些东西或自己编写时会发布它。 ;)

      也许这对你也有帮助:https://extensions.typo3.org/extension/fal_securedownload/

      这里是官方部分,不过不多:https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Fal/Administration/Storages.html?highlight=filedumpcontroller

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 2014-07-23
        相关资源
        最近更新 更多