如何将菜单项添加到CKAN的naivigation菜单?(How to add a menu ite

2019-10-18 09:33发布

我想要通过在CKAN的主导航菜单的菜单项可自定义扩展的功能。 不知道我怎样才能从我的扩展代码添加这个新的菜单项。 任何帮助,将不胜感激。

谢谢,PK

Answer 1:

如果你想利用CKAN的主导航菜单,它变得有点棘手。 (我们只是图了这一点不知道,如果我们这样做,是正确的做法,但我们没有得到它与2.2 CKAN工作。):

首先,您需要在您的扩展路径中的附加内容的地方。 假设它在my_extension/amazing.html ,要添加以下到my_extension /模板/ header.html中的文件(在你的自定义扩展):

{% ckan_extends %}

{% block header_site_navitagtion_tabs %}
  {{ h.build_nav_main(
    ('search', _('Datasets')),
    ('organizations_index', _('Organizations')),
    ('group_index', _('Groups')),
    ('about', _('About')),
    ('amazing', _('Amazing Extension'))
  ) }}
{% endblock %}

这将导致服务器错误,因为“惊艳”尚未在塔为映射路径注册。 我们会解决这个问题下一个。 如果你已经建立了你的扩展正确,你应该有一个my_extension / plugins.py,到你需要添加以下到您的插件的类定义:

class AmazingPlugin(plugins.SingletonPlugin, tk.DefaultDatasetForm):
    #or
    plugins.implements(plugins.IRoutes, inherit=True)
    def before_map(self, m):
        m.connect('amazing', #name of path route
            '/amazing', #url to map path to
            controller='ckanext.my_extension.controller:AmazingController', #controller
            action='amazing') #controller action (method)
        return m

..where ckanext.my_extension.controller是包括路径my_extension / controller.py,我们将创造未来。 它应包括:

import ckan.plugins as p
from ckan.lib.base import BaseController

class AmazingController(BaseController):
    def amazing(self):
        return p.toolkit.render('amazing.html')

而已。 现在,您已经有了一个控制器映射的URL,你可以调用一个导航项目h.build_nav_main() 简单吧? ;) 最后一件事。 你需要重新启动Apache使其生效。



Answer 2:

该CKAN网页扩展 (用于CKAN 2.2+)允许添加基本的页面CKAN,包括增加了相应的链接到主菜单。 管理员用户可以在菜单中设置的页面顺序并使用CKAN的首选降价语言设置页面的内容。 从本质上说,它使CKAN成基本CMS。

更多信息: https://github.com/ckan/ckanext-pages

该扩展是一个官方扩展最初由OKNF(CKAN的制造商)创造,所以它做得很好,(目前)很好的支持。



Answer 3:

你只需要到相关的模板添加到您的扩展与HTML为您的菜单项。 见http://docs.ckan.org/en/latest/theming/index.html



文章来源: How to add a menu item to CKAN's naivigation menu?
标签: ckan