如何将菜单项添加到CHAN的导航菜单?

时间:2013-07-21 21:37:44

标签: ckan

我想通过CKAN主导航菜单中的菜单项来实现自定义扩展的功能。不知道如何从我的扩展代码中添加这个新的菜单项。任何帮助将不胜感激。

谢谢, PK

3 个答案:

答案 0 :(得分:2)

如果你想利用CKAN的主导航菜单,它会变得有点棘手。 (我们只需要解决这个问题。不确定我们是否以正确的方式做到了,但我们确实让它与CKAN 2.2一起使用):

首先,您需要在某处的扩展路径中添加其他内容。假设它位于my_extension/amazing.html,您希望将以下内容添加到 my_extension / templates / 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

..其中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')

就是这样。现在,您已经有一个控制器将网址映射到您可以使用h.build_nav_main()调用的导航项。简单吧? ;) 最后一件事。你需要重启apache才能生效。

答案 1 :(得分:2)

CKAN Pages extension(对于CKAN 2.2+)允许向CKAN添加基本页面,包括添加到主菜单的适当链接。管理员用户可以配置菜单中页面的顺序,并使用CKAN首选的Markdown语言来设置页面的内容。从本质上讲,它使CKAN成为一个基本的CMS。

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

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

答案 2 :(得分:1)

您只需要使用菜单项的HTML将相关模板添加到您的扩展程序中。见http://docs.ckan.org/en/latest/theming/index.html