ある領域から別の領域にブロックを移動するときに、編集者にブロック内のテキストを編集させ、他の構成変更を行わせないようにするにはどうすればよいですか?
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を作成し、ノードIDでフィルタリングすることもできます。
次に、コンテンツタイプを編集する権限を誰かに付与しますが、作成または削除する権限は付与しません。
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_men および hook_menu_alter() を参照してください。
Block Access モジュールを参照してください。
このモジュールは、ブロックの作成、表示、移動、有効化、無効化、構成のための一連のグローバル権限と、個々のブロックレベルでの権限を追加します。
Bean モジュールは、この質問に答えるための可能な代替手段です。ここにそのプロジェクトページについての引用があります:
Beanは、新しいタイプを提供するメソッドと考えてください(ノードと比較すると、これはコンテンツタイプです)。追加のコンテンツインターフェースを提供して、必要な数のブロックを作成します(下のスクリーンショットを参照)。 Beanのコンテンツは、他のブロックと同じようにサイトの周りに配置できます。
適切なBean権限を付与するために利用可能なオプションと組み合わせると、この(素晴らしい)モジュールをどのように使用したいかについて、多くの柔軟性が得られます特定のケース:BEANモジュールで作成された個々のブロックごとに、典型的なPermissionsページを使用できます(admin/people/permissions
)選択したロールにAdd/Edit/View/Deleteアクセスを許可します。
このモジュールは [〜#〜] uuid [〜#〜] および ID Features Integration モジュールと組み合わせて使用することもできます。そして、Beanモジュールに慣れると、サイトでこのモジュールも使用したい場合があります(別のモジュールを追加する必要があるという事実を何らかの形で補償します)。
ビデオチュートリアル Drupal Beanモジュールチュートリアル-Bean管理UIの使用 は、このモジュールの能力と、(サイト構築テクニックのみを使用して)モジュールで実行できることを実際に理解するための優れた入門を提供します。カスタムコーディングは含まれません)。また、BeanモジュールがDrupalブロックをフィールド化可能なエンティティに変換する方法も示しています。
このモジュールはD7の時点でのみ開始され(もちろん「D7でのみ導入された「エンティティ」のため)、すでに22Kを超えるインストールが報告されています。まだそれを使用していない人は、いつかD8にアップグレードする準備として間違いなくそれを検討し始める必要があります。これが現在プロジェクトページに表示されているものだからです(ここに太字のマークアップを追加しました)。
このモジュールはDrupal 8コアに含まれています。詳細は issue を参照してください)情報。
私がお勧めする簡単な解決策の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');
}