fab/media

TYPO3 CMS 的媒体管理系统。

安装数: 68,523

依赖项: 0

建议者: 0

安全: 0

星标: 30

关注者: 9

分支: 25

开放性问题: 43

语言:JavaScript

类型:typo3-cms-extension

6.1.5 2023-04-12 09:43 UTC

README

Media 是一个用于管理 TYPO3 CMS 6.2 资产的工具,它在 FAL 的基础上构建。文件抽象层 API 在 TYPO3 6.0 中引入,允许在 CMS 中集中处理文件。基本上,Media 提供以下功能集:

  • 资产的先进元数据处理
  • 用户友好的 BE 模块
  • 文件批量上传和后处理
  • 元数据的多语言处理
  • 与文本编辑器(RTE)集成

https://raw.github.com/fabarea/media/master/Documentation/MediaModule-01.png

BE 模块的通用视图。Media 的最新版本使用文件夹树。这可以在扩展管理器中启用/禁用。注意,可以通过点击右上角的复选框递归地浏览文件。

https://raw.github.com/fabarea/media/master/Documentation/Intro-02.png

可以通过选择下拉菜单中的可用列来显示/隐藏字段。

https://raw.github.com/fabarea/media/master/Documentation/Intro-01.png

通过标题、类别、使用情况等高级搜索文件。可以累积条件。

https://raw.github.com/fabarea/media/master/Documentation/Intro-03.png

内联编辑就像点击单元格一样简单。

https://raw.github.com/fabarea/media/master/Documentation/Intro-04.png

可以内联翻译文件。

https://raw.github.com/fabarea/media/master/Documentation/Intro-05.png

批量编辑 文件的元数据。可编辑的列顶部有编辑图标,可以编辑一批文件。

https://raw.github.com/fabarea/media/master/Documentation/Intro-06.png

将选定的数据导出到各种格式:CSV、XML、XLS

https://raw.github.com/fabarea/media/master/Documentation/Intro-07.png

一系列与文件相关的管理员工具:查找重复文件、缩略图预生成等...

https://raw.github.com/fabarea/media/master/Documentation/Intro-08.png

兼容性和维护

此包目前维护以下版本:

TYPO3 版本 | 包版本 | 分支 | 维护 |

|-----------------------|-----------------|---------|---------------| | TYPO3 11.5.x | 6.x | master | 是 | | TYPO3 11.5.x | 5.x | - | 是 | | TYPO3 10.4.x | 4.x | - | 否 | | TYPO3 6.2.x | 3.x | - | 否 | | TYPO3 6.1.x | 2.x | - | 否 | | TYPO3 6.1.x | 1.x | - | 否 |

项目信息和版本

项目主页:https://github.com/fabarea/media

在 TER 上发布的稳定版本:http://typo3.org/extensions/repository/view/media

从 Git 的开发版本

cd typ3conf/ext
git clone https://github.com/fabarea/media.git

新闻快讯也发布在 http://twitter.com/fudriot

安装

Git 仓库 或从稳定版本的 TER 下载源代码。在扩展管理器中按正常方式安装扩展。

配置

一些设置,如上传时应用的默认类别,是全局的,必须在扩展管理器中的 Media 设置中进行配置。

https://raw.github.com/fabarea/media/master/Documentation/ExtensionManager-01.png

为编辑用户在 Backend 用户组中启用正确的权限,以便它可以访问 Media 模块并能够上传文件。

https://raw.github.com/fabarea/media/master/Documentation/BackendUserGroup-01.png

此外,由于 Media 支持多存储,许多设置必须按存储进行配置。请确保它们已正确设置。对于 Media 安装后创建的新存储,它们将具有默认值。但是,对于现有存储,它们将没有值。

编辑存储的设置

https://raw.github.com/fabarea/media/master/Documentation/Manual-02.png

应用不同的上传设置

https://raw.github.com/fabarea/media/master/Documentation/Manual-03.png

为每种文件类型配置目标文件夹

https://raw.github.com/fabarea/media/master/Documentation/Manual-04.png

用户TSConfig

