Отключение событий нажатия в редактировании XPM (Razor)
Я пытался решить это в течение некоторого времени, но я не могу придумать что-то, что работает должным образом.
Видите ли, на нашем сайте есть много кликабельных изображений или ссылок, снабженных компонентными ссылками, которые попадают на все изображение. Если вы активируете XPM и попытаетесь выбрать компонент, он запустит событие щелчка ссылки компонента и направит вас на нужную страницу.
Я искал быстрое решение, чтобы отключить это поведение только при редактировании, и до сих пор я нашел несколько обходных путей, которые, честно говоря, не то, что я ищу.
Например, вы можете использовать фантастическое условие Razor Mediator (IsSiteEditEnabled), однако эта функция всегда принимает значение true, если текущая публикация / страница / сервер включена для редактирования сайта. Это означает, что если вы вставите специфичный для шаблона код, такой как
@if(!IsSiteEditEnabled){
<a tridion:href="#"> other code, ending in closing of </a>...
}
НЕ будет выводить ссылку, когда редактирование сайта (XPM) НЕ активировано, но может быть активировано. Постановка серверов, короче говоря.
Если нет другого выбора, мне понадобится сервер публикации Live, чтобы заставить код работать, но это создаст проблему, из-за которой редакторы будут думать, что ссылки на промежуточные серверы не работают.
У меня такое ощущение, что здесь что-то не хватает. Я считаю, что эта проблема, возможно, встречалась с кем-то вроде вас:)
это один из блоков
<article class="block-2x2 banner">
<tcdl:ComponentField name="component_link"></tcdl:ComponentField>
@if(!IsSiteEditEnabled){
@:<a tridion:href="@Fields.component_link">
}
<div class="image-container">
<tcdl:ComponentField name="image"><img src="@Fields.image" alt="@Fields.image.altText"></tcdl:ComponentField>
</div>
<div class="hgroup">
<h4 class="primary-title">@RenderComponentField("header", 0)</h4>
<h5 class="secondary-title">@RenderComponentField("title", 0)</h5>
</div>
@if(!IsSiteEditEnabled){</a>}
</article>
3 ответа
Вы могли бы рассмотреть вопрос о том, чтобы просто вставить что-то вроде этого:
@if(!IsSiteEditEnabled){
<a tridion:href="#"> other code, ending in closing of </a>...
}else{
<a href="#" onclick="alert('Image links not supported in XPM');"></a>
}
Это должно хотя бы объяснить, почему ссылки не работают для ваших редакторов. Хотя я не проверял, действительно ли это решает вашу проблему.
Было бы чище просто добавить class="NoClickImageLink"
атрибут и добавьте действие JavaScript ко всем тегам этого класса при загрузке страницы, которая связывает событие onclic с тегом.
Поскольку XPM является чисто клиентской стороной... Я думаю, вы должны сделать это с помощью некоторого трюка, подобного тому, что я описал; http://tcm4lex.wordpress.com/2013/07/04/javascript-detection-of-experience-manager/
Статья написана на основе моего опыта работы с XPM на Tridion 2013, но в любом случае может стать хорошей отправной точкой. Если у вас есть такой способ определить, когда страница находится в режиме редактирования, вы можете выполнить трюк с Javascript, подобный описанному выше Arjen.
При использовании JQuery вы можете запретить работу якорных ссылок, используя этот код:
$('a').click(function(event) {
event.preventDefault();
});
$(this)
будет ссылаться на выбранный элемент, который вы можете проверить в случае, если вам нужны некоторые якорные ссылки для продолжения работы.
Этот код может быть введен в случае, если вы редактируете с помощью XPM, и это значительно упростит ваши шаблоны.
PS. Я не проверял это предложение.