Связать сообщения в блоге Kentico с соответствующей публикацией в социальных сетях

На моем сайте Kentico есть блог, который использует приложения Kentico для социальных сетей и сообществ для синхронизации своих сообщений в Twitter, LinkedIn и / или Facebook. В преобразовании (Типы страниц -> Запись блога -> Преобразования -> По умолчанию), в котором отображается сообщение в блоге, я хочу отобразить значок для соответствующего сайта (-ов) в социальных сетях, где также появляется сообщение. Значок (и) будет ссылаться непосредственно на этот пост на соответствующем сайте.
Похоже, что преобразование, которое мы используем, может отображать поля из таблицы dbo.CONTENT_BlogPost. Тем не менее, информация, которая нам нужна, находится в:

dbo.SM_FaceBookPost.FacebookPostExternalID

dbo.SM_LinkedInPost.LinkedInPostURL

dbo.SM_TwitterPost.TwitterPostExternalID

Я предполагаю, что если бы я мог найти запрос, используемый этим преобразованием, я мог бы добавить несколько левых соединений, чтобы получить нужные мне данные. Но хотя я вижу, что его класс называется "cms.blogpost", я не могу найти этот класс через приложение Modules. Где я могу найти запрос и можно ли его изменить? Или я должен выбрать альтернативный подход?

2 ответа

Решение

Вы не найдете cms.blogpost Класс в приложении модулей просто потому, что это тип страницы, а не пользовательский класс из модуля. Фактическое определение сообщения в блоге можно найти в приложении "Типы страниц", а содержимое сообщений в блоге - в content_blogpost таблица в базе данных.

Чтобы найти нужные данные, вы можете объединить данные в запросе 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

Не уверен, что вы сможете найти этот запрос, так как он может быть скрыт. BlogPost - это просто тип страницы, поэтому в нем нет модуля с таким классом, он содержится в таблицах CMS_Document, CMS_Tree и CONTENT_BlogPost. Поэтому, если запрос доступен, он может относиться к типу страницы BlogPost или к типу страницы CMS.Core.

У вас есть несколько вариантов, чтобы получить информацию. Вы можете использовать Макросы в преобразовании Текст /XML (или используя CMS.MacroEngine.MacroContext.Current.ResolveMacros("")), чтобы получить элементы SM_FacebookPost и выполнить.Where("") на нем. Это может быть длинный макрос, но вы можете использовать System -> Macros -> Console, чтобы провести некоторое тестирование.

Вы можете создать собственный метод преобразования для преобразований ASCX, чтобы выполнять поиск и логику, используя API (или, если нет API для него, используя CMS.DataEngine.QueryInfoProvider.ExecuteQuery()).

Много вариантов, чтобы получить его, но может потребоваться, по крайней мере, некоторые сложные макросы или пользовательское кодирование.

Другие вопросы по тегам