Додати атрибут стилю для перегляду полів


12

Я хотів би додати атрибут стилю до кожного поля заголовка на мій погляд. Я створив одне поле для кольору. Я намагався переписати результат так:

<h2 style="color: [field_color];">[title_1]</h2>

Але атрибут стилю буде видалено. Я використовую Drupal 7.

Будь-яка допомога вдячна.


Чому його видаляють? Чи спробували ви замість цього використати глобальне текстове поле?
Алекс Гілл

Спасибі за вашу відповідь! Що ви маєте на увазі під глобальним текстовим полем? Налаштування, на мій погляд: Формат: Неформатований список Показати: поля
Ksn

Ви можете додати поле "глобальний текст". Це поле має виконуватись за будь-якими іншими полями, які ви вже додали. Потім ви можете використовувати лексеми в цьому спеціальному полі, щоб створити подібне до того, що ви робили вище. Потім ви можете приховати поля, які відображаються у спеціальному полі.
Алекс Гілл

1
Найкращий варіант - це, ймовірно, створити спеціальний файл шаблону для цього поля або використовувати клас на основі лексеми, згаданої нижче.
Алекс Гілл

1
Якщо ви подивитесь у розділі "Додатково" праворуч на пункт "Інформація про тему", тут ви дасте кілька пропозицій щодо шаблонів.
Алекс Гілл

Відповіді:


4

Ви можете встановити клас на поле заголовка, використовуючи Параметри стилю, як показано нижче на екрані. Ви можете користувачеві замінити маркер у налаштуваннях стилю, щоб встановити клас у полі заголовка.

введіть тут опис зображення

Використовуючи невеликий JavaScript або jquery, прочитайте поле заголовка класу та встановіть колір таким же, як і назва класу, використовуючи властивість CSS .


2
Можливо, ваше рішення працює, але я що вирішити це без JavaScript. Чи можливо це?
Ksn

2
Ви не можете безпосередньо ввести значення поля до властивості стилю через проблеми безпеки. Дивіться проблему тут drupal.org/node/853880
Anil Sagar

