首页 > 解决方案 > 从 modx 将渲染的 html 文件导出为 zip

问题描述

首先,我的目标是为 modx 编写一个 Extras,以将网站内容导出为 epub 文件。我已经搜索过是否存在类似的东西,但我没有找到任何东西。有没有人知道这样的附加功能?或者任何人都可以建议我在 modx 中做到这一点的最佳方法吗?

我的想法是收集所有呈现的 html 文件和资源,然后使用基于 php 的 epub 库生成 epub 文件。但是我没有找到从 modx 获取渲染的 html 文件的方法。我可以获取模板,也可以获取 html 片段代码,但我需要整个 html 文件。

MODX信息:

标签: phpcontent-management-systemmodxmodx-revolutionmodx-resources

解决方案


有多种方法可以解决这个问题。

您可以编写一个独立的 PHP 应用程序,从 XML 站点地图或链接数组调用您站点上的所有 URL,然后使用该file_get_contents()函数下载呈现的 HTML(请参阅此处的文档)。与此类似的东西(以下代码未经测试):

// [filename] => [URL]
$pages = array(
   'index.html' => 'https://example.com/',
   'contact.html' => 'https://example.com/contact.html',
);

foreach($pages as $filename => $link){
   $filePath = $_SERVER['DOCUMENT_ROOT'].'/'.$filename;
   $html= file_get_contents($link);
   $handle = fopen($filePath,"w");
   fwrite($handle,$html);
   fclose($handle);
}

或者,您可以在 MODX 中编写一个片段并直接使用xPDO获取资源 URL 。以下代码将获取所有资源的链接和文件名,并排除进程中的网络链接、符号链接和静态资源。如果您计划在您的包中实现以下代码,则需要稍微调整它。

$resources = $modx->getIterator('modResource', array(
    'class_key' => 'modDocument',
));
$pages = array();
foreach($resources as $resource){
    $pages[$resource->get('alias').'.html'] = $modx->makeUrl($resource->get('id'), '', '', 'full');
}

上述代码中数组的输出$pages如下:

Array
(
    [index.html] => https://example.com/
    [test.html] => https://example.com/test.html
)

推荐阅读