Question

Je travaille sur un site Rails qui utilise le Radiant CMS et je navigation stateful construction selon la première méthode ce lien .

Je l'URL correspondant à des expressions régulières pour déterminer si oui ou non pour montrer l'état actif de chaque lien de navigation. À titre d'exemple, voici deux éléments de navigation échantillons, l'un pour l'URL Radiant /communications/ et un pour /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>

va bien tout fonctionne pour la page Communiqués de presse - qui est, lorsque l'URL est /communications/press_releases l'objet de communiqués de presse obtient la classe appropriée « choisie », et le point de communication est désélectionné. Cependant, les communications __gVirt_NP_NN_NNPS<__ expression régulière ne semble pas fonctionner correctement, comme lorsque l'URL est /communications/ ni élément a la classe « choisie » (donc le regex doit faillirait en conséquence). Cependant, je l'ai testé

>> "/communications/".match(/communications\/$/)
=> #<MatchData:0x333a4>

dans la CISR, et comme vous pouvez le voir, l'expression régulière semble fonctionner très bien. Que pourrait être la cause?

TL; DR : "/communications/" correspond /communications\/$/ dans le shell Ruby, mais pas dans le contexte de la navigation Radiant. Qu'est-ce qui se passe ici?

Était-ce utile?

La solution

De il vous ressemble ne wiki Radiant, besoin d'ajouter /s autour de votre regexs ou /s d'échappement. Essayez:

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

Ce qui se passe les coulisses est que les appels Radiant Regex.new sur la chaîne en matches, donc le regex que vous essayez de faire correspondre avant était celui-ci:

 Regexp.new '/communications\/$/'
# => /\/communications\/$\// 

qui se traduit par « communications slash slash slash de fin de ligne » que je doute est vraiment ce que vous voulez.

Ruby regexs sont intéressants en ce sont des symboles pour les deux début (^) et à la fin de la ligne ($), ainsi que le démarrage (\A) et à la fin de la chaîne (\Z). C'est pourquoi parfois, vous verrez des gens en utilisant \A et \Z dans leurs expressions rationnelles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top