Перезапись URL с помощью XDV
Мы используем статические HTML-файлы в качестве темы для нашего сайта Plone 4 вместе с коллектива.xdv.
Сами статические HTML-файлы открываются в веб-браузере, что упрощает процесс создания тем для авторов тем.
Однако файлы тем используют директоры ресурсов файловой системы, которые упоминаются в HTML как
<link rel="stylesheet" type="text/css" href="../css/jquery/accordion.css"/>
Как можно было переписать их в абсолютные URL при обслуживании через Plone с пользовательским префиксом? (Это можно сделать в rules.xml??
Например перевести
../images/logo.gif
к
http://portal_url/images/logo.gif
2 ответа
Если вы используете настройку absolute_prefix
<registry>
<record interface="collective.xdv.interfaces.ITransformSettings" field="absolute_prefix">
<value>/++resource++example.sitetheme</value>
</record>
</registry>
и управляйте своими статическими файлами через реестры ресурсов с помощью опции "applyPrefix=True", в которой вы можете использовать как относительные, так и абсолютные URL-адреса внутри html-файла вашей темы (сохраняя возможность для авторов тем просто использовать статический каталог, независимый от Plone) и использовать
<drop theme="/html/head/style" />
<append theme="/html/head" content="/html/head/style " />
удалить их из шаблона темы и извлечь все статические ресурсы обратно из реестров ресурсов (с дополнительным преимуществом их объединения для производственного использования). См. Коллективный.xdv для деталей.
Примечание: хотя Nginx
очень быстро обслуживая статические файлы, мы получили более высокую общую производительность благодаря использованию реестров ресурсов для статических файлов нашей темы в сочетании с обычным кэширующим прокси (Varnish) впереди.
Зарегистрируйте статический каталог как ресурс. Храните каталоги, содержащие правила и файлы мультимедиа отдельно.
Чтобы зарегистрировать каталог ресурсов внутри вашего пакета с именем "my.package", используйте в файле configure.zcml следующее
<browser:resourceDirectory
name="my.package.media"
directory="static"
/>
Теперь в вашем шаблоне вы сможете получить доступ к ресурсу, используя '++resource++my.package.media/name-of-resource', т.е.
<link rel="stylesheet" type="text/css" href="++resource++my.package.media/css/jquery/accordion.css"/>
Теперь это должно работать так, как задумано, даже после перезаписи URL.
Избегайте использования абсолютных путей при определении местоположений ваших правил и шаблонов XDV. Вместо этого просто используйте Python:) Например, мы поместили наши файлы шаблонов (.html) и наши файлы правил (.xml) в каталог с именем xdvstuff внутри нашего пакета:
python://my.package/xdvstuff/theme.html
python://my.package/xdvstuff/theme.xml