我想通过CKAN主导航菜单中的菜单项来实现自定义扩展的功能。不知道如何从我的扩展代码中添加这个新的菜单项。任何帮助将不胜感激。
谢谢, PK
答案 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