Связать сообщения в блоге 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()
).
Много вариантов, чтобы получить его, но может потребоваться, по крайней мере, некоторые сложные макросы или пользовательское кодирование.