it-swarm-korea.com

블록 변경 제한

블록을 한 영역에서 다른 영역으로 이동하는 것처럼 편집기에서 블록의 텍스트를 편집하고 다른 구성을 변경하지 못하게하려면 어떻게해야합니까?

7
JM01

약 1 년 후에이 질문으로 돌아온 후, 매우 간단한 두 가지 방법이 있습니다.

블록을 만들고 다음 코드를 블록 본문에 넣습니다.

<?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를 필터링 할 수 있습니다.

이제 누군가에게 컨텐츠 유형을 편집 할 수있는 권한을 부여하지만 컨텐츠 유형을 작성하거나 삭제할 수있는 권한은 부여하지 않습니다.

0
JM01

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_menhook_menu_alter () 를 참조하십시오.

6
kiamlaluno

Block Access 모듈을 참조하십시오.

이 모듈은 개별 블록 수준의 권한뿐만 아니라 블록 생성,보기, 이동, 활성화, 비활성화 및 구성을위한 전역 권한 세트를 추가합니다.

5
user842

Bean 모듈은이 질문에 대답하기위한 대안입니다. 프로젝트 페이지에 대한 인용문은 다음과 같습니다.

Bean을 새로운 유형 (노드와 비교할 때 내용 유형 임)을 제공하는 방법으로 생각하면 필요한만큼 많은 블록을 생성하기 위해 컨텐츠 추가 인터페이스를 제공합니다 (아래 스크린 샷 참조). 그런 다음 다른 블록처럼 빈 컨텐츠를 사이트 주위에 배치 할 수 있습니다.

적절한 Bean 권한 을 부여하는 데 사용할 수있는 옵션과 결합하여이 (위대한) 모듈을 정확하게 사용하려는 방법에 대해 많은 유연성을 제공해야합니다. 구체적인 경우 : BEAN 모듈로 생성 된 각 개별 블록에 대해 일반적인 Permissions 페이지를 사용할 수 있습니다 (admin/people/permissions) : 선택한 역할에 추가/편집 /보기/삭제 액세스 권한을 부여합니다.

이 모듈은 UUID ID Features Integration 모듈과 함께 사용할 수도 있습니다. Bean 모듈에 익숙해지면 사이트에서이 모듈을 사용하려는 다른 사례를 찾을 수도 있습니다 (다른 모듈을 추가해야한다는 사실을 보상합니다).

비디오 자습서 Drupal Bean 모듈 자습서-Bean Admin UI 사용 는이 모듈의 기능과이 모듈로 수행 할 수있는 작업의 종류를 실제로 이해하기위한 훌륭한 소개를 제공합니다. 사용자 정의 코딩이 필요하지 않음). 또한 Bean 모듈이 Drupal 블록을 필드 가능한 엔티티로 변환하는 방법을 보여줍니다.

이 모듈은 D7부터 시작되었으며 (D7에만 도입 된 "엔터티"로 인해) 이미 22K가 넘는 설치를보고했습니다. 아직 사용하지 않는 사람들은 언젠가 D8로 업그레이드하기 위해 준비해야합니다. 이것이 현재 프로젝트 페이지에 표시되어 있기 때문에 (여기에 굵은 마크 업을 추가했습니다) :

이 모듈은 Drupal 8 core 에 포함되어 있습니다. 자세한 내용은 issue 를 참조하십시오. 정보.

0
Pierre.Vriens

내가 권장하는 간단한 해결책 중 하나는 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');
}
0
ericduran