Как добавить собственное меню в список меню пользователей портала?

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

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

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


person Megha Sirisilla    schedule 10.10.2018    source источник


Ответы (3)


Давайте начнем с нуля, создав игрушечный модуль под названием 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, затем слева будет метка с надписью My left-side menu, а под ним будет меню с надписью Books, при нажатии на которую будет показан список для модели книг. Кроме того, когда вы нажимаете кнопку 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) и войдите в систему с пользователем, которого вы только что создали. Там должно быть показано меню "Книги".

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

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

person Adan Cortes    schedule 11.10.2018
comment
Привет .. спасибо за такой подробный ответ. Просто чтобы проверить, работает ли модуль, указанный в приведенной выше ссылке, с моими тестовыми надстройками или нет, я установил его после загрузки. Поэтому, когда я вхожу в систему с демо-пользователем, я не вижу меню «Книги». Как и обычные пользователи. Это может видеть только админ. - person Megha Sirisilla; 23.10.2018
comment
В любое время, Мэг. Обычно обычные пользователи не принадлежат к группе portal, но они должны иметь возможность видеть меню, если вы добавите их вручную, отредактировав участников группы portal. Если что-то пойдет не так, напишите мне. - person Adan Cortes; 31.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

person Axel Mendoza    schedule 10.10.2018

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, наследуемый_id шаблона будет изменен.

Надеюсь, ты понял. Спасибо

person Tintuk Tomin    schedule 21.05.2019