特定のスペースでのみ機能を利用できるようにする方法は?
-
16-10-2019 - |
質問
Drupal 6のオープンアトリウムサイト(つまり、機能、スペース、オーガニックグループ)の場合、私は実行しています。サイトの数百のグループのほんの一握りにのみ適用されるカスタム機能をいくつか作成しました。
現状では、「機能のカスタマイズ」構成画面が表示されます 全て 私が意図的にいくつかの特別なグループに制限したいものを含む機能。
特別なグループにこれらの機能を保持しながら、これらの特別な機能がすべてのグループに提供されるのを防ぐための最良の方法は何ですか?
解決
各スペースの機能は、を介して構成されています spaces_features_form()
関数。実装できます hook_form_alter()
特定のグループから機能を選択的かつ条件付きで削除します。
function MYMODULE_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'spaces_features_form') {
$space = spaces_get_space();
// Populate the array with hard-coded NIDs, or whatever logic
// needed to determine if these features should be allowed.
if ($space->type == 'og' && !in_array($space->group->nid, array(...))) {
// Hide features foo and bar.
foreach (array('feature_foo', 'feature_bar') as $feature) {
$form['spaces_features'][$feature]['#access'] = FALSE;
}
}
}
}
他のヒント
機能はモジュールです。モジュールはシステム全体で有効になり、スペースまたはグループにリンクすることはできません。ただし、カスタムアクセスを作成することでアクセスを制御できます。 hook_perm().
このhook_permの提案に、グループタイプに基づいて該当する機能を無効にするためにフォームの変更を追加します。 hook_form_alterはおそらく機能しないため、機能に関連するアイテムがまだ存在していません。登録する必要がある場合があります #after_build フックして、それに応じてフォームを変更します。
コンテキストは間違いなく行く方法です。
環境, 特徴 と スペース 強力な組み合わせです。このDevelopmentSeedの投稿は次のように役立ちます。 コンテキストとスペースを備えたDrupalで「ブログ機能」を構築する
最初からすべての機能を有効にしてもらえますか? 環境?私はまだ自分でコンテキストを試す機会がありませんでしたが、それはフィットのように聞こえます。