Показать HTML-таблицу в блоке drupal 8 - PullRequest
0 голосов
/ 10 июня 2019

Я создал модуль в Drupal 8 для отображения сторонних данных API в блоке

вот некоторые данные, возвращаемые этим API

{"ObjectId":43,"ObjectName":"MEGA MELA","ObjectTitle":"Event Created by API","ObjectDescription":"NEW EVENT BY API","ObjectLabel":"","ObjectTypeId":33,"MaxFieldsExpected":5,"ObjectValueType":null,"ObjectControlType":"","IsDeleted":true,"CreatedDate":"2019-05-22T07:56:03.767","CreatedBy":null,"EditedDate":null,"EditedBy":null,"DeletedDate":null},{"ObjectId":44,"ObjectName":"Event x11","ObjectTitle":"Event Created by API","ObjectDescription":"NEW EVENT BY API","ObjectLabel":"","ObjectTypeId":33,"MaxFieldsExpected":5,"ObjectValueType":null,"ObjectControlType":"","IsDeleted":true,"CreatedDate":"2019-05-23T00:33:50.7","CreatedBy":null,"EditedDate":null,"EditedBy":null,"DeletedDate":null}]} 

Я создал пользовательский модуль, чтобы показать некоторые из этих данных в блоке

это моя иерархия каталогов модуля, имя директории модуля apihtml

 -apihtml 
    -src
      -Plugin
        -Block
          -rest.php   

    -apihtml.info.yml

как видите, всего два файла apihtml.info.yml и rest.php

здесь apihtml.info.yml содержание

 name: Third Party Api Data with html
    type: module
    description: 'This is for showing rest data in ui with html'
    package: Custom
    version: 8.x
    core: 8.x
    dependencies:
      - node
      - block

а вот rest.php содержание

   <?php

/**
 * @file
 */
namespace Drupal\apihtml\Plugin\Block;
use Drupal\Core\Access\AccessResult;

use Drupal\Core\Block\BlockBase;
use Drupal\Component\Serialization\Json;

/**
 * Creates a 'Foobar' Block
 * @Block(
 * id = "AntShow with html formatting",
 * admin_label = @Translation("Ant Show & HTML"),
 * )
 */
class rest extends BlockBase {
 public function build() {
    /** @var \GuzzleHttp\Client $client */
    $client = \Drupal::service('http_client_factory')->fromOptions([
      'base_uri' => 'http://myApiPath',
    ]);



       $response = $client->get('objects/events');


    $dec = Json::decode($response->getBody());



    $items = [];


foreach ($dec as $d) {
    foreach ($d as $ins) {  
  $items[] = $ins['ObjectName'] ;

    }
}


         return [
      '#theme' => 'item_list',
      '#items' => $items,

    ];

  }
}

здесь с помощью array Key ObjecName я могу показать имя объекта в блоке

вот блок OutPut

МЕГА МЕЛА
Событие x11

но я хочу что-то еще
я хочу, чтобы этот API возвращал данные в табличной форме, значит array key должно быть header из data значение данных будет в rows

как это

   ObjectId  | ObjectName | ObjectTitle           | ObjectDescription | ObjectLabel | ObjectTypeId | MaxFieldsExpected | ObjectValueType | ObjectControlType | IsDeleted | CreatedDate | CreatedBy | EditedDate |  EditedBy
    43        |  MEGA MELA |  Event Created by API | NEW EVENT BY API | ..............................................................................

в этом блоке Drupal все отображаемые данные должны быть возвращены в функции build в rest.php файле

это код, который показывает данные, возвращаемые API в табличном формате

     foreach ($dec as $d) {
  ?>
    <table>
<?php foreach ($d as $ins) { ?>
<tr>
<?php
 foreach ($ins as $key=>$value) {  
   echo "<td><h3>".$key."</h3></td>";
 } ?>
</tr>
<tr>
<?php
 foreach ($ins as $key=>$value) {  
   echo "<td><h3>".$value."</h3></td>";
 } ?>
</tr><?php
} ?>
</table> <?php
}

Но я не понимаю, как я могу поместить этот код в build function из rest.php для отображения табличных данных в block

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Использовать пользовательский шаблон: 1. изменить вы возвращаете:

return [
      '#theme' => 'item_list',
      '#items' => $items,

    ];

return [
        '#theme' => 'my_custom_template',
        '#content' => $items,
      ];

в вашем apihtml.module us hook_theme

function  apihtml_theme() {
    return array(
      'my_custom_template' =>[
        'variables' => [
          'content' => []
        ]
      ]);
}

и создайте собственную веточку: templates / my-custom-template.html.twig

{% for data in content %}
...
{% endfor %}
1 голос
/ 15 июня 2019

Вы можете создать собственный шаблон Twig и отображать все ваши данные, как вы хотите.Вы можете прочитать больше об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...