回答:
Drupalでは、ブロックを管理する権限を持つユーザーのみが、ブロックが割り当てられているリージョンなど、ブロック設定を変更できます。
私の知る限り、ユーザーにもっときめ細かい権限を割り当てることができるモジュールはありません。ユーザーが編集を許可されているフィールドのみを表示する独自のカスタムモジュールを作成する必要があります。
たとえば、次のコードは、ブロックの構成フォームを構築する関数block_admin_configure()からフォームビルドを変更し、「ブロックタイトルの編集」権限を持つユーザーがブロックタイトルを編集できるようにします。
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['settings']['title'])) {
$form['settings']['title']['#access'] = user_access('edit block titles');
}
}
この関数は、mymodule.moduleという名前のモジュール用に作成されたhook_form_FORM_ID_alter()の実装です。
領域設定(ブロックが出力されるテーマ領域)のフィールドは、に含まれてい$form['regions']
ます。フィールドセットには、有効になっている各フィールドの選択フィールドが含まれています。
「ブロック領域の編集」権限を持つユーザーのみにフィールドセットを表示するには、たとえば次のコードを使用できます。
function mymodule_form_block_admin_configure_alter(&$form, &$form_state, $form_id) {
if (isset($form['regions'])) {
$form['regions']['#access'] = user_access('edit block regions');
}
}
ブロックを管理する権限を持つユーザーは、ブロックに割り当てられたリージョンをhttp://example.com/admin/structure/blockから変更できます。「ブロック領域の編集」権限のないユーザーにそのページへのアクセスを許可しない場合は、そのメニューのアクセスハンドラーを変更し、デフォルトのアクセスハンドラーを、FALSE
ユーザーにその権限がない場合に返されるカスタムのアクセスハンドラーに置き換える必要があります。
詳細については、hook_menuおよびhook_menu_alter()を参照してください。
1年ほど後にこの質問に戻った後、非常に簡単な2つの方法があります。
ブロックを作成し、次のコードをブロック本体に配置します。
<?php
$node = node_load(77);//77 is the nid of the node I want to put in the block.
$node_content = node_view($node,"full");
print render($node_content);
?>
または、ビューブロックを作成し、ノードIDでフィルタリングすることもできます。
次に、コンテンツタイプを編集する権限を誰かに与えますが、コンテンツタイプを作成または削除する権限は与えません。
私がお勧めする簡単な解決策の1つは、Boxesモジュールをチェックアウトすることです。このモジュールは、ブロックの(AJAXを介した)優れたインライン編集オプションを提供します。これにより、編集者はブロック内のテキストを非常に簡単に変更できます。権限は引き続きエディターの「ブロックの管理」である必要がありますが、インラインでブロックを編集できるようになるため、ブロック構成ページにアクセスする必要はありません。
ここで、そのブロック構成ページへのアクセスの削除を要求する場合は、次のコードなど、ブロック構成ページに必要な権限を変更する単純なメニュー変更を実行できます。
function hook_menu_alter(&$items) {
//Example Use Case, switching permission from "administer block" to "administer site configuration"
$items['admin/structure/block']['access arguments'] = array('administer site configuration');
}
豆のモジュールは、この質問に答えるために可能な選択肢です。ここにそのプロジェクトページについての引用があります:
Beanは、新しいタイプを提供するメソッドと考えてください(ノードと比較すると、これはコンテンツタイプです)。追加のコンテンツインターフェースを提供して、必要な数のブロックを作成します(下のスクリーンショットを参照)。Beanのコンテンツは、他のブロックと同じようにサイトの周りに配置できます。
適切なBeanパーミッションを付与するために利用可能なオプションと組み合わせると、特定のケースでこの(素晴らしい)モジュールを正確にどのように使用したいかについて多くの柔軟性が得られるはずです。BEANモジュールで作成された個々のブロックごとに、選択したロールに追加/編集/表示/削除アクセスを許可するための一般的な[ 権限]ページ(admin/people/permissions
)。
このモジュールは、UUIDおよびUUID機能統合モジュールと組み合わせて使用することもできます。また、Beanモジュールに慣れると、サイトでこのモジュールを使用したい場合があるかもしれません(別のモジュールを追加する必要があるという事実を何らかの形で補償します)。
ビデオチュートリアルDrupal Beanモジュールチュートリアル-Bean管理UIを使用すると、このモジュールの機能と、このモジュールで実行できる操作(サイト構築手法のみを使用し、カスタムコーディングは不要)を理解するための優れた入門書が提供されます。また、BeanモジュールがDrupalブロックをフィールド化可能なエンティティに変換する方法も示しています。
このモジュールはD7の時点でのみ開始され(もちろん、D7でのみ導入された「エンティティ」のため)、すでに22Kを超えるインストールが報告されています。まだそれを使用していない人は、いつかD8にアップグレードする準備として間違いなくそれを検討し始める必要があります。これが現在プロジェクトページに表示されているものだからです(ここに太字のマークアップを追加しました)。
このモジュールはDrupal 8コアに含まれています。詳細については、この問題を参照してください。