Добавление переменной $ title в пользовательский модуль Drupal - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Drupal 8.6.9 и Commerce 2.0x с унаследованным пользовательским кодом для фильтра товаров в магазине.

Я пытаюсь добавить название товара под изображением в виде фильтра товара типасетка.(Я приложил изображение страницы и вида.) Я надеюсь, что кто-то гораздо более опытный, чем я, может показать мне простое исправление здесь.Код находится в пользовательском модуле и в сопровождающем файле html.twig.

Вот функции модуля:

function EXAMPLE_theme() {
  return [
    'EXAMPLE_view_tabs_content_transfer' => [
      'variables' => [
        'path' => '',
        'url' => '',
      ],
    ],
  ];
}

function EXAMPLE_view_tabs_transfer(&$vars, $category_field_name, $view_id, $view_display = '') {
  $view_tabs = [];
  foreach ($vars['view']->result as $id => $result) {
    $fields = $result->_entity->getFields();
    if (array_key_exists($category_field_name, $fields)) {
      $field_values = $fields[$category_field_name]->getValue();
      if (!empty($field_values)) {
        $names = [];
        foreach ($field_values as $value) {
          $term = Term::load($value['target_id']);
          if ($term) {
            $category_name = $term->get('name')->value;
            $key = [
              $view_id,
              $view_display,
              $value['target_id'],
            ];
            $cid = implode('-', $key);
            $names[] = $cid;
            $view_tabs[$cid] = $category_name;
          }
        }
        $vars['rows'][0]['#rows'][$id]['#options']['tab_classes'] = implode(' ', $names);
      }
    }
  }
  asort($view_tabs);
  $vars['rows'][0]['#rows']['view_tabs']['#tabs'] = $view_tabs;
}

/**
 * @param $vars
 */
function EXAMPLE_view_tabs_content_transfer(&$vars, $category_field_name, $image_field_name, $view_id, $view_display = '') {
  $view_tabs_content = [];
  foreach ($vars['view']->result as $id => $result) {
    $entity = $result->_entity;
    $fields = $entity->getFields();
    if (array_key_exists($category_field_name, $fields)) {
      $field_values = $fields[$category_field_name]->getValue();
      $url = '#';
      if ($entity->hasVariations()) {
        $variations = $entity->getVariations();
        $variation = reset($variations);
        $variation_fields = $variation->getFields();
        if (array_key_exists($image_field_name, $variation_fields)) {
          if ($variation_fields[$image_field_name]->getFieldDefinition()->getType() == 'image') {
            $fid = $variation_fields[$image_field_name]->target_id;
            $uri = File::load($fid)->getFileUri();
            $url = file_create_url($uri);
          }
        }
      }
      if (!empty($field_values)) {
        foreach ($field_values as $value) {
          $key = [
            $view_id,
            $view_display,
            $value['target_id'],
          ];
          $cid = implode('-', $key);
          $entity_type_id = $entity->getEntityTypeId();
          switch ($entity_type_id) {
            case 'commerce_product':
              $entity_type = 'product';
              break;

            default:
              $entity_type = $entity_type_id;
          }
          $path = \Drupal::service('path.alias_manager')->getAliasByPath('/' . $entity_type . '/' . $entity->id());
          $theme_array = [
            '#theme' => 'EXAMPLE_view_tabs_content_transfer',
            '#path' => base_path() . ltrim($path, '/'),
            '#url' => $url,
          ];
          $view_tabs_content[$cid][] = \Drupal::service('renderer')->renderPlain($theme_array);
        }
      }
    }
  }
  ksort($view_tabs_content);
  $vars['rows'][0]['#rows']['view_tabs_content']['#tabs_content'] = $view_tabs_content;
}

function EXAMPLE_cms_preprocess_views_view(&$variables) {
  $vid = $variables['view']->id();
  $current_display = $variables['view']->current_display;
  switch ($vid) {
    case 'project':
      switch ($current_display) {
        case 'full_width_gallery':
        case 'extended_portfolio':
        case 'masonry_gallery':
        case 'classic_porfolio_page':
        case 'page_2col_portfolio':
        case 'page_index_gallery':
        case 'page_lightbox_gallery':
        case 'page_masonry_portfolio':
        case 'page_3':
        case 'page_3_2':
        case 'isotope_grid':
        case 'isotope_grid_overlay':
      break;

    case 'products_filter':
      EXAMPLE_cms_view_tabs_transfer($variables, 'field_product_category', $vid, $current_display);
      EXAMPLE_cms_view_tabs_content_transfer($variables, 'field_product_category', 'field_images',$vid, $current_display);
      break;
  }
}

Вот код в прилагаемом файле ветки:

<div class="c-overlay-wrapper c-overlay-padding">
  <div class="c-overlay-content">
    <a href="{{ path }}" class="btn btn-md c-btn-grey-1 c-btn-uppercase c-btn-bold c-btn-border-1x c-btn-square">
      {{ 'Explore'|t }}
    </a>
  </div>
</div>
<div class="c-bg-img-center c-overlay-object" data-height="height" style="height: 270px; background-image: url(' {{ url }} ');"></div>

Views screenshot of the product filter Фильтр товаров

Webpage of the product filter without titles Фильтр товаров без заголовков

...