2012-01-05 11 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だけを使用して、100万のバックグラウンドイメージノードを作成せずにサイトを破壊するような制限を加えたい場合もあります。お役に立てれば。

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:ブロックコンテンツ)。

これは非常にきれいな解決策であり、必要なときに表示されるブロックが1つしかないため、コンテンツはノードに残っており、ブロック管理ページは汚染されていません。

関連する問題