フルコンテンツビューで本文全体に要約(ティーザー)を表示する方法


11

次の「フルコンテンツ」レイアウトのように、タイトルの下の各記事の上部にティーザーを表示したいと思います。

  1. 題名
  2. ティーザー(記事の要約)
  3. 画像

さらに、ティーザーには独自のフォーマットを設定する必要があります(たとえば、イタリックで大きなフォント)

TPLファイルまたはコアファイルを編集せずにそれを行う方法は見つかりませんでした。

解決策は、新しいフィールド「article_teaser」をコンテンツタイプに追加し、表示を管理して「フルコンテンツ」ビューでレイアウトを取得することです。これは機能しますが、同じテキストを2回入力する必要があるため、入力コンテンツフォームにティーザーフィールドが2つあるのは望ましくありません。

フィールド本文を「テキスト」と「要約」の部分に分割できないようですが、どちらか一方しか表示できません。両方は表示できません。

それを行う方法(モジュール?)はありますか?

(私の環境:Zen SubテーマのDrupal7。)

回答:


10

ビューでこれを行うことができます。コンテンツタイプのパスをオーバーライドするビューを作成します。表示を[ フィールド]に設定してから、本文フィールドを2回追加します。最初のインスタンスをティーザーを表示するように設定し、2番目のインスタンスを本文を表示するように設定します。間に画像を追加できます。ビューを使用すると、ティーザー/本文フィールドのCSSを簡単にカスタマイズできます(デフォルトでは、ビューにはいくつかのクラスが用意されており、必要に応じてクラスを追加できます)。

参考: ビューの使用に関するノード1シリーズのビデオスクリーンキャスト


どうもありがとうございました。リンクは非常に便利であり、私はビューについて多くを学んでいます。しかし、ビューにはノードのリストが表示されますが、コンテンツタイプ(ブックページ)は単一のページです。単一のブックページ(ノード)をノードのリスト(作成したビュー)でオーバーライドするにはどうすればよいですか?ビューに関する何か、おそらくデフォルトのブックページを独自のページでオーバーライドする方法が不足していると思います。
gingo 2013

@gingoすべてのブックページをオーバーライドするには、特別な方法でビューパスを構成する必要があります。例として、デフォルトで無効になっているビューによって提供される分類用語ビューを見てください。パスはに設定されてい/taxonomy/term/%ます。そのビューを編集すると、引数(コンテキストフィルター)がどのように取り込まれて、分類用語の表示を編集できるかを確認できます。あなたのサイトの本のページに似たようなものを設定できます。
Patrick Kenny

まあ、私はコンテキストフィルターをより深く見なければなりませんが、私は正しい方向に進んでいると思います。ありがとうございました。
gingo 2013

3

ビューは間違いなく仕事をすることができます。しかし、私はそれがこの要件にとって少しやり過ぎだと思います。

これを実現するもう1つの方法は、カスタムモジュールにhook_field_extra_fields()およびhook_node_view()を実装することです。

/**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary,
      '#weight' => 0,  
    );
  }
}

キャッシュをクリアすると、コンテンツタイプの[表示の管理]設定に移動して、ドラッグアンドドロップで[本文の要約]フィールドを配置できます。例えばadmin/structure/types/manage/page/display


これは近いと思いますが、フィールドのコンテンツは表示されませんArray
arjan 2014年

@arjanさん、配列データを確認してここにコピーしてください。
eric.chenchao 2014年

変数を作成するポイントは何ですか?変数が使用される唯一の場所の1行上で、ifステートメントに文字列を
挿入

こんにちは@Kiee、あなたは正しいです。しかし、このスニペットはコメント付きの例として使用されています;)
eric.chenchao 2017年

3

drupal 7の場合:

フィールドBodyでは、「rewrite result」を使用し、「replacement pattern」でこれを使用できます。

[body-summary]

これにより、完全な要約が表示されます。


あなたは天才ハビエルであり、他のすべての過剰な説明は、あなたの説明が断然最高で最も簡単に機能するものです!
Bruno Vincent

0

コンテンツタイプの再定義では、パネルの機能の1つが特定のコンテンツタイプ(または他の選択基準に基づく情報)の基本的な外観を正確に再定義しているため、パネルを確認する必要があります。


0

ArjanがCityreaderのスニペットで結果を生成したことに気づいたように、適切にレンダリングされません。

このバリエーションは私にとってうまくいきました:

 /**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary['#items'][0]['safe_summary'],
      '#weight' => 0,  
    );
  }
}

0

ビューとディスプレイスイートモジュールを使用したコードなしのソリューションに興味がある場合は、次のことができます。

  1. サマリーフィールドを含むViewsブロックを作成します。詳細設定のコンテキストフィルターオプションで、URLからのコンテンツIDタイプで[デフォルト値を提供]オプションを設定できます。

  2. [コンテンツタイプ]-> [コンテンツタイプ]-> [表示の管理]で、[カスタムフィールド]オプション(下部のメニュー)を選択し、手順1で作成したビューからカスタムブロックフィールドを作成します。

  3. 保存すると、カスタムフィールドがノードタイプフィールドリストに表示され、表示するリージョンを選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.