您可以使用选项 options.vidi.enableMediaFilePicker 来控制媒体文件选择器的显示。请注意,此选项仅在首先在扩展管理器中激活文件选择器时才会被考虑。文件选择器是用于将文件与内容元素(如图片)或其他类型记录连接的弹出窗口。然而,默认情况下,核心弹出窗口用于文件夹树的目的。在媒体弹出窗口中,由于iframe问题,不会显示文件夹树。作为提示,使用媒体中的递归浏览以检索所有文件。

# Define whether to use default file picker or the one from Media (default = 1) but
options.vidi.enableMediaFilePicker = 1

Suhosin

请注意,已激活Suhosin补丁的PHP配置将默认限制URL中允许传递的变量个数为100。此限制必须增加到140。

suhosin.get.max_vars = 140

如何在媒体模块中自定义网格

请注意,媒体BE模块由Vidi提供支持,它是一个TYPO3 CMS的列表组件。要了解更多关于Vidi以及如何配置网格的信息,请参阅网格章节

视图辅助器

显示类别X的文件列表

您可以使用视图辅助器在前端检索多个文件。假设我们想显示来自存储“1”的“png”图像列表以及相关的类别。在您的Fluid模板中的代码可能如下所示:

<strong>Number of files: {v:content.count(matches: {storage: 1}, type: 'sys_file')}</strong>

<f:if condition="{v:content.find(matches: {storage: 1}, type: 'sys_file')}">
        <ul>
                <f:for each="{v:content.find(matches: '{storage: 1}', type: 'sys_file')}" as="file">
                        <li>
                                {file.uid} -
                                {file.metadata.title} -
                                <m:file.thumbnail file="{file}" output="imageWrapped"/>

                                <f:if condition="{file.metadata.categories}}">
                                        <ul>
                                                <f:for each="{file.metadata.categories}" as="category">
                                                        <li>{category.title}</li>
                                                </f:for>
                                        </ul>
                                </f:if>
                        </li>
                </f:for>
        </ul>
</f:if>

{namespace m=Fab\Media\ViewHelpers}
{namespace v=Fab\Vidi\ViewHelpers}

这里有一个更复杂的示例,我们想检索与前面相同的文件,但属于类别1和2的所有文件,并按标题排序。我们必须提供“别名”作为解决方案,因为Fluid无法解析表达式 matches: {metadata.categories: '1,2'},并会引发异常。

<f:for each="{v:content.find(
                                        matches: {storage: 1, extension: 'png', categories: '1,2'},
                                        orderings: {title: 'ASC'},
                                        type: 'sys_file',
                                        aliases: {categories: 'metadata.categories', title: 'metadata.title'}
                                )}"
       as="file">

        <li>..</li>
</f:for>

或者

<f:for each="{v:content.find(selection: 'my-selection')}" as="file">

        <li>..</li>
</f:for>

可以通过编程方式实现相同的效果。

// Get the Content Repository for sys_file.
$contentRepository = \Fab\Vidi\Domain\Repository\ContentRepositoryFactory::getInstance('sys_file');

// Initialize a Matcher object.
/** @var \Fab\Vidi\Persistence\Matcher $matcher */
$matcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Fab\Vidi\Persistence\Matcher::class);

// Add some criteria.
$matcher->equals('storage', '1');
$matcher->equals('metadata.categories', '1'); // "metadata" correspond to the join defined in the TCA of "sys_file".

// etc... you can add more criteria as instance a "like"
$matcher->like('metadata.title', 'foo');

// Fetch the objects.
$files = $contentRepository->findBy($matcher);

缩略图视图辅助器

缩略图API旨在根据文件类型(图像、文档、视频等)独立渲染文件的预览。请注意,只有“图像”和“文档”的缩略图服务得到了良好实现。视频和音频仍在待办事项列表中。如果没有找到适当的缩略图服务,则调用后备服务生成占位符缩略图。

