CSS ‹link› href теряет начальную косую черту, используя SilverStripe

Я использую SilverStripe в качестве CMS (http://www.silverstripe.com/services/why-choose-us/open-source-cms/) вместо Joomla или Drupal, и по большей части это отличный опыт. уже. Однако эта проблема настолько странная, что я даже не уверен, имеет ли к ней какое-либо отношение SilverStripe. По сути, ссылки на CSS-файлы, установленные в шаблоне, теряют начальную косую черту при выводе разметки в браузер. Очевидно, что это может быть очень проблематично.

Это головной раздел в соответствующем шаблоне:

<!DOCTYPE html>
<html>
<head>
    <% base_tag %>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=720, maximum-scale=1.0" />
    <title>$Title</title>
    <link rel="stylesheet" type="text/css" 
        href="/framework/admin/thirdparty/jquery-notice/jquery.notice.css?m=1342411326" />
</head>

Ссылки на самом деле генерируются в шаблоне динамически, но я поместил эту ссылку в себя, чтобы изолировать проблему. Даже вручную добавленная в шаблон разметка ссылки будет иметь вид href="framework/admin/ ThirdParty/jquery-notice/jquery.notice.css?m=1342411326", исходная ссылка без косой черты в начале, /. Кто-нибудь знает, как это может произойти? Неважно, нахожусь ли я в Chrome, Safari или Firefox, все они ведут себя одинаково.

Я заметил, что могу «исправить» проблему, разбив весь документ. Если я добавлю символ перед <!DOCTYPE html>, href в ссылке css снова укажет на корень с косой чертой в начале. Это из-за типа документа, базового тега или какой-то странной комбинации этих двух факторов?

Одна из странных проблем, с которыми я столкнулся...


person mycrazydream    schedule 01.08.2012    source источник
comment
Как вы включаете свои файлы CSS? Из классов PHP, использующих Requirements::themedCSS()? Или использовать специальные теги шаблона themedCSS()? Проверьте вызов <% base_tag %>, который у вас есть в шаблоне. Этот тег SS выведет что-то вроде <base href="http://example.com/" />. Насколько я знаю, это необходимое требование для SilverStripe, и его нельзя удалить без неожиданного поведения.   -  person Benjamin Smith    schedule 01.08.2012
comment
Базовый тег выглядит правильно: <base href="http://www.brooksransom.com/"><!--[if lte IE 6]></base><![endif]-->. Мой локальный сайт разработки выводит ту же структуру для базы, но она работает. И что касается вашего вопроса, SS CMS вводит JS и CSS в LeftAndMain::init() с помощью этого вызова: Requirements::css(FRAMEWORK_ADMIN_DIR . '/thirdparty/jquery-notice/jquery.notice.css'); для каждого из файлов.   -  person mycrazydream    schedule 02.08.2012
comment
brooksransom.com не является сайтом SilverStripe, верно? У вас есть субдомен dev или что-то подобное? Если это так, это может быть вашей проблемой. Я понимаю, что не хочу делиться вашим URL-адресом, но убедитесь, что фактический URL-адрес сайта соответствует тому, что сгенерировано в теге <BASE>. Кроме того, ссылки не должны начинаться с / — об этом позаботится тег <BASE>. Все URL-адреса, сгенерированные SilverStrip, являются относительными.   -  person Benjamin Smith    schedule 07.08.2012


Ответы (3)


По умолчанию SilverStripe намеренно пропускает косую черту в начале и использует базовый тег, чтобы убедиться, что ссылки ведут в нужное место. Причина, по которой это было сделано, заключалась в том, чтобы упростить создание сайтов, которые по-прежнему будут работать, если сайт запускается с под-URL, так что, например, сайт разработки может находиться по адресу http://localhost/mysite/.

Это причина, по которой все летит к черту, если вы избавляетесь от базового тега — SilverStripe был создан, ожидая, что он будет там.

Однако он не должен удалять начальные косые черты в URL-адресах. Скорее всего, это будет делать класс ContentNegotiator, и это приведет к другому поведению, если вы ошибетесь с типом документа.

Раньше он был включен по умолчанию, но в версиях 2.4 и 3.0 он должен быть отключен по умолчанию. Какую версию SilverStripe вы используете?

person Sam Minnée    schedule 14.10.2012

Попробуйте добавить дополнительный / в место, откуда создается ссылка.

person Kode Plus    schedule 01.08.2012
comment
Больше комментарий, чем ответ - person asprin; 01.08.2012

вы пробовали тег base?

Если это не сработает, вы можете попробовать поместить туда всю ссылку, например. http://website.com/framework...

person Trouble    schedule 01.08.2012
comment
Базовый тег находится там, и его удаление вызывает много других проблем. - person mycrazydream; 01.08.2012
comment
Возможно. Для этого мне пришлось бы переписать или расширить часть кода SilverStripe, и, как правило, лучше этого избегать, потому что это может вызвать проблемы, если им когда-либо понадобится использовать SSL-соединение (https). Это конечно можно преодолеть. Попробую и отчитаюсь. - person mycrazydream; 02.08.2012
comment
Я должен удалить этот пост, так как проблема отличается от того, что я объяснил. Файлы CSS немного отвлекают внимание. Поскольку базовый тег находится там, файлы css читаются правильно, даже если они имеют относительные пути. CMS по-прежнему вообще не загружает главную панель, и почему-то ломает документ, ставя символ перед тегом DOCTYPE, исправляет это. - person mycrazydream; 02.08.2012