2014-12-23 1 views
0

Silverstripe CMS에 URLSegment 필드가 있는데 대문자와 링크가 필요합니다. 그러나 저장 후 Silverstripe는 소문자 문자열로 변경합니다. 이 동작이 실행되는 곳을 찾을 수 없습니다. 아무도, 그것을 방지하는 방법을 알고 있습니까?실버 스트라이프가 URLSegment 필드 값을 소문자로 변경하는 것을 방지하려면 어떻게해야합니까?

+1

대문자가 URL에 미치는 영향에 대해 알고 계실까요? http://wiredimpact.com/blog/never-use-capital-letters-urls/ – schellmax

답변

1

클래스 URLSegmentFilteris responsible for the lower case conversion of the URLSegment이면 mb_strtotlower을 호출합니다. URLSegmentFilterSiteTreeURLSegmentField에서 Sitetree's generateURLSegment function을 통해 호출됩니다.

이 당신이 SiteTree의 데이터 확장을 할 경우, 당신은 단지 updateURLSegment를라는 함수를 지정하고 상단에 자신의 처리를 할 필요가 있도록 generateURLSegment 기능이 실제로 Silverstripe의 확장 시스템을 호출하는 것입니다 멀리 취할 수있는 중요한 부분이 무엇인지 Silverstripe 않습니다.

위에서 링크 한 코드에서 updateURLSegement 함수에 전달 된 첫 번째 인수는 필터링 된 URL 버전이며 두 번째 인수는 변경되지 않은 값입니다.

이렇게하면 URLSegmentFilter (소문자 빼기 호출 제외)과 같은 다른 필터링 코드를 모두 다시 구현해야합니다. 그렇지 않으면 잘못된 문자로 시스템이 손상 될 수 있습니다.

이에 대한 보조 자료로, 실제로이 변경을 수행하는 것에주의해야합니다. URL에 대소 문자를 구별하는 것은 누구에게 도움이되지 않지만 일부 사용자는 URL이 대소 문자를 구분한다고 생각할 수 있으며 일부 시스템의 경우 매우 쉽게 될 수 있습니다. 나는 실버 스트라이프가 그 문제를 안고 있는지 알지 못한다. 내가 일한 다양한 프로젝트에 대해 알지 못했다.

더 빨리 한 가지 방법은 Silverstripe의 Object::useCustomClass function을 사용하여 유사한 변경을 구현하고 마지막 수단으로 만 사용하는 URLSegmentFilter을 완전히 대체하는 또 다른 방법입니다.

+0

빠르고 유익한 답변을 해주셔서 감사합니다. 나는'SiteTree'를 확장하면서이 솔루션을 시도했지만 도움이되지 않았습니다.'URLSegmentFilter' ('mb_strtolower' 함수 사용)의'filter' 함수는'SiteTree'의'onBeforeWrite()'에서 호출되기 때문에 도움이되지 않았습니다. , 그래서 내'updateURLSegment' 함수는 CMS의 URLSegment 필드를 편집 할 때 트리거되지 않았습니다. 그래서'Object :: useCustomClass'를 사용하고 오버라이드 된'filter' 함수로 새로운 클래스에서'URLSegmentFilter'를 확장해야했습니다. – user3888130

+0

Ahhhh 좋아, 다행이야. 그것은'onBeforeWrite'에서 너무 불려지는 것을 알기에 유용합니다. 직접 선택하지 않았습니다 :) – Turnerj

관련 문제