src/Plugin/Field/FieldFormatter/EntityTitleHeading.php
<?php namespace Drupal\stanford_fields\Plugin\Field\FieldFormatter; Unused use statementuse Drupal\Core\Field\Attribute\FieldFormatter;use Drupal\Core\Field\FieldDefinitionInterface;use Drupal\Core\Field\FieldItemListInterface;use Drupal\Core\Field\FormatterBase;use Drupal\Core\Form\FormStateInterface;use Drupal\Core\Link;use Drupal\Core\Path\PathMatcherInterface;use Drupal\Core\Plugin\ContainerFactoryPluginInterface;use Drupal\Core\StringTranslation\TranslatableMarkup;use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provide a string field to be used as a heading. */Perl-style comments are not allowed; use "// Comment" instead#[FieldFormatter(`syntax error, unexpected ','`
Line indented incorrectly; expected 0 spaces, found 2 id: 'entity_title_heading', label: new TranslatableMarkup('Heading'), field_types: ['string'],)]Missing class doc commentclass EntityTitleHeading extends FormatterBase implements ContainerFactoryPluginInterface { /** * Path matcher service. * * @var \Drupal\Core\Path\PathMatcherInterface */ protected $pathMatcher; /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container->get('path.matcher') ); } /** * {@inheritdoc} */ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, PathMatcherInterface $path_matcher) { parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings); $this->pathMatcher = $path_matcher; } /** * {@inheritdoc} */ public static function defaultSettings() { $settings = [ 'tag' => 'h2', 'linked' => FALSE, ]; return $settings + parent::defaultSettings(); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $element = []; $heading_options = []; foreach (range(1, 5) as $level) { $heading_options['h' . $level] = 'H' . $level; } $element['tag'] = [ '#title' => $this->t('Tag'), '#type' => 'select', '#description' => $this->t('Select the tag which will be wrapped around the title.'), '#options' => $heading_options, '#default_value' => $this->getSetting('tag'), ]; return $element; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = parent::settingsSummary(); $summary[] = $this->t('Header level: @level', ['@level' => $this->getSetting('tag')]); return $summary; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { // Home page we don't want to display an H1 tag (page title). if ($this->pathMatcher->isFrontPage() && $this->getSetting('tag') == 'h1') { return []; } $output = []; foreach ($items->getValue() as $delta => $item) { $text = $item['value']; if ($this->getSetting('linked')) { $parent = $items->getParent()->getValue(); $text = Link::fromTextAndUrl($text, $parent->toUrl())->toString(); } $output[$delta] = [ '#type' => 'html_tag', '#tag' => $this->getSetting('tag'), '#value' => $text, ]; } return $output; } }