web-dev-qa-db-ja.com

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

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

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

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

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

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

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

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

(私の環境:Drupal 7、Zenサブテーマ付き。)

11
gingo

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

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

10
Patrick Kenny

drupal 7:

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

[body-summary]

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

3
javier eduardo

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

これを実現するもう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

3
eric.chenchao

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

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

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

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

0
user1795440

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
Mike Juic3

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

0
Csaba