缩略图视图辅助器可以使用如下所示:

    # The minimum required:
    <m:file.thumbnail file="{file}"/>

    # Give more settings to the thumbnail:
    <m:file.thumbnail file="{file}"
            configuration="{width: 800, height: 800}"
            attributes="{class: 'file-thumbnail'}"
            output="image"/>

    # Required attributes:
    # --------------------
    #
    # file="{file}"

    # Default values:
    # ---------------
    #
    # configuration= array()
    # attributes = array()
    # output = image (possible values: "uri", "image", "imageWrapped")
    # preset = NULL

    # Pass some preset as for the dimension. Values can be:
    # - image_thumbnail => '100x100'  (where maximum width is 100 and maximum height is 100)
    # - image_mini => '120x120'
    # - image_small => '320x320'
    # - image_medium => '760x760'
    # - image_large => '1200x1200'
    <m:file.thumbnail file="{file}" preset="image_medium"/>

    {namespace m=Fab\Media\ViewHelpers}

    # Or if your template contains ``<section />``,
    <html xmlns:f="http://typo3.org/ns/typo3/fluid/viewhelpers"
            xmlns:m="http://typo3.org/ns/Fab/Media/ViewHelpers">

            <section>
                    <m:file.thumbnail file="{file}" preset="image_medium"/>
            </section>
</html>

除了视图辅助器之外,还可以通过编程方式生成缩略图。以下示例说明了某些可能性。有关更多见解,请参阅类本身。下面是代码:

/** @var $thumbnailService \Fab\Media\Thumbnail\ThumbnailService */
$thumbnailService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Fab\Media\Thumbnail\ThumbnailService', $fil::class);
$thumbnail = $thumbnailService
        ->setConfiguration($configuration)
        ->setOutputType(\Fab\Media\Thumbnail\ThumbnailInterface::OUTPUT_IMAGE_WRAPPED)
        ->setAppendTimeStamp(TRUE)
        ->create();

print $thumbnail
<a href="..." target="_blank">
        <img src="..." alt="..." title="..." />
</a>

媒体工具

通过Vidi在ext_tables.php中提供的工具API注册工具,并且可以通过在BE模块右上角图标中点击来访问。这些工具仅对管理员可见。

\Fab\Vidi\Tool\ToolRegistry::getInstance()->register('sys_file', 'Fab\Media\Tool\MissingFilesFinderTool');

文件上传API

在BE模块中,文件上传由Fine Uploader处理,这是一个旨在在网络上提供用户友好文件上传体验的JavaScript插件。该插件依赖于HTML5技术,它使桌面上的拖放成为可能。

在服务器端,有一个API可以透明地处理文件是从XHR请求还是POST请求上传的。

# Code below is simplified for the documentation sake.
# Check out for more insight EXT:media/Classes/Controller/AssetController.php @ uploadAction

/** @var $uploadManager \Fab\Media\FileUpload\UploadManager */
$uploadManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\Fab\Media\FileUpload\UploadManager::class);
try {
        /** @var $uploadedFileObject \Fab\Media\FileUpload\UploadedFileInterface */
        $uploadedFileObject = $uploadManager->handleUpload();
} catch (\Exception $e) {
        $response = array('error' => $e->getMessage());
}

$newFileObject = $targetFolder->addFile($uploadedFileObject->getFileWithAbsolutePath(), $uploadedFileObject->getName());

图像优化API

当上传图像时,有一个后处理步骤可以对图像进行优化。默认情况下,有两个预配置的优化选项:调整大小旋转调整大小处理会将图像的大小减小,以防其超过特定尺寸。允许的最大尺寸需要根据存储进行配置。旋转优化器读取EXIF元数据并自动旋转图像。自动旋转功能归功于Xavier Perseguers,他在其扩展中找到了很大的灵感。

如果需要,可以添加额外的自定义优化器。注意,该类必须实现接口\Fab\Media\FileUpload\ImageOptimizerInterface,可以使用以下代码添加:

\Fab\Media\FileUpload\ImageOptimizer::getInstance()->add('Fab\Media\FileUpload\Optimizer\Resize');

权限管理

权限管理是关于控制文件的可访问性。可以在“访问”选项卡下为每个文件定义权限,以便将文件连接到前端组。

https://raw.github.com/fabarea/media/master/Documentation/Manual-05.png

请注意,媒体将文件权限委托给第三方扩展,例如扩展naw_securedl。从长远来看,应考虑使用安全本地驱动程序。

基本元数据提取器

作为基本元数据提取器服务,媒体将在文件上传时或通过调度任务索引文件时设置标题。元数据标题基本上来源于文件名,例如my_report.pdf将结果为我的报告。这应该有助于编辑处理这些元数据并节省他们一些打字时间。当然,如果之前没有值,则只会设置标题。