无需调用Umbraco扩展API,如何导出全节点已发布站点列表?
无需Umbraco扩展API的已发布站点导出方案
当然有不用调用Umbraco扩展API的办法!下面给你几个实用的方案,都是直接围绕Umbraco的底层数据或者内置功能来实现的:
方案一:直接查询Umbraco数据库并导出
Umbraco的所有内容节点数据都存在数据库里,我们可以直接通过SQL筛选出已发布的站点,再用数据库工具导出成需要的格式:
编写筛选已发布站点的SQL语句
假设你的站点对应的文档类型别名为site(请替换成你实际的别名),可以用以下SQL查询已发布的站点信息:SELECT n.nodeName AS SiteName, n.id AS NodeId, c.createDate AS CreatedDate, d.updateDate AS LastPublishedDate, n.path AS NodePath -- 可选,查看节点层级路径 FROM umbracoNode n JOIN umbracoContent c ON n.id = c.nodeId JOIN umbracoDocument d ON n.id = d.nodeId JOIN cmsContentType ct ON c.contentTypeId = ct.nodeId WHERE d.published = 1 -- 筛选已发布的内容 AND ct.alias = 'yourSiteDocumentTypeAlias' -- 替换为你的站点文档类型别名 ORDER BY n.nodeName;导出查询结果
用你常用的数据库管理工具(比如SQL Server Management Studio、DBeaver等)执行上述SQL,然后使用工具自带的导出功能,将结果保存为CSV、XLSX或其他格式即可。
方案二:使用Umbraco后台内置报表(适合非开发人员)
如果你的Umbraco版本是v8及以上,后台自带了报表功能,完全可以在界面上操作导出:
- 登录Umbraco后台,找到左侧菜单的Reports选项
- 点击Create Report,选择Content作为数据源
- 在筛选条件中设置:
- 勾选Published为
Yes - 指定Document Type为你的站点类型
- 勾选Published为
- 选择需要导出的字段(比如站点名称、节点ID、发布时间等)
- 配置完成后,点击页面上的导出按钮,直接选择CSV或Excel格式下载即可
方案三:编写轻量控制台程序实现自动化导出(适合定期导出需求)
如果需要定期自动导出,可以写一个简单的控制台程序,直接连接数据库查询并生成文件,不用依赖Umbraco的API:
以下是C#示例代码(使用EPPlus库生成XLSX文件):
using System.Data.SqlClient; using OfficeOpenXml; using System.IO; namespace UmbracoSiteExporter { class Program { static void Main(string[] args) { // 替换为你的Umbraco数据库连接字符串 string dbConnectionString = "Server=YOUR_SERVER;Database=YOUR_UMBRACO_DB;User Id=YOUR_USER;Password=YOUR_PWD;"; // 替换为你的站点文档类型别名 string siteDocTypeAlias = "yourSiteDocumentTypeAlias"; // 导出文件的保存路径 string exportPath = @"C:\UmbracoExports\PublishedSites.xlsx"; // 创建导出目录(如果不存在) Directory.CreateDirectory(Path.GetDirectoryName(exportPath)); string sqlQuery = $@" SELECT n.nodeName AS SiteName, n.id AS NodeId, c.createDate AS CreatedDate, d.updateDate AS LastPublishedDate FROM umbracoNode n JOIN umbracoContent c ON n.id = c.nodeId JOIN umbracoDocument d ON n.id = d.nodeId JOIN cmsContentType ct ON c.contentTypeId = ct.nodeId WHERE d.published = 1 AND ct.alias = '{siteDocTypeAlias}' ORDER BY n.nodeName;"; using (SqlConnection conn = new SqlConnection(dbConnectionString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sqlQuery, conn)) using (SqlDataReader reader = cmd.ExecuteReader()) { // 初始化Excel包 using (ExcelPackage excelPackage = new ExcelPackage()) { ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("已发布站点列表"); // 写入表头 worksheet.Cells[1, 1].Value = "站点名称"; worksheet.Cells[1, 2].Value = "节点ID"; worksheet.Cells[1, 3].Value = "创建时间"; worksheet.Cells[1, 4].Value = "最后发布时间"; // 格式化表头样式 worksheet.Cells[1, 1, 1, 4].Style.Font.Bold = true; // 写入数据行 int currentRow = 2; while (reader.Read()) { worksheet.Cells[currentRow, 1].Value = reader["SiteName"].ToString(); worksheet.Cells[currentRow, 2].Value = reader["NodeId"].ToString(); worksheet.Cells[currentRow, 3].Value = reader["CreatedDate"]; worksheet.Cells[currentRow, 4].Value = reader["LastPublishedDate"]; currentRow++; } // 自动调整列宽 worksheet.Cells.AutoFitColumns(); // 保存文件 FileInfo excelFile = new FileInfo(exportPath); excelPackage.SaveAs(excelFile); } } } } } }
注意:需要先通过NuGet安装EPPlus包,并且确保程序有数据库访问权限和文件写入权限。
内容的提问来源于stack exchange,提问作者user3336627
相关产品推荐
相关产品推荐

