2015-01-12 1 views
5

Я пытаюсь показать дату изменения в задаче. Для этого мне нужно наследовать шаблон виджета «mail_thread». Этот шаблон не имеет идентификатора в его определении. Это он:Как наследовать шаблон без идентификатора в Odoo?

<?xml version="1.0" encoding="UTF-8"?> 
<template> 

    <!-- 
     mail.Widget template used to namespace the css --> 
    <t t-name="mail.Root"> 
     <div class="oe_mail"> 
     </div> 
    </t> 

... 


        <span t-att-title="widget.date"> 
         <t t-if="widget.timerelative" t-esc="widget.timerelative"/> 
         <t t-if="!widget.timerelative" t-raw="widget.display_date"/> 
        </span> 



... 

</template> 

В моем модуле, мне нужно заменить <span> тег для того, чтобы показать дату.

Итак, как наследовать этот шаблон и заменить тег?

ответ

10

Существуют различные механизмы наследования для клиентских шаблонов (веб-шаблоны, определенные внутри тега <templates>, «скомпилированные» с javascript в клиенте при его загрузке), а серверные шаблоны (как правило, должны быть включены в данные список в файле __openerp__.py, «скомпилированный» при запуске/обновлении сервера odoo).

Вы расширяете шаблоны веб/виджет шаблонов с помощью <t t-extend="template_name"> следуют один или более <t t-jquery="jquery_selector" t-operation="operation">, который действует как своего рода XPath, но на стороне клиента и более «мощным».
Вам не нужны идентификаторы, наследование основано на имени шаблона. (t-name директива)

Шаблон наследования используется для изменения существующих шаблонов на месте, например, для добавления информации в шаблоны, созданные другими модулями.

Наследование шаблона выполняется с помощью директивы t-extend, которая принимает имя шаблона для изменения в качестве параметра.

Изменение затем выполняется с любым количеством трет-JQuery суб-директив:

<t t-extend="base.template"> <t t-jquery="ul" t-operation="append"> <li>new element</li> </t> </t>

Т-JQuery директивы принимает селектор CSS.Этот селектор используется на расширенный шаблон для выбора контекста узлов, к которым применяются указанная т-операция:

  • добавить
    тело узла добавляются в конце узла контекста (после узла контекста последний ребенок)
  • перед именем
    тела узла предваряется узел контекста (вставленный перед первым ребенком из контекста узла)
  • перед тем
    тела узла вставляются непосредственно перед контекстом узел
  • после
    тела узла вставляется сразу после узла контекста
  • внутренного
    тело узла заменяет ребенок узла контекста в
  • заменить
    тела узла используется для замены контекстного узла решите
  • Не работает
    Если t-операция не указана, тело шаблона интерпретируется как код javascript и выполняется с помощью контекстного узла как это
0

Я также хотел изменить формат отображения даты в этом XML-файле. Поэтому я скопировал весь шаблон для этого макета по умолчанию в мой новый модуль и только изменил дату в теге span.

<?xml version="1.0" encoding="UTF-8"?> 
<template> 

    <!-- default layout --> 
    <t t-name="mail.thread.message"> 
    .... 

     <span t-att-title="widget.date"> 
      <!--<t t-if="widget.timerelative" t-esc="widget.timerelative"/>--> 
      <!--<t t-if="!widget.timerelative" t-raw="widget.display_date"/>--> 
      <t t-raw="widget.display_date"/> 
     </span> 

    .... 
    </t> 
</template> 

нужно объявить этот XML-файл в __openerp__.py

Он работал для меня.