canRenderEntity($this->getContextValue('entity')); } /** * {@inheritdoc} */ public function defaultConfiguration() { return array( 'field' => '', 'settings' => array(), ); } /** * {@inheritdoc} */ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { $form = parent::buildConfigurationForm($form, $form_state); $field_options = array(); $definitions = $this->getFieldDefinitions(); foreach ($definitions as $key => $definition) { $field_options[$key] = $definition->getLabel(); } //$options = $this->getPluginOptions($field_definition); debug($form); $form['field'] = array( '#type' => 'select', '#title' => t('Field'), '#options' => $field_options, '#default_value' => $this->getConfigurationValue('field'), '#required' => TRUE, '#ajax' => array( 'callback' => array($this, 'updateFieldSettingsForm'), 'wrapper' => 'data-entity-embed-field-settings-wrapper', 'effect' => 'fade', ), ); $form['type'] = array( '#prefix' => '
', '#suffix' => '
', '#type' => 'select', ); $form['settings']['data-entity-embed-settings'] = array( '#type' => 'container', '#prefix' => '
', '#suffix' => '
', ); return $form; } /** * {@inheritdoc} */ public function build() { $entity = $this->getContextValue('entity'); $field = $this->getConfigurationValue('field'); //$formatter = $this->getConfigurationValue('formatter'); //$settings = $this->getConfigurationValue('settings'); //if ($formatter == 'view-mode') { //} return $entity->{$field}->view(); } /** * Collects the definitions of fields whose display is configurable. * * @return \Drupal\Core\Field\FieldDefinitionInterface[] * The array of field definitions */ protected function getFieldDefinitions() { $entity = $this->getContextValue('entity'); return array_filter($this->entityManager()->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()), function ($field_definition) { return $field_definition->isDisplayConfigurable('view'); }); } /** * Returns the extra fields of the entity type and bundle used by this form. * * @return array * An array of extra field info. * * @see \Drupal\Core\Entity\EntityManagerInterface::getExtraFields() */ protected function getExtraFields() { $entity = $this->getContextValue('entity'); $extra_fields = $this->entityManager()->getExtraFields($entity->getEntityTypeId(), $entity->bundle()); return isset($extra_fields['display']) ? $extra_fields['display'] : array(); } /** * Returns an array of widget or formatter options for a field. * * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition * The field definition. * * @return array * An array of widget or formatter options. */ protected function getPluginOptions(FieldDefinitionInterface $field_definition) { $options = $this->pluginManager->getOptions($field_definition->getType()); $applicable_options = array(); foreach ($options as $option => $label) { $plugin_class = DefaultFactory::getPluginClass($option, $this->pluginManager->getDefinition($option)); if ($plugin_class::isApplicable($field_definition)) { $applicable_options[$option] = $label; } } return $applicable_options; } }