Bir zamanlar, dokümanları bulmak ve bulmak oldukça basit olan bir şey biraz daha kafa karıştırıcı ve bulmak zor hale geldi. Bu, bu konunun en iyi arama sonuçlarından biridir, bu yüzden yeni Yöntemleri kullanarak bir araya getirebildiğim bir çözüm göndermek için zaman ayırmak istiyorum.
Kullanım durumum, belirli bir içerik türünde yayınlanan düğümlerin bir listesini almak ve bunları üçüncü bir tarafın tüketeceği XML olarak bir sayfada yayınlamaktır.
İşte beyanlarım. Bazıları bu noktada gereksiz olabilir, ama henüz kod yükseltme henüz tamamlanmadı.
<?php
namespace Drupal\my_events_feed\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Component\Serialization;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Response;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Entity\EntityTypeManager;
İşte nesneyi XML'e beslemek için kod
/**
* Class BuildXmlController.
*/
class BuildXmlController extends ControllerBase {
/**
* Builds the xml from an object
*/
public function build() {
$my_events = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'status' => '1',
'type' => 'submit_an_event',
]);
$thisSerializer = \Drupal::service('serializer');
$serializedData = $thisSerializer->serialize($my_events, 'xml', ['plugin_id' => 'entity']);
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
$response->setContent($serializedData);
return $response;
}
}
Verilere masaj yapmanız gerekiyorsa, bir dizi doldurmanız ve orada düzenlemeler yapmanız gerekir. Tabii ki, yine de standart bir kütüphane dizisini serileştirebilirsiniz.
/**
* Class BuildXmlController.
*/
class BuildXmlController extends ControllerBase {
/**
* Builds the xml from an array
*/
public function build() {
$my_events = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties([
'status' => '1',
'type' => 'submit_an_event',
]);
$nodedata = [];
if ($my_events) {
/*
Get the details of each node and
put it in an array.
We have to do this because we need to manipulate the array so that it will spit out exactly the XML we want
*/
foreach ($my_events as $node) {
$nodedata[] = $node->toArray();
}
}
foreach ($nodedata as &$nodedata_row) {
/* LOGIC TO MESS WITH THE ARRAY GOES HERE */
}
$thisSerializer = \Drupal::service('serializer');
$serializedData = $thisSerializer->serialize($nodedata, 'xml', ['plugin_id' => 'entity']);
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
$response->setContent($serializedData);
return $response;
}
}
Bu yardımcı olur umarım.