Rotaie, radiante, e Regex
-
29-09-2019 - |
Domanda
Sto lavorando su un sito Rails che utilizza il Radiant CMS e sto costruendo la navigazione stateful come per la primo metodo in questo link .
Sono corrispondenza dell'URL sulle espressioni regolari per determinare se visualizzare o meno lo stato attivo di ogni link di navigazione. A titolo di esempio, qui ci sono due elementi di navigazione di esempio, uno per il /communications/
Radiant URL e uno per /communications/press_releases/
:
<r:if_url matches="/communications\/$/"><li class="bottom-border selected">Communications</li></r:if_url>
<r:unless_url matches="/communications\/$/"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
<r:if_url matches="/communications\/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
<r:unless_url matches="/communications\/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>
lavorando bene del Tutto per la pagina di comunicati stampa - che è, quando l'URL è /communications/press_releases
comunicati stampa nav voce ottiene la classe 'selezionato' in modo appropriato, e la voce le comunicazioni nav è selezionata. Tuttavia, le comunicazioni espressioni regolari non sembra funzionare correttamente, come quando l'URL è /communications/
né elemento ha la classe 'selezionato' (così l'espressione regolare deve essere non riesce a abbinare). Tuttavia, ho provato
>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>
in IRB, e come si può vedere, l'espressione regolare sembra funzionare bene. Che cosa potrebbe causare questo?
TL; DR : "/communications/"
corrisponde /communications\/$/
nel guscio di Ruby, ma non nel contesto della navigazione Radiant. Che cosa sta succedendo qui?
Soluzione
di Radiant wiki , sembra che non è necessario aggiungere /
s intorno alle vostre regexs o /
s fuga. Prova:
<r:if_url matches="/communications/$"><li class="bottom-border selected">Communications</li></r:if_url>
<r:unless_url matches="/communications/$"><li class="bottom-border"><a href="/communications">Communications</a></li></r:unless_url>
<r:if_url matches="/communications/press_releases/"><li class="bottom-border selected">Press Releases</li></r:if_url>
<r:unless_url matches="/communications/press_releases/"><li class="bottom-border"><a href="/communications/press_releases">Press Releases</a></li></r:unless_url>
Quello che sta accadendo dietro le quinte è che Radiant chiama Regex.new
sulla corda in matches
, in modo che il regex si stava tentando di partita prima era questa:
Regexp.new '/communications\/$/'
# => /\/communications\/$\//
che si traduce in 'comunicazioni oblique taglio su end-of-line barra', che ho davvero dubbio è quello che vuoi.
rubino regexs sono interessanti dal fatto che sono simboli per entrambi inizio (^
) e alla fine della linea ($
) così come inizio (\A
) e fine stringa (\Z
). Ecco perché a volte si vedrà persone che utilizzano \A
e \Z
nelle loro espressioni regolari.