Comment afficher le résumé (teaser) sur le corps dans une vue de contenu complète


11

Je souhaite afficher un teaser en haut de chaque article sous le titre, comme dans la mise en page «contenu complet» suivante:

  1. Titre
  2. Teaser (résumé de l'article)
  3. Image
  4. Corps

De plus, le teaser doit avoir sa propre mise en forme (par exemple l'italique et une police plus grande)

Je n'ai trouvé aucun moyen de le faire sans modifier les fichiers tpl ou les fichiers core.

Une solution serait d'ajouter un nouveau champ "article_teaser" à mon type de contenu, puis de gérer l'affichage afin d'obtenir ma mise en page en vue "Contenu complet". Cela fonctionne, mais je n'aime pas avoir deux champs d'accroche dans mon formulaire de contenu d'entrée, car je devrais taper deux fois le même texte.

Il semble que je ne puisse pas diviser le corps du champ en ses parties «texte» et «résumé», mais je ne peux afficher que l'une ou l'autre, mais pas les deux!

Existe-t-il un moyen (un module?) De le faire?

(Mon environnement: Drupal 7 avec un sous-thème Zen.)

Réponses:


10

Vous pouvez le faire avec des vues. Créez une vue qui remplace les chemins de votre type de contenu. Définissez l'affichage sur Champs , puis ajoutez deux fois le champ de corps; définissez la première instance pour afficher l'accroche et la deuxième instance pour afficher le corps. Vous pouvez ajouter les images entre les deux. Views vous permettra également de personnaliser facilement le CSS des champs d'accroche / corps (par défaut, Views fournit un certain nombre de classes, et vous pouvez ajouter des classes supplémentaires si nécessaire).

Pour référence: Node One série de captures d'écran vidéo sur l'utilisation des vues


Merci beaucoup. Le lien est très utile et j'apprends beaucoup sur les vues: j'ai eu une vue qui a fait le truc. Mais les vues affichent la liste des nœuds, alors que mon type de contenu (une page de livre) est une seule page: comment puis-je remplacer une seule page de livre (un nœud) par une liste de nœuds (la vue que j'ai créée)? Il me manque probablement quelque chose à propos des vues, peut-être comment remplacer la page de livre par défaut par la sienne.
gingo

@gingo Pour remplacer toutes les pages du livre, vous devez configurer le chemin d'affichage d'une manière spéciale. Pour un exemple, regardez la vue de terme de taxonomie , qui est fournie par Vues par défaut (désactivée). Le chemin d'accès est défini sur /taxonomy/term/%; si vous modifiez cette vue, vous pouvez voir comment les arguments (filtres contextuels) sont extraits pour vous permettre de modifier l'affichage des termes de taxonomie. Vous pouvez définir quelque chose de similaire pour les pages de livre sur votre site.
Patrick Kenny

eh bien, je dois approfondir les filtres contextuels mais je pense que je suis sur la bonne voie. Merci.
gingo

3

Les vues peuvent certainement faire le travail. Mais je pense que c'est un peu exagéré pour cette exigence.

Une autre façon d'y parvenir est d'implémenter hook_field_extra_fields () et hook_node_view () dans votre module personnalisé.

/**
 * 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,  
    );
  }
}

Vider le cache et vous pouvez accéder aux paramètres de type de contenu "Gérer l'affichage" pour faire glisser et déposer pour placer le champ "résumé du corps". Par exemple admin/structure/types/manage/page/display.


Hm je pense que c'est proche, mais le contenu du champ ne s'affiche pas, juste Array.
arjan

Hé @arjan, avez-vous vérifié les données de la baie et copiez-les ici, s'il vous plaît?
eric.chenchao du

Quel est l'intérêt de créer une variable, 1 ligne au-dessus du seul endroit où elle est utilisée, il suffit de mettre la chaîne dans l'instruction if
Kiee

Salut @Kiee, tu as raison. Mais cet extrait est utilisé comme exemple avec commentaire;)
eric.chenchao

3

sur drupal 7:

Dans le champ Corps, vous pouvez utiliser «réécrire le résultat» et utiliser dans les «modèles de remplacement» ceci:

[body-summary]

et cela affichera le résumé complet.


Vous êtes un génie Javier, toutes les autres explications exagérées, la vôtre est de loin celle qui fonctionne le mieux et sooooooooooooo simple!
Bruno Vincent

0

Pour la redéfinition du type de contenu, vous devez regarder les panneaux car l'une des fonctions des panneaux est de redéfinir exactement l'apparence de base de certains types de contenu (ou des informations basées sur d'autres critères de sélection) Csaba


0

Comme Arjan l'a remarqué, l'extrait de Cityreader produit le résultat, mais il ne s'affiche pas correctement.

Cette variation a fonctionné pour moi:

 /**
 * 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

Si vous êtes intéressé par une solution sans code utilisant le module Views and Display Suite, vous pouvez:

  1. Créez un bloc de vues avec un champ récapitulatif dessus. Sous l'option de filtre contextuel dans les paramètres avancés, vous pouvez définir l'option "Fournir la valeur par défaut" avec le type Content ID de l'URL.

  2. Sous Types de contenu -> [votre type de contenu] -> Gérer l'affichage, sélectionnez l'option Champs personnalisés (menu en bas) et créez un champ de bloc personnalisé à partir de la vue que vous avez créée à l'étape 1.

  3. Lors de l'enregistrement, le champ personnalisé apparaîtra dans la liste des champs de type de nœud où vous pourrez choisir dans quelle région il apparaîtra.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.