class MenuLinkField in Menu Link (Field) 8
Same name and namespace in other branches
- 2.0.x src/Plugin/Menu/MenuLinkField.php \Drupal\menu_link\Plugin\Menu\MenuLinkField
Provides a menu link plugin for field-based menu links.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Menu\MenuLinkBase implements MenuLinkInterface
- class \Drupal\menu_link\Plugin\Menu\MenuLinkField implements ContainerFactoryPluginInterface
- class \Drupal\Core\Menu\MenuLinkBase implements MenuLinkInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of MenuLinkField
1 file declares its use of MenuLinkField
- MenuLinkItem.php in src/
Plugin/ Field/ FieldType/ MenuLinkItem.php
File
- src/
Plugin/ Menu/ MenuLinkField.php, line 17
Namespace
Drupal\menu_link\Plugin\MenuView source
class MenuLinkField extends MenuLinkBase implements ContainerFactoryPluginInterface {
/**
* The entity connected to this plugin instance.
*
* @var \Drupal\Core\Entity\EntityInterface
*/
protected $entity;
/**
* The entity manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The entity repsoitory.
*
* @var \Drupal\Core\Entity\EntityRepositoryInterface
*/
protected $entityRepository;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* Constructs a new MenuLinkField object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_manager
* The entity manager.
* @param \Drupal\Core\Entity\EntityRepository $entity_repository
* The entity repository.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_manager, EntityRepositoryInterface $entity_repository, LanguageManagerInterface $language_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_manager;
$this->entityRepository = $entity_repository;
$this->languageManager = $language_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('entity.repository'), $container
->get('language_manager'));
}
/**
* {@inheritdoc}
*/
public function getTitle() {
return $this
->getProperty('title');
}
public function getUrlObject($title_attribute = TRUE) {
$options = $this
->getOptions();
if ($title_attribute && ($description = $this
->getDescription())) {
$options['attributes']['title'] = $description;
}
return $this
->getEntity()
->toUrl('canonical', $options);
}
/**
* Gets a specific property.
*
* In case the underlying entity is translatable, we watch the translated
* value.
*
* @param string $property
* Gets a specific property from the field, like title or weight.
*
* @return mixed
* The Property.
*/
protected function getProperty($property) {
// We only need to get the property from the actual entity if it may be a
// translation based on the current language context. This can only happen
// if the site is configured to be multilingual.
if (!empty($this->pluginDefinition['metadata']['translatable']) && $this->languageManager
->isMultilingual()) {
/** @var \Drupal\Core\TypedData\TranslatableInterface|\Drupal\Core\Entity\EntityInterface $entity */
$entity = $this
->getEntity();
$field_name = $this
->getFieldName();
if ($property_value = $entity
->get($field_name)->{$property}) {
return $property_value;
}
return $entity
->label();
}
return $this->pluginDefinition[$property];
}
/**
* {@inheritdoc}
*/
public function getDescription() {
return $this
->getProperty('description');
}
/**
* {@inheritdoc}
*/
public function getWeight() {
// By default the weight is 0.
$weight = $this
->getProperty('weight');
if (!$weight || !is_int($weight)) {
return parent::getWeight();
}
return $weight;
}
/**
* {@inheritdoc}
*/
public function updateLink(array $new_definition_values, $persist) {
$field_name = $this
->getFieldName();
$this->pluginDefinition = $new_definition_values + $this
->getPluginDefinition();
if ($persist) {
$updated = [];
foreach ($new_definition_values as $key => $value) {
$field = $this
->getEntity()->{$field_name};
if (isset($field->{$key})) {
$field->{$key} = $value;
$updated[] = $key;
}
}
if ($updated) {
$this
->getEntity()
->save();
}
}
return $this->pluginDefinition;
}
/**
* Loads the entity the field was attached to.
*
* @return \Drupal\Core\Entity\EntityInterface
* Returns the entity, if exists.
*/
public function getEntity() {
if (empty($this->entity)) {
$entity_type_id = $this->pluginDefinition['metadata']['entity_type_id'];
$entity_id = $this->pluginDefinition['metadata']['entity_id'];
$entity = $this->entityTypeManager
->getStorage($entity_type_id)
->load($entity_id);
if ($entity instanceof TranslatableInterface && $this->pluginDefinition['metadata']['langcode'] !== LanguageInterface::LANGCODE_NOT_SPECIFIED && $entity
->hasTranslation($this->pluginDefinition['metadata']['langcode'])) {
$this->entity = $entity
->getTranslation($this->pluginDefinition['metadata']['langcode']);
}
else {
$this->entity = $this->entityRepository
->getTranslationFromContext($entity);
}
}
return $this->entity;
}
/**
* {@inheritdoc}
*/
public function isDeletable() {
return TRUE;
}
/**
* {@inheritdoc}
*/
public function deleteLink() {
$entity = $this
->getEntity();
$field_name = $this
->getFieldName();
$field_item_list = $entity
->get($field_name);
$field_item_list->title = '';
$field_item_list->description = '';
$field_item_list->menu_name = '';
$field_item_list->parent = '';
$this->entity
->save();
}
/**
* Returns the field name.
*
* @return string
* The Field name.
*/
protected function getFieldName() {
return $this
->getPluginDefinition()['metadata']['field_name'];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
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 | |
MenuLinkBase:: |
protected | property | The list of definition values where an override is allowed. | 3 |
MenuLinkBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
3 |
MenuLinkBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
2 |
MenuLinkBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
2 |
MenuLinkBase:: |
public | function |
Returns route information for a route to delete the menu link. Overrides MenuLinkInterface:: |
1 |
MenuLinkBase:: |
public | function |
Returns route information for a custom edit form for the menu link. Overrides MenuLinkInterface:: |
1 |
MenuLinkBase:: |
public | function |
Returns the name of a class that can build an editing form for this link. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns the menu name of the menu link. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns any metadata for this link. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns the options for this link. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns the plugin ID of the menu link's parent, or an empty string. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns the provider (module name) of the menu link. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns the route name, if available. Overrides MenuLinkInterface:: |
2 |
MenuLinkBase:: |
public | function |
Returns the route parameters, if available. Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns route information for a route to translate the menu link. Overrides MenuLinkInterface:: |
1 |
MenuLinkBase:: |
public | function |
Returns whether the menu link is enabled (not hidden). Overrides MenuLinkInterface:: |
|
MenuLinkBase:: |
public | function |
Returns whether the child menu links should always been shown. Overrides MenuLinkInterface:: |
1 |
MenuLinkBase:: |
public | function |
Returns whether this link can be reset. Overrides MenuLinkInterface:: |
1 |
MenuLinkBase:: |
public | function |
Returns whether this link can be translated. Overrides MenuLinkInterface:: |
1 |
MenuLinkField:: |
protected | property | The entity connected to this plugin instance. | |
MenuLinkField:: |
protected | property | The entity repsoitory. | |
MenuLinkField:: |
protected | property | The entity manager. | |
MenuLinkField:: |
protected | property | The language manager. | |
MenuLinkField:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
MenuLinkField:: |
public | function |
Deletes a menu link. Overrides MenuLinkBase:: |
|
MenuLinkField:: |
public | function |
Returns the description of the menu link. Overrides MenuLinkInterface:: |
|
MenuLinkField:: |
public | function | Loads the entity the field was attached to. | |
MenuLinkField:: |
protected | function | Returns the field name. | |
MenuLinkField:: |
protected | function | Gets a specific property. | |
MenuLinkField:: |
public | function |
Returns the localized title to be shown for this link. Overrides MenuLinkInterface:: |
|
MenuLinkField:: |
public | function |
Returns a URL object containing either the external path or route. Overrides MenuLinkBase:: |
|
MenuLinkField:: |
public | function |
Returns the weight of the menu link. Overrides MenuLinkBase:: |
|
MenuLinkField:: |
public | function |
Returns whether this link can be deleted. Overrides MenuLinkBase:: |
|
MenuLinkField:: |
public | function |
Updates the definition values for a menu link. Overrides MenuLinkInterface:: |
|
MenuLinkField:: |
public | function |
Constructs a new MenuLinkField object. Overrides PluginBase:: |
|
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. | |
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. |