Тоді вам потрібно написати окремий клас css для кожного кольору, однак це найгірший випадок, тому що вам потрібно написати 16 мільйонів класів :(. Javascript або jquery буде краще.
Mathankumar

2
Аніль, я спробував ваше рішення, але Drupal видалив # з кольору, тому я знайшов інше рішення з jQuery. Я додав дані атрибутів до поля: <h2 data-color = "[field_color]"> [title_1] </h2> Я досліджував інші рішення з шаблонами, але не зміг знайти правильний спосіб його вирішити.
Ksn

1

Ви можете створити tpl для цього поля (приклад: views-view-field-MY-VIEW-NAME-page.tpl.php), у цьому tpl ви можете додати маркер, записавши це:

<h2 style="color: <?php print $field->last_tokens['[field_color]'] ?>;"><?php print $field->last_tokens['[title_1]'] ?></h2>

1

Я також повинен був включати значення поля в якості вбудованого кольору для певного поля. Після перегляду Інтернету для легкого настроюваного рішення я закінчив це:

  1. Додайте значення кольору як маркер класу CSS, як і зображення в попередньому дописі.
  2. Перезапишіть функцію гачок_preprocess_views_view_field () так:

     function hook_preprocess_views_view_fields(&$vars) {
      $view = $vars['view'];
    
      // Loop through the fields for this view.
      $previous_inline = FALSE;
      $vars['fields'] = array(); // ensure it's at least an empty array.
      foreach ($view->field as $id => $field) {
    
        // render this even if set to exclude so it can be used elsewhere.
        $field_output = $view->style_plugin->get_field($view->row_index, $id);
        $empty = $field->is_value_empty($field_output, $field->options['empty_zero']);
        if (empty($field->options['exclude']) && (!$empty || (empty($field->options['hide_empty']) && empty($vars['options']['hide_empty'])))) {
          $object = new stdClass();
          $object->handler = & $view->field[$id];
          $object->inline = !empty($vars['options']['inline'][$id]);
    
          $object->element_type = $object->handler->element_type(TRUE, !$vars['options']['default_field_elements'], $object->inline);
          if ($object->element_type) {
            $class = '';
            if ($object->handler->options['element_default_classes']) {
              $class = 'field-content';
            }
    
            if ($classes = $object->handler->element_classes($view->row_index)) {
              if ($class) {
                $class .= ' ';
              }
              $class .= $classes;
            }
    
            $class_array = explode(' ', $class);
            foreach ($class_array as $cid => $candidate) {
              // Find the color hex code.
              if (preg_match('/([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/', $candidate)) {
                $style = 'color:#' . $candidate . ';';
                unset($class_array[$cid]);
              }
            }
    
            $pre = '<' . $object->element_type;
            if ($class) {
              $pre .= ' class="' . implode(' ', $class_array) . '"';
            }
            if ($style) {
              $pre .= ' style="' . $style . '"';
            }
            $field_output = $pre . '>' . $field_output . '</' . $object->element_type . '>';
          }
    
          // Protect ourself somewhat for backward compatibility. This will prevent
          // old templates from producing invalid HTML when no element type is selected.
          if (empty($object->element_type)) {
            $object->element_type = 'span';
          }
    
          $object->content = $field_output;
          if (isset($view->field[$id]->field_alias) && isset($vars['row']->{$view->field[$id]->field_alias})) {
            $object->raw = $vars['row']->{$view->field[$id]->field_alias};
          }
          else {
            $object->raw = NULL; // make sure it exists to reduce NOTICE
          }
    
          if (!empty($vars['options']['separator']) && $previous_inline && $object->inline && $object->content) {
            $object->separator = filter_xss_admin($vars['options']['separator']);
          }
    
          $object->class = drupal_clean_css_identifier($id);
    
          $previous_inline = $object->inline;
          $object->inline_html = $object->handler->element_wrapper_type(TRUE, TRUE);
          if ($object->inline_html === '' && $vars['options']['default_field_elements']) {
            $object->inline_html = $object->inline ? 'span' : 'div';
          }
    
          // Set up the wrapper HTML.
          $object->wrapper_prefix = '';
          $object->wrapper_suffix = '';
    
          if ($object->inline_html) {
            $class = '';
            if ($object->handler->options['element_default_classes']) {
              $class = "views-field views-field-" . $object->class;
            }
    
            if ($classes = $object->handler->element_wrapper_classes($view->row_index)) {
              if ($class) {
                $class .= ' ';
              }
              $class .= $classes;
            }
    
            $object->wrapper_prefix = '<' . $object->inline_html;
            if ($class) {
              $object->wrapper_prefix .= ' class="' . $class . '"';
            }
            $object->wrapper_prefix .= '>';
            $object->wrapper_suffix = '</' . $object->inline_html . '>';
          }
    
          // Set up the label for the value and the HTML to make it easier
          // on the template.
          $object->label = check_plain($view->field[$id]->label());
          $object->label_html = '';
          if ($object->label) {
            $object->label_html .= $object->label;
            if ($object->handler->options['element_label_colon']) {
              $object->label_html .= ': ';
            }
    
            $object->element_label_type = $object->handler->element_label_type(TRUE, !$vars['options']['default_field_elements']);
            if ($object->element_label_type) {
              $class = '';
              if ($object->handler->options['element_default_classes']) {
                $class = 'views-label views-label-' . $object->class;
              }
    
              $element_label_class = $object->handler->element_label_classes($view->row_index);
              if ($element_label_class) {
                if ($class) {
                  $class .= ' ';
                }
    
                $class .= $element_label_class;
              }
    
              $pre = '<' . $object->element_label_type;
              if ($class) {
                $pre .= ' class="' . $class . '"';
              }
              $pre .= '>';
    
              $object->label_html = $pre . $object->label_html . '</' . $object->element_label_type . '>';
            }
          }
    
          $vars['fields'][$id] = $object;
        }
      }
    
    }

Як бачите, я додав наступні рядки:

$style = '';
$class_array = explode(' ', $class);
foreach ($class_array as $cid => $candidate) {
  // Find the color hex code.
  if (preg_match('/([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/', $candidate)) {
    $style = 'color:#' . $candidate . ';';
    unset($class_array[$cid]);
  }
}

І змінити рядок під:

$pre = '<' . $object->element_type;
if ($class) {
  $pre .= ' class="' . implode(' ', $class_array) . '"';
}
if ($style) {
  $pre .= ' style="' . $style . '"';
}

0

додайте ім'я в запропоноване поле anil, а потім відкрийте style.css у папці тем і введіть ".my-css-name" з подальшими бажаними результатами css, такими як:

.my-css-name {колір: червоний; фон: зелений; }


0

Я просто роблю щось подібне, і ось що я зробив:

1- Створіть подання з кольоровими та заголовковими полями.

2- Створіть для цього представлення власні "views-view-polja.tpl". (Спеціальний шаблон лише для кольорового поля, показав мені помилку)

3- У field->contentрядку додайте / замініть те, що вам потрібно ....<h2 style="color: #<?php print $field->content; ?>">

/ / / / Відтепер я його не перевіряв, але він повинен працювати нормально / / / /

4- Виключіть поле заголовка та покажіть його на заголовку / групі

5- Створіть для цього представлення власні "views-view-unformatted.tpl".

6- У цьому погляді ми додаємо <?php print $title; ?></h2>після <?php print $row; ?>. (ми додаємо заголовок і закриваємо тег H відкритим у першому шаблоні)


Останнє редагування:

Ви можете просто використовувати перегляди PHP, щоб надрукувати все, що вам потрібно, і стиль не буде відфільтровано.


0

У мене була ця сама проблема і вирішено її, створивши шаблон з назвою

views-view-field--field_name_here.tpl.php

У моєму випадку код, який я використовував для створення потрібного мені HTML, був:

<?php

$bg_color = $variables["row"]->field_field_button_background_color[0]["raw"]["rgb"];
$link_title = $variables["row"]->field_field_slideshow_item_cta_link[0]["raw"]["title"];
$link_url = $variables["row"]->field_field_slideshow_item_cta_link[0]["raw"]["url"];

echo '<a style="background-color:'.$bg_color.'" href="'.$link_url.'">'.$link_title.'</a>';

Увімкнення модуля Devel та використання

dpm($row);

у файлі шаблону було ДУЖЕ корисно. Не міг би зрозуміти це без цього.


0

Найпростіше рішення, яке я міг знайти, - це вставити значення як атрибут даних. Потім у своєму JavaScript я беру значення з поля даних та оновлюю CSS для відображення змін.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.