Переписывание URL-адресов с помощью XDV

#html #css #themes #plone #xdv

#HTML #css #темы #plone #xdv

Вопрос:

Мы используем статические HTML-файлы в качестве темы для нашего сайта Plone 4 с collective.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
  

Ответ №1:

Если вы используете параметр «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 " />
  

удалить их из шаблона темы и вернуть все статические ресурсы обратно из реестров ресурсов (с дополнительным преимуществом их объединения для производственного использования). Подробности см. в collective.xdv.

Примечание: хотя Nginx мы очень быстро обслуживаем статические файлы, мы получили лучшую общую производительность от использования реестров ресурсов для статических файлов нашей темы в сочетании с обычным кэширующим прокси (Varnish) спереди.

Комментарии:

1. Спасибо! Это то, что я искал. Вы знаете, где находится этот код, если я захочу его вставить?

Ответ №2:

Зарегистрируйте статический каталог как ресурс. Храните каталоги, содержащие правила, и медиафайлы отдельно.

Чтобы зарегистрировать каталог ресурсов внутри вашего пакета с именем ‘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
  

Комментарии:

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