2012-01-05 2 views
3

Drupal의 블록에 사용자 정의 필드를 추가하고 싶습니다. 페이지의 전체 너비에 걸쳐있는 머리글 영역이 있습니다. 그 아래에는 본문 내용의 왼쪽 열과 다양한 블록의 오른쪽 세로 막대가 있습니다. 헤더 영역에는 텍스트가 표시된 배경 이미지가 있어야합니다. 배경 이미지와 텍스트에 대한 사용자 정의 필드가있는 블록을 통해이 작업을 수행하려고했습니다.Drupal 7의 블록에 사용자 정의 필드를 추가하는 방법은 무엇입니까?

+0

블록을 만들 때 원하는 필드를 선택할 수 있습니다. 이 필드를 사용자 정의 방식으로 렌더링하는 방법을 참조하고 있습니까? 그렇지 않으면 Drupal에서 이미 수행 할 수 있습니다. – Deleteman

+0

@Deleteman : 아마도 콘텐츠 유형을 생각하고 있습니다. 블록에 필드가 붙어있을 수 없습니다. – Clive

+0

다음 번에 drupal.stackexchange.com에 Drupal 질문을 게시하는 것을 고려해보십시오. – gogowitsch

답변

1

보기 모듈, 필드 및 블록을 사용하여이를 수행 할 수 있습니다.

  1. 는 이미지 업로드 필드와 당신이 조회수가 블록으로 표시하는보기를 만들 사용
  2. 표시 할 다른 필드 배경 이미지라는 콘텐츠 형식을 만듭니다. 원하는 경우 다시 쓸 필드를 설정할 수 있습니다.
  3. 보기 설정을 사용하여 배경 이미지를 이미지가 아닌 경로로 표시하십시오.

    <div style="background: [field_image] left top no-repeat"> 
    <h2>[title]</h2> 
    <p>[field_whatever]</p> 
    </div> 
    

    그것은 과잉의 비트처럼 보이지만, 그것은 클라이언트의 손에 그것을 얻을 것이다 :

는 예를 들어 당신이보기에이 사용하는 필드 대체 뭔가를 설정할 수 있습니다. 또한 특정 노드 ID 만 사용하여 수백만 개의 배경 이미지 노드를 만들지 않고 사이트를 파손시키지 않도록 제한을 가하기를 원할 것입니다. 희망이 도움이됩니다.

0

엔티티에 필드를 첨부 할 수 있습니다. 엔티티가 블록이 아니기 때문에 엔티티에 필드를 첨부 할 수 없습니다. 필드 문제를 해결할 수 없다고 생각됩니다.

가장 좋은 방법은 표시하려는 텍스트로 블록의 콘텐츠를 설정하고 CSS를 사용하여 포함 된 div를 타겟팅하고 그 위에 배경 이미지를 넣는 것입니다.

또는 블록 내용의 필터를 '전체 HTML'로 변경하고 스타일을 인라인으로 작성하십시오 (예 :

<div style="background:url(some/path)">Block content here</div> 
+0

그래, 그렇게 HTML을 넣을 수는 있지만 HTML을 모르는 사람들을 위해 편집 할 수 있어야합니다. – Dustin

+0

아마도 기존의 모듈에 대해 잘 모르는 커스텀 모듈을 작성해야 할 것입니다. (그렇다고 말할 것도 없습니다) – Clive

0

Node Blocks을 사용하여 자동으로 블록을 만들 콘텐츠 유형을 정의 할 수 있습니다. 그러면 약간의 CSS 만 있으면 원하는 것을 할 수 있습니다.

4

더 좋은 방법은 코드에 hook_block_info()hook_pages_block_view()을 사용하여 맞춤 블록을 만드는 것입니다. 그런 다음 hook_block_configure()을 통해 추가 필드를 추가하십시오.

api 형식을 사용하면 원하는 유형의 필드를 추가 할 수 있습니다.

+0

예, 폼 요소를 추가하는 것은 일. hook_block_save에 입력 된 데이터의 저장 공간을 처리해야하는데, 단순히 변수 테이블에 문자열을 쓰는 것이 상대적으로 쉽지만 이미지를 처리 ​​할 때는 더 복잡해집니다. – marcvangend

1

나는 그것을하는 방식으로 (그리고 내가 그렇게하는 다른 몇몇 사람들도 알고있다.) 콘텐츠 유형 "블록 콘텐츠"를 만드는 것입니다. 여기서 원하는만큼 필드를 만들 수 있습니다.

그런 다음 블록 유형 (mynodetype)이 표시되는 노드 유형에서 노드 참조 필드를 만듭니다.

그런 다음 뷰 - 차단 : 즉, 사용자가 관계 컨텍스트를 제공하는 "사용자 지정 블록"을 만듭니다.대부분이 컨텍스트는 다음과 같습니다. "mynodetype"의 참조 필드에서 참조하는 노드의 필드 표시 (nodetype : 블록 컨텐트).

나는 이것을 아주 깨끗한 해결책으로 발견했다. 그리고 필요할 때 보여지는 블록이 하나 뿐이므로, 그 내용은 여전히 ​​노드에 있고 블록 관리 페이지를 오염시키지 않으므로 잘 동작한다.

관련 문제