2017-02-14 3 views
0

Я успешно перенес 1000 единиц новостей и другого контента от Sitefinity 5 до Wordpress после нескольких часов мучительного анализа и удачи с угадыванием, но у меня осталось несколько вещей, которые все еще остались. В частности, страницы. Я знаю, что многие материалы хранятся очень неясными способами, но должен быть кто-то, кто сделал это раньше, и может направить меня в правильном направлении.Где в базе данных Sitefinity хранится контент?

Мои исследования (и текстовый поиск по БД) нашли названия страниц и т. Д., Но когда я ищу контент, я ничего не получаю. Моя кишка говорит мне, что содержимое хранится в двоичной форме, может ли кто-нибудь подтвердить, так ли это?

Документация по Sitefinity полезна, только если вы являетесь разработчиком .net, у которого есть сайт, созданный в Visual Studio (насколько я видел).

ответ

6

Это, вероятно, самый запутанный способ хранения контента, с которым я когда-либо сталкивался. После выполнения текстовых запросов к базе данных я, наконец, нашел, где хранится контент, но это не простой процесс, чтобы получить его.

пажескую основной записи, кажется, sf_page_node, есть соответствующие таблицы:

  • sf_object_data (page_id связано с sf_page_node.content_id)
  • sf_draft_pages (page_id связано с sf_page_node.content_id)
  • sf_page_data (content_id связано с sf_page_node.content_id)
  • sf_control_properties (control_ID связано с sf_object_data.id)

Таким образом, вы можете получить информацию, вам нужно с помощью запроса, как это:

select * from 
[sf_page_node] 
join sf_object_data on sf_page_node.content_id = sf_object_data.page_id 
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id 

Другие вещи, чтобы рассмотреть следующие вопросы:

  • parent_id поле связано с таблицей sf_page_node, так что если вы написав скрипт, обязательно запросите его также
  • на странице может быть изображение баннера, вы получите значение «place_holder» как «BannerHolder» с надписью «Изображение». Изображение может быть сохранено как капли в sf_media_content, вы должны обрабатывать это отдельно. Значение «nme» в «ImageId» будет иметь идентификатор GUID в столбце «val». Вы можете запросить sf_media_content с этим значением, как «content_id» фактические двоичные данные хранятся в sf_chunks, они связаны с «file_id»

Мой пересмотренный запрос с учетом того, что мне нужно перенести содержимое ниже:

select 
    original.content_id, 
    original.url_name_, 
    original.title_, 
    parent.id, 
    parent.url_name_, 
    parent.title_, 
    place_holder, 
    sf_object_data.caption_, 
    sf_control_properties.nme, 
    val 
from [sf_page_node] original 
join sf_object_data on original.content_id = sf_object_data.page_id 
join sf_control_properties on sf_object_data.id = sf_control_properties.control_id 
join sf_page_node parent on original.parent_id = parent.id 

Надеюсь, это поможет кому-то!

1

Вам не нужны элементы версии в этом случае - как вы уже узнали, он сохраняет предыдущую версию страниц в двоичном формате.

Текущие данные живых страниц доступны в таблицах sf_control_properties и sf_object_data. Вам необходимо присоединиться к ним вместе с sf_page_data и sf_page_node, и вы получите полную картину.

В зависимости от ваших требований, может быть проще выполнить запрос GET на каждую страницу и проанализировать возвращаемый html-ответ.

+0

Thanks Veselin, как таблица sf_control_properties относится к другим таблицам? Кроме того, что вы подразумеваете под «делать запрос GET на каждой странице», я не могу полагаться на очистку живого сайта, поскольку многие страницы больше не связаны с ними, однако они все же должны быть перенесены в исторических целях , поэтому я работаю в БД. – Daniel

+0

Nevermind, некоторые дальнейшие текстовые исследования в DB приводят меня к ответу, они присоединяются к sf_object_data.id = sf_control_properties.control_id. Спасибо за ваш вклад, я обновлю свой ответ – Daniel

+0

Хорошо, что вы нашли его сами. Что касается GET - вы можете создать файл sitemap со всеми страницами сайта, а затем запросить их. –

Смежные вопросы