web-dev-qa-db-ja.com

プログラムで新しいブロックを作成する方法は?

プログラムで新しいブロックを作成する必要があります。ブロックには、最後の3つのニュース(サイトコンテンツ)を表示する必要があります。リンクとしてのタイトル+公開日(形式dd-mm-yyyy)。

助言がありますか?

5

Infoフックはシステム内のブロックを定義します:

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

  return $blocks;
}

そしてビューフックはあなたのブロックの出力(html)を作成します:

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;
}

YOUR_SITE/admin/content/blocksでブロックにリージョンを割り当てることを忘れないでください

出力:

enter image description here

参照:

プログラムで静的ブロックを作成するにはどうすればよいですか?

10

これは非プログラムで実行できます。

Drupal 7を使用している場合

Views モジュールをダウンロードします。

ビューとViews UIを有効にする

Drupal 8にはすでにビューとビューUIが有効になっています

新しいビューを作成し、ページビューのチェックを外してブロックビューを選択します

ビュー:コンテンツ。タイプ:コンテンツタイプを選択します。

結果を3に設定します。

[続行して編集]をクリックします。

フィールドで、追加ボタンをクリックし、作成日を検索します。

日付の表示方法を変更/フォーマットできます。必要に応じて、customを使用してd-m-Y

ビューを保存します。

次に、ブロックで、ビューブロックがそこに表示されます。

質問者はおそらく非プログラム的なソリューションを認識していないため、これについて言及します

3
user55176

エイドリアンのソリューションを単純化するため。これはViewsといくつかのコードで実現できます。最後の3つのノードを表示するビューを作成し、block_views関数で関数 views_embed_view() を使用して、ビューをデータパーツにレンダリングします。

これにより、複雑なデータベースクエリから解放され、同時にプログラムでブロックを実現できます。

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.