2013-02-12 13 views
9

Ho cercato di risolvere questo problema da un po 'di tempo, ma non riesco a trovare qualcosa che funzioni correttamente.Disabilitazione degli eventi click in XPM editing (Razor)

Vedete, sul nostro sito ci sono molte immagini cliccabili o divs presenti, forniti di collegamenti di componenti che ricadono sull'intera immagine. Se si attiva XPM e si prova a selezionare il componente, verrà generato il relativo evento di collegamento del collegamento e verrà indirizzato alla pagina corretta.

Sono stato alla ricerca di una soluzione rapida per disabilitare questo comportamento solo durante la modifica, e finora ho escogitato un paio di soluzioni alternative che francamente non sono quello che sto cercando.

È possibile ad esempio utilizzare la fantastica condizione Razor Mediator (IsSiteEditEnabled), tuttavia questa funzione si risolve sempre su true se la pubblicazione/pagina/server in cui si è attualmente è abilitata per la modifica del sito. Questo significa che se si inserisce il codice specifico modello di come

@if(!IsSiteEditEnabled){ 
<a tridion:href="#"> other code, ending in closing of </a>... 
} 

non emette un link quando il sito di modifica (XPM) non è attivata, ma può essere attivato. Server di gestione temporanea, in breve.

A meno che non ci sia altra opzione, ho bisogno di un server di pubblicazione Live per far funzionare il codice, ma questo porrà il problema che i redattori penseranno che i collegamenti siano interrotti sui server di staging.

Ho la sensazione che ci sia qualcosa che mi manca qui. Credo che questo problema potrebbe essere stato incontrato da qualcuno come voi :)

questo è uno dei blocchi

<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> 
+0

Sembra che queste domande possano richiedere una taglia ... – MDa

+0

Penso che potresti aver bisogno di più di una taglia - Sono davvero confuso dalla tua domanda - Forse prendere in considerazione la riformulazione. Perché vuoi disattivare i collegamenti? È perché ti impedisci di modificare i componenti? –

+0

Bene, l'intero componente è un unico grande clic. Quindi cosa significa, per poterlo modificare sul sito, è necessario concentrarsi su detto componente facendo sì- facendo clic su di esso. Poiché ha un collegamento, verrai reindirizzato a un'altra pagina e la modifica è impossibile. – MDa

risposta

4

Si potrebbe prendere in considerazione solo mettendo in qualche forma di altro come questo:

@if(!IsSiteEditEnabled){ 
    <a tridion:href="#"> other code, ending in closing of </a>... 
}else{ 
    <a href="#" onclick="alert('Image links not supported in XPM');"></a> 
} 

Questo dovrebbe almeno spiegare perché i collegamenti non funzionano per i tuoi editor. Anche se non ho ancora testato se questo risolve il tuo problema.

Sarebbe più pulito di aggiungere solo un attributo class="NoClickImageLink", e aggiungere un'azione JavaScript per tutti i tag con quella classe al caricamento della pagina che associa l'evento onclic con il tag ..

+0

Questa è essenzialmente la strada giusta da percorrere, ma il problema è che il sito di Staging non avrà collegamenti attivi. Ciò significa anche che quando SiteEdit * può * essere abilitato, ma al momento non è attivo. Gli editori dovranno navigare attraverso l'url della barra degli indirizzi per arrivare a una pagina che vogliono vedere. – MDa

+1

Penso che la tua unica opzione sia aggiungere un link testuale in modalità SiteEdit per consentire la navigazione, o aggiungere un div speciale/marker per consentire la modifica del tuo componente. Raggiungere entrambi i tuoi obiettivi allo stesso tempo sembra impossibile da raggiungere. –

+1

Questo approccio richiede modifiche al modello che lo rendono una soluzione non preferibile. Poiché XPM è in gran parte codice lato client, è possibile trovare la soluzione anche lì. –

2

Quando si utilizza JQuery si può prevenire ancore di lavorare utilizzando questo codice:

$('a').click(function(event) { 
    event.preventDefault(); 
}); 

$(this) sarebbe riferimento all'elemento cliccato, che si può quindi verificare nel caso avete bisogno di alcuni collegamenti di ancoraggio per continuare a lavorare.

Questo codice può essere iniettato nel caso in cui si modifica con XPM e semplificherebbe notevolmente i modelli.

PS. Non ho provato questo suggerimento.

2

Come XPM è puramente client-side ... Immagino che tu debba farlo usando un trucco come quello che descrivo; http://tcm4lex.wordpress.com/2013/07/04/javascript-detection-of-experience-manager/

L'articolo è stato scritto sulla mia esperienza con XPM su Tridion 2013, ma può comunque essere un buon punto di partenza. Una volta che hai questo modo di rilevare quando la pagina è in modalità di modifica, puoi eseguire alcuni trucchi Javascript come quello descritto in precedenza da Arjen.