2015-01-12 13 views
5

Sto tentando di mostrare la data in cui è stata apportata una modifica in un'attività. Per fare questo, ho bisogno di ereditare il modello del widget "mail_thread". Quel modello non ha un ID nella sua definizione. This is it:Come ereditare un modello senza ID in 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> 

Nel mio modulo, ho bisogno di sostituire il tag <span> al fine di mostrare la data.

Quindi, come ereditare quel modello e sostituire il tag?

risposta

10

Esistono diversi meccanismi di ereditarietà per i modelli lato client (modelli Web definiti all'interno di un tag <templates>, "compilati" con javascript nel client durante il caricamento) e modelli lato server (di solito le visualizzazioni devono essere incluse nei dati elenca il file __openerp__.py, 'compilato' quando si avvia/aggiorna il server odoo).

si estende web/modelli widget modelli utilizzando <t t-extend="template_name"> seguito da uno o più <t t-jquery="jquery_selector" t-operation="operation"> che agisce un po 'come XPath, ma lato client e più 'potente'.
Non hai bisogno di ID, l'ereditarietà si basa sul nome del modello. (t-name direttiva)

eredità modello viene utilizzato per alterare i modelli esistenti sul posto, per esempio per aggiungere informazioni ai modelli creati da altri moduli.

L'ereditarietà del modello viene eseguita tramite la direttiva t-extend che assume come parametro il nome del modello.

L'alterazione viene quindi eseguita con qualsiasi numero di sotto-direttive t-jquery:

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

Le direttive t-jquery prende un selettore CSS.Questo selettore viene utilizzato su modello esteso per selezionare nodi di contesto a cui si applica il specificato t-operation:

  • accoda
    corpo del nodo viene aggiunto alla fine del nodo contesto (dopo il nodo contesto del ultimo bambino)
  • prepend
    corpo del nodo viene aggiunto all'inizio del nodo di contesto (inserito prima primo figlio del nodo del contesto)
  • prima
    corpo del nodo viene inserita appena prima del contesto nodo
  • dopo
    corpo del nodo viene inserito subito dopo il nodo di contesto
  • interna
    corpo del nodo sostituisce figli del nodo contesto
  • sostituire
    corpo del nodo viene usato per sostituire il nodo di contesto itsel
  • Nessuna operazione
    se non viene specificata alcuna operazione, il corpo del modello viene interpretato come codice javascript ed eseguito con il nodo di contesto come questo
0

Volevo anche cambiare il formato di visualizzazione della data in questo file xml. Così ho copiato l'intero modello per questo layout predefinito sul mio nuovo modulo e ho cambiato solo la data nel tag 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> 

necessità di dichiarare questo file XML nel __openerp__.py

Ha funzionato per me.

Problemi correlati