Это не может быть точным ответом на вашу проблему, но, хотя у нее есть аннотированный характер, это может помочь вам найти решение.
Я работал на Орчард-сайте, который был
- много страниц
- много HTML ссылки на другие страницы сайта
- много элементов пользовательских ссылок в навигациях (для привязки к определенным якорям внутри целевой страницы и т. д.)
Незадолго до того, как мы планировали delpoy на веб-сайте, было решено изменить URL-адреса наиболее известных страниц по причинам SEO от http://www.example.org/orchard/products/category-name/product-name
до http://www.example.org/orchard/shop/category-name/product-name-keyword-anotherkeyword
(gotta love SEO ...)
Выполнение этого вручную потребовало бы возраста. Изменение URL-адреса в самом элементе контента было бы простым (но выполнение этого на ~ 20 элементах все равно потребовалось бы некоторое время), но изменение всех этих <a href
s во всех 120+ элементах контента и все пользовательские ссылки в 5 навигационных (5 языков) было бы просто невозможно.
Таким образом, единственным осуществимым способом, казалось, была манипуляция с базами данных.
Я использовал MS SQL Server Management Studio
для экспорта всех таблиц в базе данных Orchard в отдельные .sql-файлы. Затем я использовал Notepad++
для поиска всех файлов, содержащих частичную строка /products/category/product-name
и записывал имена таблицы и имя поля (обычно Text
или Data
)
В этом случае результаты были в следующих таблицах:
- Common_BodyPartRecord.Таблица
- Orchard_Framework_ContentItemRecord
- Orchard_Framework_ContentItemVersionRecord
Чтобы search-replace
частичная строка в SQl использовать функцию replace
, и из-за типа данных таблицы полей Орчард хранит данные, которые вы должны бросить строки. Полученные SQL-запросы выглядят так:
update [Orchard_Live].[dbo].[Common_BodyPartRecord]
set Text = cast(replace(cast(Text as nvarchar(max)), N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Text as nvarchar(max)) LIKE N'%/products/category/product-name%'
update [Orchard_Live].[dbo].[Orchard_Framework_ContentItemRecord]
set Data = cast(replace(cast(Data as nvarchar(max)), N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Data as nvarchar(max)) LIKE N'%/products/category/product-name%'
update [Orchard_Live].[dbo].[Orchard_Framework_ContentItemVersionRecord]
set Data = cast(replace(cast(Data as nvarchar(max)), N'/products/category/product-name', N'/shop/category-name/product-name-keyword-anotherkeyword') as ntext)
where cast(Data as nvarchar(max)) LIKE N'%/products/category/product-name%'
Мне пришлось сделать это для каждого URL-адреса, который необходимо изменить. Взял довольно долгое время, но все равно бил вручную, меняя все на многое. Возможно, этот «рабочий процесс» также может помочь с вашей проблемой.
Действительно ли это необходимо? Это звучит опасно. Вы всегда можете изменить отображаемое имя типа контента – Hazza
Я планирую использовать мой новый плагин для нескольких моих сайтов и хочу, чтобы тип контента стал тем, который я использую в будущем. По этой причине я не хочу переименовывать его в своей новой версии. – bingles
Выглядит хорошо. Вы попробовали? –