la-haute-societe/craft-page-exporter

将Craft CMS条目导出到包含静态HTML文件及其资产的ZIP存档中


README

此插件允许您从控制面板以ZIP格式导出条目。生成的存档包含条目的静态HTML渲染及其图像、视频、脚本和样式。

Screenshot

生成的存档示例

export.zip
├── page-name-1-en.html
├── page-name-2-en.html
└── media
    ├── styles.5875592d.css
    ├── scripts.8b5a78f2.js
    ├── image-1.808162ef.jpg
    ├── logo.5b4d3420.svg
    ├── my-font.9a212477.woff
    └── ...

要求

此插件需要Craft CMS 3.0.0-RC1或更高版本。

安装

您可以从插件商店或使用Composer安装此插件。

从插件商店

转到项目的控制面板中的插件商店,搜索“Page exporter”。然后在模态窗口中点击“安装”按钮。

使用Composer

打开您的终端,并运行以下命令

# go to the project directory
cd /path/to/my-project

# tell Composer to load the plugin
composer require la-haute-societe/craft-page-exporter

# tell Craft to install the plugin
./craft plugin/install craft-page-exporter

用法

admin/entries 选择一个或多个条目,然后从上下文菜单中选择 Export

您还可以从编辑页面导出单个条目。

Screenshot

配置

您可以从插件设置页面配置插件的行为。或者,从配置文件 config/craft-page-exporter.php 获取更多选项。

(简单)配置文件示例

<?php

return [
    'inlineStyles'      => true,
    'inlineScripts'     => true,
    'exportPathFormat'  => 'media/{filename}-{hash}{extension}',
    'exportUrlFormat'   => 'media/{filename}-{hash}{extension}',
];

配置设置

配置文件可以包含以下设置

inlineStyles

默认: true

是否必须将外部样式表内联在主HTML页面内的 style 标签中。

如果 true,外部样式表内容将移动到 <style> 标签内。

如果 false,外部样式表将保留在外部文件中。

inlineScripts

默认: true

是否必须将外部脚本内联在主HTML页面内的 script 标签中。

如果 true,外部脚本内容将移动到 <script> 标签内。

如果 false,外部脚本将保留在外部文件中。

exportPathFormat

默认: {dirname}/{basename}

ZIP存档中资产路径的格式。此路径相对于存档的根目录。

可以

  • 保留原始文件夹的结构: {dirname}/{basename}
  • 将所有资产放入单个文件夹中: media/{filename}{extension}
    在这种情况下,建议在文件名中添加哈希以避免文件名冲突: media/{filename}-{hash}{extension}

以下变量可用

您还可以使用任何Twig表达式,例如

my-folder/{{ "now"|date("Y-m") }}/{{ hash[:1] }}/{{ hash[1:1] }}/{hash}/{{ filename|upper }}{extension}

这将创建此路径

\my-folder\2019-05\1\8\18f4a488\MY-IMAGE.png

exportUrlFormat

默认: {dirname}/{basename}

ZIP存档中资产URL的格式。

在大多数情况下,此路径应与 exportPathFormat 设置相匹配。

此参数接受与 exportPathFormat 相同的变量。

如果您计划将资产放置在CDN上,例如,可以指定绝对URL: https://my.cdn.example.com/xyz/{dirname}/{basename}

archiveFilename

默认: export

ZIP存档的文件名。

assetTransformers

默认: []

可以使用以修改内容或路径的资产转换器集合。

例如,要在HTML文件开头添加注释

return [
    // ...
    'assetTransformers' => [
        function (lhs\craftpageexporter\models\Asset $asset) {
            // Target only HTML asset
            if (!($asset instanceof lhs\craftpageexporter\models\HtmlAsset)) {
                return;
            }

            $content = $asset->getContent();

            $user = Craft::$app->getUser()->getIdentity();
            $manifest = '<!-- Page generated on ' . date('Y-m-d H:i:s') . ' by ' . $user->username . ' -->';
            $content = $manifest . PHP_EOL . $content;

            $asset->setContent($content);
        },
    ]
];

如果您修改了子资产的内容,在更新资产后应调用方法 $asset->updateInitiatorContent(),以便将其更新传递给父资产。

customSelectors

子资产是通过 XPath表达式 找到的。

如果您想使用自定义XPath将资产添加到ZIP归档中,例如

<tag whatever="{{ myImageUrl }}"></tag>

您可以使用以下选择器

return [
    // ...
    'customSelectors' => [
       [
         'selectors'  => [
             '//tag/@whatever',
          ],
          'assetClass' => lhs\craftpageexporter\models\MiscAsset::class,
       ]
    ],
];
  • selectors:XPath表达式的集合
  • assetClass:以下Asset类之一
    • ImageAsset:外部图片URL
    • InlineStyleAsset:内联样式表
    • StyleAsset:外部样式表URL
    • ScriptAsset:外部脚本URL
    • MiscAsset:任何类型的外部资产URL(视频、音频...)

sourcePathTransformer

默认值:null

用于将资产的绝对URL转换为文件路径的函数。
如果没有设置,路径将按如下方式定义

return [
    // ...
    'sourcePathTransformer' => function (lhs\craftpageexporter\models\Asset $asset) {
        return str_replace(
            UrlHelper::baseRequestUrl(),
            Yii::getAlias('@webroot/'),
            $asset->getAbsoluteUrl()
        );
    },
];

默认情况下,如果找不到资产文件,其内容将为空。不会显示错误。

entryContentExtractor

默认值:null

如果没有设置,条目的内容将使用Craft方法Controller::renderTemplate()生成。
您可以定义一个自定义回调函数,该函数从条目返回HTML内容

return [
    // ...
   'entryContentExtractor' => function (\craft\elements\Entry $entry) {
       return file_get_contents($entry->initialAbsoluteUrl);
   },
];

failOnFileNotFound

默认值:false

如果设置为true,如果找不到资产文件,将抛出异常。
否则,不会显示错误,将在归档中创建一个空文件。

显式注册资产

如果某些资产不能通过XPath表达式定位,例如需要生成包含URL的JSON,您可以从Twig模板显式注册资产

{% set object = {
    video: craft.pageExporter.registerAsset(video),
    image: craft.pageExporter.registerAsset(image),
} %}

<script>
    const myObject = {{ object|json_encode|raw }};
    console.log(myObject);
</script>

许可

此插件在开发环境中免费试用,但在生产环境中使用需要付费。此插件的许可费为29美元(许可+一年的更新),通过Craft插件商店购买,然后每年更新费5美元(可选)。


 La Haute Société