CKAN のメイン ナビゲーション メニューのメニュー項目からカスタム拡張機能を利用できるようにしたいと考えています。拡張コードからこの新しいメニュー項目を追加する方法がわかりません。どんな助けでも大歓迎です。
ありがとう、PK
CKAN のメイン ナビゲーション メニューのメニュー項目からカスタム拡張機能を利用できるようにしたいと考えています。拡張コードからこの新しいメニュー項目を追加する方法がわかりません。どんな助けでも大歓迎です。
ありがとう、PK
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 %}
"amazing" はマップされたルートとして 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
..whereは、次に作成するmy_extension/controller.pyckanext.my_extension.controller
へのインクルード パスです。次のもので構成する必要があります。
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 部分にスペルミスがありました
CKANページ拡張機能(CKAN 2.2+ 用) を使用すると、CKAN に基本的なページを追加できます。これには、メイン メニューへの適切なリンクの追加が含まれます。管理者ユーザーは、メニュー内のページの順序を構成し、CKAN の優先 Markdown 言語を使用してページのコンテンツを設定できます。要するに、CKAN を基本的な CMS にします。
詳細: https://github.com/ckan/ckanext-pages
この拡張機能は、もともと OKNF (CKAN の作成者) によって作成された公式の拡張機能であるため、よくできており、(現在) 十分にサポートされています。
メニュー項目の HTML を使用して、関連するテンプレートを拡張機能に追加するだけです。http://docs.ckan.org/en/latest/theming/index.htmlを参照してください。