web-dev-qa-db-fra.com

Comment créer un nouveau bloc par programmation?

J'ai besoin de créer par programme un nouveau bloc. Le bloc doit afficher 3 dernières nouvelles (contenu du site): titre sous forme de lien + date de publication (format jj-mm-aaaa).

Aucune suggestion?

5
Solomiya Pospolita

Le crochet info définit votre bloc dans le système:

function my_module_block_info() {    
  $blocks['your_block'] = array(
    // info: The name of the block.
    'info' => t('Your Block Name'),
  );

  return $blocks;
}

et le crochet de vue crée la sortie (html) pour votre bloc:

function my_module_block_view($delta = '') {
  // The $delta parameter tells us which block is being requested.
  switch ($delta) {
    case 'your_block':
      // Create your block content here
      $block['subject'] = t('My last 3 news');

    $query = new EntityFieldQuery();
    //change news by the name of your content type
    $entities = $query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', 'news')
    ->propertyOrderBy("created", "DESC")
    ->range(0, 3)
    ->execute();

    $block['content'] = '';

    foreach($entities['node'] as $obj) {
      $node = node_load($obj->nid);
          $block['content'] .= l($node->title, "node/" . $node->nid) . ' - ' . date('d-m-Y', $node->created) . '<br>';
    }

     break;
   }

  return $block;
}

N'oubliez pas d'attribuer une région à votre bloc dans YOUR_SITE/admin/content/blocks

Production:

enter image description here

Références:

Comment créer un bloc statique par programme?

10

Vous pouvez le faire sans programmation.

Si vous utilisez Drupal 7

Téléchargez le module Vues .

Activer les vues et l'interface utilisateur des vues

Drupal 8 est déjà livré avec Views et Views UI enabled .

Créez une nouvelle vue, décochez la vue Page et sélectionnez Vue bloc

Vue de: Contenu. Pour Type: sélectionnez votre type de contenu.

Définissez les résultats sur 3.

Cliquez sur Continuer et modifier.

Dans les champs, cliquez sur le bouton Ajouter, recherchez Date de création.

Vous pouvez modifier/formater la façon dont la date est affichée. Si vous le souhaitez, vous pouvez utiliser personnalisé et mettre d-m-Y

Enregistrez votre vue.

Ensuite, dans Blocs, votre bloc d'affichage y sera répertorié.

Je mentionne cela parce que le demandeur n'est peut-être pas au courant d'une solution non programmatique

3
user55176

Pour simplifier la solution d'Adrian. Vous pouvez y parvenir avec Views et du code. Créez une vue qui montre les trois derniers nœuds puis dans votre fonction block_views utilisez la fonction views_embed_view () pour rendre votre vue dans la partie données.

Cela vous évitera des requêtes de base de données complexes et vous obtiendrez en même temps votre bloc par programme.

case 'top_three_nodes':
            $block['subject'] = t('My Top Three Nodes');


            $block['content'] = array(
                '#theme' => 'your_block_theme_name',
                '#top_three_favorites' => views_embed_view('three_nodes_view_name', 'display_name'),

            );
            return $block;
        break;
2
Shabir A.