Как включить в Odoo?

Я немного новичок в Odoo (стажировка), поэтому я хотел знать, есть ли эквивалент включения (php) в Odoo (qweb)?

Иначе как мы можем включить xml-файл в другой?

Например, у меня есть основной xml-файл, и я хочу вызвать разные страницы или части страниц (по идентификатору или классу) на свою главную страницу, возможно ли это и как мы можем это сделать?

Я пробовал xiinclude, но, похоже, он там не работает... Я видел, но не могу понять, как это работает, даже с документацией odoo.

Я работаю над Odoo 10.

С уважением,


person Sacha Stamierowski    schedule 25.01.2017    source источник


Ответы (1)


Эквивалентом является функция или директива t-call. t-call включает еще один файл шаблона. Вы можете использовать его для переноса содержимого, для которого обычно используется шаблон website.layout, как показано в примере ниже.

<openerp>
    <data>
        <template id="addon_name.template_name" name="Template Name">
            <t t-call="website.layout">
                <div>Hello World</div>
            </t>
        </template>
    </data>
</openerp>

Однако вам не нужно использовать его в качестве оболочки для контента. Вы можете использовать эту директиву как средство для включения других шаблонов в существующий шаблон. Именно так.

<openerp>
    <data>
        <template id="addon_name.template_name" name="Template Name">
            <t t-call="website.layout">
                <t t-call="addon_name.top_section"/>
                <t t-call="addon_name.middle_section"/>
                <t t-call="addon_name.bottom_section"/>
            </t>
        </template>
    </data>
</openerp>

Чтобы это работало, вы должны уже определить свои шаблоны, в моем примере это будут top_section, middle_section и bottom_section. Также обратите внимание, что эти шаблоны не включают оболочку для файла website.layout. При включении подшаблона вы не хотите включать шаблон website.layout, так как он предназначен для обеспечения общей структуры веб-страницы и предназначен для использования в качестве оболочки для остального вашего контента.

<openerp>
    <data>
        <template id="addon_name.top_section" name="Top Section">

                <div>Hello World</div>

        </template>
    </data>
</openerp>

Если вы наследуете от другого шаблона, вы должны сначала сообщить обработчику шаблонов, куда вы хотите внедрить свой код. Это делается с помощью выражения xpath. В исходном коде Odoo есть много примеров xpath выражений. Пожалуйста, просмотрите там или в Интернете. Приведенный ниже пример является ответом на сделанные ниже комментарии, касающиеся конкретно шаблона отчета. При создании шаблонов отчетов не следует включать шаблон website.layout. Это для просмотра веб-сайта, а не для отчета qweb.

<openerp>
    <data>
        <template id="addon_name.template_name" inherit_id="addon_name.template_name">
            <xpath expr="//div[@class='class_name']" position="replace">
                    <t t-call="addon_name.top_section"/>
                    <t t-call="addon_name.middle_section"/>
                    <t t-call="addon_name.bottom_section"/>
            </xpath>
        </template>
    </data>
</openerp>
person Phillip Stack    schedule 25.01.2017
comment
Где вы создали свои шаблоны top_section, middle_section и bottom_section, я имею в виду, в каком файле и что делать с унаследованными файлами, потому что у меня возникла проблема, связанная с этим, t-call= не может быть расположен в родительском представлении... - person Sacha Stamierowski; 26.01.2017
comment
prntscr.com/e0j3a2 prntscr.com/e0j3fb там мои файлы - person Sacha Stamierowski; 26.01.2017
comment
Поскольку вы наследуете, вам нужно сначала дать вашему шаблону позицию в родительском шаблоне, чтобы внедрить код вашего шаблона. Вероятно, существует реальный термин для описания того, что я только что сказал, однако я не знаю, что это такое. Я обновлю свой код примером включения другого шаблона xml в унаследованное представление. Глядя на ваш пример, я думаю, вам нужно просто переместить t-call внутри вашего выражения xpath. - person Phillip Stack; 26.01.2017
comment
Шаблоны могут быть помещены в один xml или несколько xml файлов. На эти файлы должна быть ссылка в файле openerp.xml или manifest.xml. Как только ваш аддон будет обновлен, Odoo сохранит эти шаблоны в базе данных, чтобы, когда вы ссылаетесь на них в своем коде, он находил их и вставлял в ваш шаблон. - person Phillip Stack; 26.01.2017
comment
Я внес ваше изменение, и теперь я получил эту ошибку prntscr.com/e0mmet , я не думаю, что это хуже, чем другой, но мой шаблон titi определен, как я сделал в моей предыдущей ссылке на экран, или мне нужно коснуться в файле дополнений или что-то в этом роде. Для записи оба моих xml-файла помещены в одну папку, я работаю на Odoo с недели, это тоже непросто понять работу ... Я помещаю их в манифест с самого начала. - person Sacha Stamierowski; 26.01.2017
comment
Я слышу тебя. Чтобы понять, как работает система, может потребоваться некоторое время. Я тоже еще учусь. Не имеет значения, где находятся ваши xml-файлы (при условии, что они находятся в вашем аддоне, и ваш файл manifest или openerp правильно указывает на них. Попробуйте указать имя вашего аддона перед именем шаблона в вашем t-call. Это может быть проблема с пространством имен. - person Phillip Stack; 26.01.2017
comment
Если вы правильно загрузили свои шаблоны в систему, вы сможете найти их в Настройках/Пользовательском интерфейсе/Видах. - person Phillip Stack; 26.01.2017
comment
Вы также можете проверить external_id. Это то, на что вы должны ссылаться в своем t-call - person Phillip Stack; 26.01.2017
comment
Это сработало, и я поставил название аддона перед названием шаблона, большое спасибо за ваше время, хорошего дня! - person Sacha Stamierowski; 26.01.2017
comment
Не могли бы вы сделать мне одолжение и отметить мой ответ как правильный? Спасибо! Рад, что смог помочь. - person Phillip Stack; 26.01.2017
comment
Готово, желаю удачного продолжения. - person Sacha Stamierowski; 26.01.2017
comment
Спасибо, Саша. Ты тоже. - person Phillip Stack; 26.01.2017