Отделение JSS от CSS в plone.htmlhead

Я использую Plone 3.1.7 в проекте, который требует настройки производительности. Один из твиков требует, чтобы CSS был вверху страницы, а JS - внизу. Однако оба расположены в

<div tal:replace="structure provider:plone.htmlhead" />

В main_template. Как я могу разделить эти?

заранее спасибо

5 ответов

Решение

Мои коллеги нашли решение:

plone.htmlhead - это viewlet, зарегистрированный продуктом plone.app.layout, который загружает три других вида:

  • plone.resourceregistries.styles
  • plone.resourceregistries.scripts
  • plone.resourceregistries.kineticstylesheets

Я добавил в тег HEAD следующее:

<div tal:replace="structure provider:plone.resourceregistries.styles" />

И следующее внизу:

<div tal:replace="structure provider:plone.resourceregistries.scripts" />
<div tal:replace="structure provider:plone.resourceregistries.kineticstylesheets" />

Готово! CSS будут расположены вверху страницы, а JS внизу страницы.

Обычно вам не нужно делать это в Plone, поскольку он настроен на асинхронный запуск JS, поэтому он не должен блокировать рендеринг (о чем и совет по производительности).

Если вы вставляете что-то непосредственно в шаблон, все может измениться, но настройка по умолчанию делает все правильно, если я не понимаю вопрос здесь (что может быть в этом случае:)

Это была известная ошибка в некоторых последних версиях Products.ResourceRegistries. Эта проблема исправлена ​​в выпуске 2.02b. Вы можете закрепить эту версию в вашей сборке:

[versions]
    ...
    Products.ResourceRegistries == 2.02b
    ...

затем повторно запустите buildout, и эта проблема исчезнет.

В заголовке тега в дополнение к

<div tal:replace="structure provider:plone.resourceregistries.styles" />

Я положил

<title tal:define="page_title python: context_state.object_title()"
       tal:content="page_title">page title</title>

....
но на самом деле я потерял все метатеги, связанные с ключевыми словами!

Приведенное выше предложение заменить plone.htmlhead split на 3 вьювлета мне не сработало, так как я потерял заголовок страницы (не подходит для SEO). Я предполагаю, что заголовок страницы также обычно включен plone.htmlhead.

Лучшим решением, по-видимому, является использование более новых предложенных выше Products.ResourceRegistries, за исключением того, что строки компоновки немного ошибочны. Следующее работало для меня:

[версия]

...
Products.ResourceRegistries=2.0b3
...
Другие вопросы по тегам