У меня есть поле URLSegment в моей Silverstripe CMS, и я хочу иметь ссылку там с верхним регистром. Но после сохранения Silverstripe изменит его на строчную строку. Я не могу найти, где это поведение срабатывает. Кто-нибудь знает, как это предотвратить?Как предотвратить использование Silverstripe значения поля URLSegment в нижнем регистре?
ответ
Класс URLSegmentFilter
is responsible for the lower case conversion of the URLSegment, он называет mb_strtotlower
. URLSegmentFilter
вызывается в SiteTreeURLSegmentField
через Sitetree
's generateURLSegment
function.
важная часть, чтобы забрать из этого является то, что функция generateURLSegment
фактически вызывает расширение системы SilverStripe, с тем, если вы делаете расширение данных SiteTree
, вам просто нужно указать функцию под названием updateURLSegment
и сделать свою собственную обработку на вершине, что Silverstripe делает.
Из приведенного выше кода первый аргумент, переданный в вашу функцию updateURLSegement
, будет фильтрованной (и строчной) версией URL-адреса, вторым аргументом будет нетронутое значение.
При этом я буду стараться убедиться, что вы повторно реализуете весь другой код фильтрации, например URLSegmentFilter
(минус нижний регистр), иначе он, скорее всего, сломает систему с недопустимыми символами.
Обратите внимание на это, я бы с осторожностью относился к этому изменению. Разнообразный случай в URL-адресе никому не помогает, некоторые пользователи считают, что URL-адреса чувствительны к регистру, а для некоторых систем это довольно легко. Я не знаю, имел ли Silverstripe этот вопрос, но я не сталкивался с ним с разнообразными проектами, над которыми я работал, или помогал людям.
Еще одна вещь, есть другой способ реализовать аналогичные изменения с использованием Object::useCustomClass
function Silverstripe и полностью переопределить URLSegmentFilter
, хотя использовать это только в качестве последнего средства.
Благодарим вас за быстрый и очень информативный ответ. Я попробовал решение с расширением 'SiteTree', но это не помогло, потому что функция' filter' 'URLSegmentFilter' (с функцией' mb_strtolower') также вызывается в 'onBeforeWrite()' 'SiteTree' , поэтому моя функция updateURLSegment не запускалась при редактировании поля URLSegment в CMS. Вот почему мне пришлось использовать «Object :: useCustomClass» и расширять «URLSegmentFilter» в моем новом классе с помощью функции «фильтр». – user3888130
Ahhhh OK, рад, что у вас это работает. Это полезно знать о том, что он вызывается в 'onBeforeWrite' тоже, сам не забирал это :) – Turnerj
- 1. SilverStripe возвращение URLSegment из SiteTree отношения
- 2. ElasticSearch скопления - в нижнем регистре или не в нижнем регистре
- 3. Строка в нижнем регистре
- 4. get_post_meta в нижнем регистре
- 5. Веб-интерфейс в нижнем регистре
- 6. Как сделать HTML текстового поля в нижнем регистре по умолчанию
- 7. NAnt Свойство в нижнем регистре
- 8. Laravel Факер в нижнем регистре
- 9. В нижнем регистре первое слово
- 10. Как улучшить производительность sql в нижнем регистре
- 11. Переменная XSL в нижнем регистре
- 12. .htaccess URL в нижнем регистре
- 13. #memsql имена в нижнем регистре
- 14. javascript согласные в нижнем регистре
- 15. как в нижнем регистре список в python
- 16. Преобразовать строку в переменной в нижнем регистре
- 17. Как отменить задачу Asynch в нижнем регистре
- 18. CodeIgniter получает значение поля формы в нижнем регистре
- 19. ObjectMapper writeValueAsString() имя метода преобразования поля в нижнем регистре
- 20. Firebird и Table, имя поля в нижнем регистре
- 21. Как преобразовать прописные URL в нижнем регистре
- 22. Как установить строку в нижнем регистре
- 23. Как сбросить экземпляр IEnumerator в нижнем регистре
- 24. в верхнем регистре в нижнем регистре в bash на mac
- 25. Mongoose в нижнем регистре не работает
- 26. str_replace и в верхнем регистре или в нижнем регистре
- 27. java final array в нижнем регистре или в верхнем регистре
- 28. автоматически меняет значения столбцов в нижнем регистре при вставке
- 29. Использование preg_replace, чтобы порядковые появляются в нижнем регистре
- 30. JavaScript заменить() в верхнем или нижнем регистре
уверен, что вы знаете о значениях заглавных букв в URL-адресах? http://wiredimpact.com/blog/never-use-capital-letters-urls/ – schellmax