Saya menggunakan Browser Entity (2.x-dev di Drupal 8) sebagai widget bentuk untuk bidang basis referensi entitas entitas kustom. Browser entitas dikonfigurasi
- sebagai tampilan modal,
- dengan satu widget,
- dan tidak ada tampilan pilihan,
- menggunakan tampilan dengan bidang pilih massal peramban entitas sebagai widget, dan
- untuk menambahkan entitas yang dipilih ke pemilihan bidang referensi saat ini.
Memilih entitas berfungsi dengan baik. Tetapi bidang referensi entitas tidak boleh memiliki duplikat.
Untuk mempermudah pemilihan entitas tanpa duplikat, saya ingin memfilter entitas yang sudah dipilih dari hasil tampilan browser entitas. Jadi pengguna akan melihat entitas yang tidak dipilih saja.
Untuk tujuan ini, saya membuat plugin custom views argument_default yang memperlihatkan penyimpanan pemilihan browser entitas sebagai argumen default konteks untuk ID entitas:
<?php
namespace Drupal\my_module\Plugin\views\argument_default;
use Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface;
use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* The entity browser selection argument default handler.
*
* @ViewsArgumentDefault(
* id = "entity_browser_selection",
* title = @Translation("Entity Browser Selection")
* )
*/
class EntityBrowserSelection extends ArgumentDefaultPluginBase {
/**
* The selection storage.
*
* @var \Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface
*/
protected $selectionStorage;
/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, KeyValueStoreExpirableInterface $selection_storage) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->selectionStorage = $selection_storage;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('entity_browser.selection_storage')
);
}
/**
* {@inheritdoc}
*/
public function access() {
return $this->view->getDisplay()->pluginId === 'entity_browser';
}
/**
* {@inheritdoc}
*/
public function getArgument() {
$argument = NULL;
$current_request = $this->view->getRequest();
// Check if the widget context is available.
if ($current_request->query->has('uuid')) {
$uuid = $current_request->query->get('uuid');
if ($storage = $this->selectionStorage->get($uuid)) {
if (!empty($storage['selected_entities'])) {
$argument = $storage['selected_entities'];
}
}
}
return $argument;
}
}
Masalah yang saya hadapi, adalah bahwa pemilihan saat ini dalam penyimpanan pemilihan selalu kosong, tidak peduli berapa banyak entitas yang telah dipilih di bidang referensi entitas, dan bahkan setelah saya menyelesaikan pemilihan modal dan membuka browser entitas lagi.
Apa yang harus saya lakukan untuk membuka seleksi saat ini di penyimpanan pilihan browser entitas?
#default_value) perlu dipertimbangkan juga sebagai filter.
