Как добавить свое пользовательское меню в список меню пользователей портала? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть меню с именем Portal Form.Я хочу, чтобы это меню было видимым для пользователей с группой портала.

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

Кто-нибудь может сказать мне, как это достигается в Odoo 11?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Давайте начнем с нуля, создав игрушечный модуль с именем my_module.

Сначала нам нужно создать модель.Файл addons/my_module/models/models.py содержит:



    from odoo import api, fields, models, tools, _

    class Books(models.Model): 
      _name = 'my_module.books'

      title = fields.Char(string='Title')
      author = fields.Char(string='Author')

Теперь мы можем создавать меню, действия и представления.Файл addons/my_module/views/views.xml содержит:



    <?xml version="1.0" encoding="utf-8"?>
    <openerp>
      <data>

        <!-- Top menu item -->
        <menuitem name="My top menu" id="my_module.menu_root"/>

        <!-- menu categories -->
        <menuitem name="My left-side menu" id="my_module.menu_left" parent="my_module.menu_root"/>    

        <!-- Model Books: views, actions and menus -->

        <!-- explicit tree view definition -->
        <record model="ir.ui.view" id="my_module.books_view_tree">
          <field name="name">My books - List view</field>
          <field name="model">my_module.books</field>
          <field name="arch" type="xml">
            <tree>
          <field name="title"/>
          <field name="author"/>
            </tree>
          </field>
       </record>

       <!-- explicit form view definition -->
        <record model="ir.ui.view" id="my_module.books_view_form">
          <field name="name">My books - Form view</field>
          <field name="model">my_module.books</field>
          <field name="arch" type="xml">
        <form string="My books">
          <sheet>
            <group>
              <field name="title"/>
              <field name="author"/>
            </group>
          </sheet>
        </form>
          </field>
        </record>

        <!-- action opening views for this model -->
        <record model="ir.actions.act_window" id="my_module.books_action_window">
          <field name="name">My Books - Window action</field>
          <field name="res_model">my_module.books</field>
          <field name="view_mode">tree,form</field>
        </record>

        <!-- menu for the above action -->
        <menuitem name="Books" id="my_module.menu_books" parent="my_module.menu_left" action="my_module.books_action_window" sequence="6" />

      </data>
    </openerp>

Тогда нам нужен манифест.Файл addons/my_module/__manifest__.py содержит:


    {
        'name': "my_module",
        'summary': "Answer to Stack Overflow Question 52733625",
        'description': "Answer to Stack Overflow Question 52733625",
        'author': "Adán Cortés Medina",
        'website': "http://www.linkedin.com/in/1acme",

        # Categories can be used to filter modules in modules listing
        # Check https://github.com/odoo/odoo/blob/9.0/openerp/addons/base/module/module_data.xml
        # for the full list
        'category': 'Uncategorized',
        'version': '0.1',

        # any module necessary for this one to work correctly
        'depends': ['website'],

        # always loaded
        'data': [
            'views/views.xml',
            #'security/ir.model.access.csv',
        ],
        # only loaded in demonstration mode
        'demo': [
            #'demo/demo.xml',
        ],
    }

На данный момент вы, скорее всего, захотите создать новую базу данных и загрузить модуль.Сверху будет меню с именем My top menu, слева будет надпись «1017 *», а под ним будет меню «1018 *», которое, когда вы щелкнете по нему, отобразит список книг.Модель будет показана.Кроме того, когда вы нажимаете кнопку Create, вам будет показан вид формы для указанной модели.

После того, как она будет протестирована, давайте добавим защиту.Сначала перейдите к файлу __manifest__.py и раскомментируйте #'security/ir.model.access.csv',, удалив начальный #.Затем создайте addons/my_module/security/ir.model.access.csv со следующим содержимым:


"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink"
"access_my_module_books","my_module.books","my_module.model_my_module_books","base.group_portal","True","True","True","True"

Перезапустите Odoo, просто чтобы быть в безопасности, а затем перейдите в меню Apps и перезагрузите модуль, нажав сначала на его карточку, а затемна кнопке Upgrade.

Теперь войдите в режим отладки, добавив debug непосредственно перед # (URL должен быть похож на http://example.com:8096/web?debug#...) и создайте пользователя, убедившись в этомпринадлежит к группе портала (Другое Extra Rights/Portal должно быть отмечено). Нажмите кнопку Save. Найдите раскрывающееся меню Action в верхней части формы и выберите Change password. Введите пароль, нажмитена Save.

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

Наконец, создайте нового пользователя, не принадлежащего к группе Portal, войдите в систему с этим пользователем и убедитесь, что меню «Книги» не отображается.

Вы можете скачать вышеупомянутый игрушечный модуль с https://github.com/AdanCortes/stackoverflow/tree/q52733625

0 голосов
/ 21 мая 2019

XML-код для создания шаблона, т. Е. Новое меню

<template id="your_id" name="your name" inherit_id="portal.portal_my_home" priority="21">
    <xpath expr="//ul[hasclass('o_portal_docs')]" position="inside">
        <li class="list-group-item">
            <span class="badge" t-esc="quotation_count"/>
            <a href="/my/records/portal"> Portal Form</a>
        </li>
    </xpath>
</template>

Код Python ниже и он должен быть в контроллере

class CustomerPortal(CustomerPortal):

    @http.route(['/my/records/portal', '/my/quotes/page/<int:page>'], type='http', auth="user", website=True)
    def portal_my_records(self, page=1, date_begin=None, date_end=None, sortby=None, **kw):     
        print("IN PYTHON CONTROLLER")
        data={}
        return request.render("module_name.template_name", data)

Таким образом, новое менюназывается Portal Form, и если вы нажмете на это меню, вышеприведенная функция python будет работать.И если вы хотите вызвать другой шаблон, вы можете просто ввести имя этого шаблона в ответ на эту функцию, и данные - это значения, которые можно использовать в шаблоне.

Если вы используете другие версии odoo,будет изменено значение атрибутаоризона шаблона.

Надеюсь, вы поняли.Thankyou

0 голосов
/ 10 октября 2018

В Odoo 11 пользователи портала получат доступ к веб-сайту, подобному панели, чтобы иметь возможность доступа к отдельной информации, отображаемой с помощью пользовательских шаблонов.Доступ к порталу можно получить по URL /my/home, например http://example.com/my/home.

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

https://github.com/odoo/odoo/blob/078b31dc7f67f3893bcbe5a3b76936490add0e38/addons/purchase/views/portal_templates.xml

...