class DomainNavBlock in Domain Access 8
Provides a block that links to all active domains.
Plugin annotation
@Block(
id = "domain_nav_block",
admin_label = @Translation("Domain navigation")
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\domain\Plugin\Block\DomainBlockBase
- class \Drupal\domain\Plugin\Block\DomainNavBlock
- class \Drupal\domain\Plugin\Block\DomainBlockBase
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
Expanded class hierarchy of DomainNavBlock
File
- domain/
src/ Plugin/ Block/ DomainNavBlock.php, line 19
Namespace
Drupal\domain\Plugin\BlockView source
class DomainNavBlock extends DomainBlockBase {
/**
* An array of settings.
*
* @var string[]
*/
public $settings = [];
/**
* {@inheritdoc}
*/
public function getCacheContexts() {
// By default, all domain blocks are per-url. This block, though, can be
// cached by url.site if we are printing the homepage path, not the request.
if ($this
->getSetting('link_options') == 'home') {
return [
'url.site',
];
}
return [
'url',
];
}
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$defaults = $this
->defaultConfiguration();
$elements['link_options'] = [
'#title' => $this
->t('Link paths'),
'#type' => 'radios',
'#required' => TRUE,
'#options' => [
'active' => $this
->t('Link to active url'),
'home' => $this
->t('Link to site home page'),
],
'#default_value' => !empty($this->configuration['link_options']) ? $this->configuration['link_options'] : $defaults['link_options'],
'#description' => $this
->t('Determines how links to each domain will be written. Note that some paths may not be accessible on all domains.'),
];
$options = [
'select' => $this
->t('JavaScript select list'),
'menus' => $this
->t('Menu-style tab links'),
'ul' => $this
->t('Unordered list of links'),
];
$elements['link_theme'] = [
'#type' => 'radios',
'#title' => t('Link theme'),
'#default_value' => !empty($this->configuration['link_theme']) ? $this->configuration['link_theme'] : $defaults['link_theme'],
'#options' => $options,
'#description' => $this
->t('Select how to display the block output.'),
];
$options = [
'name' => $this
->t('The domain display name'),
'hostname' => $this
->t('The raw hostname'),
'url' => $this
->t('The domain base URL'),
];
$elements['link_label'] = [
'#type' => 'radios',
'#title' => $this
->t('Link text'),
'#default_value' => !empty($this->configuration['link_label']) ? $this->configuration['link_label'] : $defaults['link_label'],
'#options' => $options,
'#description' => $this
->t('Select the text to display for each link.'),
];
return $elements;
}
/**
* {@inheritdoc}
*/
public function blockSubmit($form, FormStateInterface $form_state) {
// Process the block's submission handling if no errors occurred only.
if (!$form_state
->getErrors()) {
foreach (array_keys($this
->defaultConfiguration()) as $element) {
$this->configuration[$element] = $form_state
->getValue($element);
}
}
}
/**
* Overrides \Drupal\block\BlockBase::access().
*/
public function access(AccountInterface $account, $return_as_object = FALSE) {
$access = AccessResult::allowedIfHasPermissions($account, [
'administer domains',
'use domain nav block',
], 'OR');
return $return_as_object ? $access : $access
->isAllowed();
}
/**
* Build the output.
*/
public function build() {
/** @var \Drupal\domain\DomainInterface $active_domain */
$active_domain = \Drupal::service('domain.negotiator')
->getActiveDomain();
$access_handler = \Drupal::entityTypeManager()
->getAccessControlHandler('domain');
$account = \Drupal::currentUser();
// Determine the visible domain list.
$items = [];
$add_path = $this
->getSetting('link_options') == 'active';
/** @var \Drupal\domain\DomainInterface $domain */
foreach (\Drupal::entityTypeManager()
->getStorage('domain')
->loadMultipleSorted() as $domain) {
// Set the URL.
if ($add_path) {
$url = Url::fromUri($domain
->getUrl());
}
else {
$url = Url::fromUri($domain
->getPath());
}
// Set the label text.
$label = $domain
->label();
if ($this
->getSetting('link_label') == 'hostname') {
$label = $domain
->getHostname();
}
elseif ($this
->getSetting('link_label') == 'url') {
$label = $domain
->getPath();
}
// Handles menu links.
if ($domain
->status() || $account
->hasPermission('access inactive domains')) {
if ($this
->getSetting('link_theme') == 'menus') {
// @TODO: active trail isn't working properly, likely because this
// isn't really a menu.
$items[] = [
'title' => $label,
'url' => $url,
'attributes' => [],
'below' => [],
'is_expanded' => FALSE,
'is_collapsed' => FALSE,
'in_active_trail' => $domain
->isActive(),
];
}
elseif ($this
->getSetting('link_theme') == 'select') {
$items[] = [
'label' => $label,
'url' => $url
->toString(),
'active' => $domain
->isActive(),
];
}
else {
$items[] = [
'#markup' => Link::fromTextAndUrl($label, $url)
->toString(),
];
}
}
}
// Set the proper theme.
switch ($this
->getSetting('link_theme')) {
case 'select':
$build['#theme'] = 'domain_nav_block';
$build['#items'] = $items;
break;
case 'menus':
// Map the $items params to what menu.html.twig expects.
$build['#items'] = $items;
$build['#menu_name'] = 'domain-nav';
$build['#sorted'] = TRUE;
$build['#theme'] = 'menu__' . strtr($build['#menu_name'], '-', '_');
break;
case 'ul':
default:
$build['#theme'] = 'item_list';
$build['#items'] = $items;
break;
}
return $build;
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'link_options' => 'home',
'link_theme' => 'ul',
'link_label' => 'name',
];
}
/**
* Gets the configuration for the block, loading defaults if not set.
*
* @param string $key
* The setting key to retrieve, a string.
*
* @return string
* The setting value, a string.
*/
public function getSetting($key) {
if (isset($this->settings[$key])) {
return $this->settings[$key];
}
$defaults = $this
->defaultConfiguration();
if (isset($this->configuration[$key])) {
$this->settings[$key] = $this->configuration[$key];
}
else {
$this->settings[$key] = $defaults[$key];
}
return $this->settings[$key];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlockPluginInterface:: |
constant | Indicates the block label (title) should be displayed to end users. | ||
BlockPluginTrait:: |
protected | property | The transliteration service. | |
BlockPluginTrait:: |
protected | function | Returns generic default configuration for block plugins. | |
BlockPluginTrait:: |
protected | function | Indicates whether the block should be shown. | 16 |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | Creates a generic configuration form for all block types. Individual block plugins can add elements to this form by overriding BlockBase::blockForm(). Most block plugins should not override this method unless they need to alter the generic form elements. | 2 |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | Sets the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add submission handling for a specific block type, override BlockBase::blockSubmit(). | |
BlockPluginTrait:: |
protected | function | Wraps the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add validation for a specific block type, override BlockBase::blockValidate(). | 1 |
BlockPluginTrait:: |
public | function | 22 | |
ContextAwarePluginAssignmentTrait:: |
protected | function | Builds a form element for assigning a context to a given slot. | |
ContextAwarePluginAssignmentTrait:: |
protected | function | Wraps the context handler. | |
ContextAwarePluginBase:: |
protected | property | The data objects representing the context of this plugin. | |
ContextAwarePluginBase:: |
private | property | Data objects representing the contexts passed in the plugin configuration. | |
ContextAwarePluginBase:: |
protected | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
7 |
ContextAwarePluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
4 |
ContextAwarePluginBase:: |
public | function |
This code is identical to the Component in order to pick up a different
Context class. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the value for a defined context. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the values for all defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Set a context on this plugin. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Sets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function | Implements magic __get() method. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DomainNavBlock:: |
public | property | An array of settings. | |
DomainNavBlock:: |
public | function |
Overrides \Drupal\block\BlockBase::access(). Overrides BlockPluginTrait:: |
|
DomainNavBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
DomainNavBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
DomainNavBlock:: |
public | function |
Build the output. Overrides BlockPluginInterface:: |
|
DomainNavBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
DomainNavBlock:: |
public | function |
The cache contexts associated with this object. Overrides DomainBlockBase:: |
|
DomainNavBlock:: |
public | function | Gets the configuration for the block, loading defaults if not set. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginWithFormsTrait:: |
public | function | ||
PluginWithFormsTrait:: |
public | function | ||
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |