Управление ресурсами CSS по страницам (Odoo)

Каков наилучший способ включить ресурсы css/js в веб-сайт Odoo, где ресурсы загружаются только для определенной страницы?

В примерах и документации говорится о сбросе ваших активов в website.assets_frontend Odoo, и я делаю это, однако бывают обстоятельства, когда я хотел бы использовать шаблоны веб-сайтов, найденные в Интернете, и я действительно не хочу тратить время на просмотр классов css и определение конфликты.

Если сама страница выйдет из строя, это одно, но если она сломает все css на моих существующих страницах, это другое.

Я думал использовать такую ​​технику.

t-if="request.httprequest.path.startswith('/page/path/')"

Использование оператора if, чтобы определить, следует ли включать css в активы веб-сайта или нет.

<odoo>
    <data>
        <template id="page_style" name="Page Style" inherit_id="website.assets_frontend">
            <xpath expr="link[last()]" position="after">
                <t t-if="request.httprequest.path.startswith('/page/path/')">
                    <link href="/addon_name/path/to/css/style.css" rel="stylesheet" type="text/css"/>
                </t>
            </xpath>
        </template>
    </data> 
</odoo>

В любом случае, если кто-то захочет сделать предложение о том, как включить css в активы внешнего интерфейса Odoo, я был бы признателен.


person Phillip Stack    schedule 23.02.2017    source источник


Ответы (1)


Что вы можете сделать, так это вставить:

<head>
      <link href="/addon_name/path/to/css/style.css" rel="stylesheet" type="text/css"/>
</head>

к вашему шаблону, к которому вы хотите применить определенный css/js. Конкретный пример см. addons/website_google_map/views/google_map_templates.xml

Содержимое вашего тега head будет вставлено внутрь тега head окончательного HTML-кода, который будет отображаться для этого шаблона.

Поскольку он кажется простым и используется самой структурой, я прибегнул к его самостоятельному использованию без каких-либо проблем. Насколько я понимаю, вы также можете создать виджет javascript, который будет работать только с вашим шаблоном, который будет применять определенный css. Но приведенное выше решение кажется мне более чистым.

person George Daramouskas    schedule 25.02.2017
comment
Вы можете сделать то же самое с активами js? То есть вы говорите, что все <head/> активы будут объединены и предоставлены клиенту в одном теге заголовка? - person Phillip Stack; 26.02.2017
comment
Джордж, я сделал это на шаблоне внешнего интерфейса. Добавил <head><xml></head> в свой шаблон. Как ни странно, тег <head/> был удален, а ссылка css была помещена вверху моего элемента <main/>. Теперь это технически делает то, что мне нужно, потому что на моей странице есть соответствующий css, однако это не добавляет css к элементу <head/> и не добавляет css к ресурсам внешнего интерфейса. Тот факт, что его нет в элементе <head/>, не имеет большого значения, однако пакет ресурсов повышает скорость за счет минимизации запросов. - person Phillip Stack; 27.02.2017
comment
Не могли бы вы проверить свой css, чтобы увидеть, помещается ли он в тег <head/>, и если да, то приведите рабочий пример. Мой шаблон заключен в <t t-call="website.layout"/>, если он не найден в голове, просто измените свой ответ, и я отмечу его как правильный. Из-за отсутствия других комментариев я предполагаю, что то, что я делаю или то, что вы предлагаете, является единственным разумным подходом, иначе никому нет дела. - person Phillip Stack; 27.02.2017