Получить реферальный элемент (ссылку)

#c# #asp.net #sitecore #sitecore6

#c# #asp.net #sitecore #sitecore6

Вопрос:

У нас есть веб-сайт sitecore, и нам нужно знать элемент, с которого ссылка, приведшая вас на страницу X. Пример:
Вы находитесь на странице A и нажимаете на ссылку, предоставленную элементом X, которая приведет вас на страницу B.
На странице B нам нужно иметь возможность получить тот элемент, на который вас направил X, и, таким образом, получить доступ к элементу и его свойствам.

Это может проходить через сеанс, контекст Sitecore, я не знаю что, и нам даже не нужен весь сам элемент, достаточно просто идентификатора.

Кто-нибудь знает, как это сделать?

Ответ №1:

Из обсуждения в комментариях следует, что у вас проблема с веб-архитектурой, которая на самом деле не связана с Sitecore.

У вас есть серверная часть, которая использует несколько элементов данных для создания некоторого HTML, который отправляется клиенту. Каждый из этих элементов данных может создавать ссылки в HTML. Они могут выдавать идентичные ссылки. Только один из элементов считается источником HTML-страницы.

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

Проблема была бы точно такой же, если бы ваши ссылки были созданы запросом к базе данных. Если вы хотите узнать, какая запись создала ссылку, вам придется добавить идентификатор к ссылке.

Вероятно, вы могли бы разработать систему, которая позволила бы вам идентифицировать элемент большую часть времени (т. Е. Когда ссылка, по которой нажали, была уникальной для этой страницы), но это потребовало бы либо кэширования большого количества данных в сеансе (список созданных ссылок и элементы, которые их создали), либо повторного запроса ссылающегося URL. И то, и другое звучит как много хлопот для неидеального решения, которое может существенно замедлить работу вашего сервера.

Комментарии:

1. Спасибо, мы рассмотрим это и попытаемся найти другое решение.

Ответ №2:

Джеймс прав… ваши исходные параметры в принципе невозможно удовлетворить.

Однако, с некоторым взломом и заменой стандартных поставщиков Sitecore, вы могли бы отслеживать их. Но было бы намного проще использовать какой-нибудь идентификатор строки запроса.

В нашей системе у нас есть сторонние рекламные ссылки… у них есть клиентский javascript, который фактически отправляет запрос на локальную страницу, а затем перенаправляется на целевой URL. Итак, при наведении курсора мыши на ссылку в строке состояния отображается «http://whatever.com «… кажется, что ссылка ведет к whatever.com , но вы на самом деле собираетесьhttp://ourserver/redirect.aspx сначала, чтобы мы могли отследить эту ссылку, а затем получить ответ.Перенаправление().

Вы могли бы сделать что-то подобное, предоставив свой собственный LinkManager и включив идентификатор генерируемого элемента в URL отслеживания, а затем перенаправив на фактическую страницу / элемент, который нужен пользователю.

Однако… это кажется довольно запутанным и подверженным ошибкам, и я бы не рекомендовал это.