Link Kentico 博客 post 到相应的社交媒体 post
Link Kentico blog posts to corresponding social media post
我的 Kentico 站点有一个博客,该博客使用 Kentico 的社交和社区应用程序将其 post 同步到 Twitter、LinkedIn、and/or Facebook。在显示博客 post 的转换(页面类型 -> 博客 post -> 转换 -> 默认)中,我希望为相应的社交媒体网站呈现一个图标,其中 post 也出现。该图标将 link 直接指向相应站点上的此 post。
看来我们正在使用的转换能够呈现 dbo.CONTENT_BlogPost table 中的字段。但是,我们需要的信息在:
dbo.SM_FaceBookPost.FacebookPostExternalID
dbo.SM_LinkedInPost.LinkedInPostURL
dbo.SM_TwitterPost.TwitterPostExternalID
我假设如果我能找到此转换使用的查询,我可以添加一些左联接来获取我需要的数据。但是,虽然我看到它的 class 名称是 'cms.blogpost',但我无法通过模块应用程序找到 class。我在哪里可以找到查询,我可以修改它吗?或者我应该采取其他方法吗?
不确定您是否能够找到该查询,因为它可能被隐藏了。 BlogPost 只是一种页面类型,因此没有包含 class 的模块,它包含在 CMS_Document、CMS_Tree 和 CONTENT_BlogPost 表中。所以如果查询可用,它可能在 BlogPost 页面类型下,或者 CMS.Core 页面类型。
您确实有几个选项可以获取信息。您可以在 Text/XML 转换(或使用 CMS.MacroEngine.MacroContext.Current.ResolveMacros("")
)中使用宏来获取 SM_FacebookPost 项目并对其执行 .Where("") 。它可能是一个冗长的宏,但您可以使用系统 -> 宏 -> 控制台进行一些测试。
您可以为 ASCX 转换创建自定义转换方法,以使用 API 执行查找和逻辑(如果没有 API,则使用 CMS.DataEngine.QueryInfoProvider.ExecuteQuery()
)。
获得它的选项很多,但可能至少需要一些高级宏或自定义编码。
您不会在模块应用程序中找到 cms.blogpost
class,因为它是一种页面类型,而不是来自模块的自定义 class。您可以在页面类型应用程序中找到博客 post 的实际定义,并在数据库的 content_blogpost
table 中找到博客 post 的内容。
要查找您需要的数据,您可以像这样在 SQL 查询中加入数据:
SELECT TwitterPostID
FROM View_CMS_Tree_Joined
INNER JOIN SM_TwitterPost ON DocumentGuid = TwitterPostDocumentGuid
或者您可以像这样使用对象查询:
int twitterPostID = CMS.SocialMarketing.TwitterPostInfoProvider.GetTwitterPostInfosByDocumentGuid(Eval<Guid>("DocumentGUID"), CMS.SiteProvider.SiteContext.CurrentSiteID).FirstObject.TwitterPostID
我的 Kentico 站点有一个博客,该博客使用 Kentico 的社交和社区应用程序将其 post 同步到 Twitter、LinkedIn、and/or Facebook。在显示博客 post 的转换(页面类型 -> 博客 post -> 转换 -> 默认)中,我希望为相应的社交媒体网站呈现一个图标,其中 post 也出现。该图标将 link 直接指向相应站点上的此 post。
看来我们正在使用的转换能够呈现 dbo.CONTENT_BlogPost table 中的字段。但是,我们需要的信息在:
dbo.SM_FaceBookPost.FacebookPostExternalID
dbo.SM_LinkedInPost.LinkedInPostURL
dbo.SM_TwitterPost.TwitterPostExternalID
我假设如果我能找到此转换使用的查询,我可以添加一些左联接来获取我需要的数据。但是,虽然我看到它的 class 名称是 'cms.blogpost',但我无法通过模块应用程序找到 class。我在哪里可以找到查询,我可以修改它吗?或者我应该采取其他方法吗?
不确定您是否能够找到该查询,因为它可能被隐藏了。 BlogPost 只是一种页面类型,因此没有包含 class 的模块,它包含在 CMS_Document、CMS_Tree 和 CONTENT_BlogPost 表中。所以如果查询可用,它可能在 BlogPost 页面类型下,或者 CMS.Core 页面类型。
您确实有几个选项可以获取信息。您可以在 Text/XML 转换(或使用 CMS.MacroEngine.MacroContext.Current.ResolveMacros("")
)中使用宏来获取 SM_FacebookPost 项目并对其执行 .Where("") 。它可能是一个冗长的宏,但您可以使用系统 -> 宏 -> 控制台进行一些测试。
您可以为 ASCX 转换创建自定义转换方法,以使用 API 执行查找和逻辑(如果没有 API,则使用 CMS.DataEngine.QueryInfoProvider.ExecuteQuery()
)。
获得它的选项很多,但可能至少需要一些高级宏或自定义编码。
您不会在模块应用程序中找到 cms.blogpost
class,因为它是一种页面类型,而不是来自模块的自定义 class。您可以在页面类型应用程序中找到博客 post 的实际定义,并在数据库的 content_blogpost
table 中找到博客 post 的内容。
要查找您需要的数据,您可以像这样在 SQL 查询中加入数据:
SELECT TwitterPostID
FROM View_CMS_Tree_Joined
INNER JOIN SM_TwitterPost ON DocumentGuid = TwitterPostDocumentGuid
或者您可以像这样使用对象查询:
int twitterPostID = CMS.SocialMarketing.TwitterPostInfoProvider.GetTwitterPostInfosByDocumentGuid(Eval<Guid>("DocumentGUID"), CMS.SiteProvider.SiteContext.CurrentSiteID).FirstObject.TwitterPostID