1

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

谢谢,PK

4

3 回答 3

2

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

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

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

于 2014-07-08T03:27:02.553 回答
2

如果你想利用 CKAN 的主导航菜单,那就有点棘手了。(我们只需要弄清楚这一点。不确定我们是否以正确的方式做到了,但我们确实让它与 CKAN 2.2 一起工作):

首先,您需要扩展路径中的其他内容。假设它位于my_extension/amazing.html,您希望将以下内容添加到my_extension/templates/header.html文件(在您的自定义扩展中):

{% ckan_extends %}

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

这将导致服务器错误,因为“惊人”尚未在 pylons 中注册为映射路线。我们接下来会解决这个问题。如果您已经正确构建了扩展,您应该有一个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

..whereckanext.my_extension.controllermy_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 才能使其生效。

编辑:header.html 部分有拼写错误

于 2013-12-07T07:26:30.157 回答
1

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

于 2013-07-23T10:25:47.437 回答