Изменить существующее выражение xpath в Odoo - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно изменить модуль xpath of Odoo в моем пользовательском модуле.Ниже рассмотрим этот код модуля website_sale V11 (для простоты я сократил код):

<template id="recommended_products" inherit_id="website_sale.product" customize_show="True" name="Alternative Products">
    <xpath expr="//div[@id='product_full_description']" position="after">
        <div class="container mt32" t-if="product.alternative_product_ids">
            <h3>Alternative Products:</h3>                                        
        </div>
    </xpath>
</template>

Например, я хочу заменить

1) position = "after" на position= "до"

ИЛИ

2) expr = "// div [@ id = 'product_full_description']" to expr = "// div [@ id = 'product_small_description']"

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Здесь я объясню очень редкое (недокументированное) и полезное наследование представлений Odoo XML, чтобы иметь возможность заменить все представление без переопределения данных представления записи.

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

<!-- Not Recommended for almost every case -->
<template id="website_sale.product" name="Product">
    ...
    <!-- Reorganize the original view as needed -->
    ...
</template>

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

Предлагаемый способ (редкий и не документированный) использует этот тип наследования:

<template id="recommended_products_ext" inherit_id="website_sale.recommended_products">
    <xpath expr="." position="replace">
        <t name="Alternative Products" t-name="website_sale.recommended_products">
            ...
            <!-- Reorganize the original view as needed -->
            ...
        </t>
    </xpath>
</template>

Этот формат позволяет вводить переопределение исходных представлений по расширению без изменения вручную исходного кода унаследованного представления.Фактически формат: <t name"" t-name=""></t> - это способ, которым Odoo хранит шаблоны qweb в БД, и я извлекаю из этого пользу, позволяя мне представить переопределение всего представления, одновременно играя с наследованием того же самого представления другими.

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

Я считаю этот вопрос хорошим местом для обсуждения этого решения.Но не стесняйтесь оценить, если подать заявку на ваше дело

* Обновление * Пример суть:

https://gist.github.com/aek/d8a3588e1f8c63f96be242f4d6d75b09

0 голосов
/ 28 сентября 2018

Попробуйте вот так

<template id="recommended_products" inherit_id="website_sale.product" customize_show="True" name="Alternative Products">
    <!-- this will replace the existing place of the div -->
    <xpath expr="//div[@id='product_full_description']" position="replace">
    </xpath>
    <!-- this will be the new place of the div. Instead of after you use before -->
     <xpath expr="//div[@id='product_full_description']" position="before">
        <div class="container mt32" t-if="product.alternative_product_ids">
            <h3>Alternative Products:</h3>                                        
        </div>
    </xpath>
</template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...