Я создал модуль в 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