Alanları görüntülemek için stil özelliği ekleyin


12

Benim görünümümdeki her başlık alanına bir stil özelliği eklemek istiyorum. Bir renk için bir alan yarattım. Sonucu şöyle yeniden yazmaya çalıştım:

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

Ancak style özelliği kaldırılacak. Drupal 7 kullanıyorum.

Herhangi bir yardım takdir.


Neden kaldırıldı? Bunun yerine genel bir metin alanı kullanmayı denediniz mi?
Alex Gill

Cevabınız için teşekkür ederim! Global metin alanıyla ne demek istiyorsun? Benim görüşüme göre ayarlar: Biçim: Biçimlendirilmemiş liste Göster: Alanlar
Ksn

Bir 'genel metin' alanı ekleme seçeneğiniz vardır. Bu alan, daha önce eklediğiniz diğer alanlardan sonra gelmelidir. Daha sonra, yukarıda yaptığınıza benzer oluşturmak için bu özel alandaki belirteçleri kullanabilirsiniz. Daha sonra özel alanda gösterilen alanları gizleyebilirsiniz.
Alex Gill

1
En iyi seçeneğiniz muhtemelen bu alan için özel bir şablon dosyası oluşturmak veya aşağıda belirtilen jetona dayalı bir sınıf kullanmaktır.
Alex Gill

1
Sağ taraftaki 'Gelişmiş'in altına bakarsanız,' Tema bilgileri 'için bir seçenek varsa, burada size şablonlar için bazı öneriler verecektir.
Alex Gill

Yanıtlar:


4

Aşağıdaki ekranda gösterilen Stil Ayarları'nı kullanarak başlık alanına bir sınıf ayarlayabilirsiniz. Sınıfı başlık alanına ayarlamak için stil ayarlarında kullanıcı belirteç değiştirmelerini yapabilirsiniz.

resim açıklamasını buraya girin

Küçük javascript veya jquery kullanarak başlık alanının sınıfını okuyun ve CSS özelliğini kullanarak rengi sınıf adıyla aynı şekilde ayarlayın .


2
Belki çözümün işe yarıyor, ama bunu javascript olmadan ne çözeceğim. Mümkün mü?
Ksn

2
Güvenlik sorunları nedeniyle alan değerini doğrudan stil mülküne enjekte edemezsiniz. Soruna buradan bakın drupal.org/node/853880
Anil Sagar

Daha sonra her renk için ayrı bir css sınıfı yazmanız gerekir, ancak bu en kötü durumdur, çünkü 16 milyon sınıf yazmanız gerekir :(. Javascript veya jquery daha iyi olurdu.
Mathankumar

2
Anıl, çözümünüzü denedim ama Drupal # renkten çıkardı, bu yüzden jQuery ile başka bir çözüm buldum. Özellik verilerini alana ekledim: <h2 data-color = "[field_color]"> [title_1] </h2> Şablonlarla diğer çözümleri araştırdım, ancak çözmek için doğru yolu bulamadım.
Ksn

1

Bu alan için bir tpl oluşturabilirsiniz (örnek: views-view-field-MY-VIEW-NAME-page.tpl.php), bu tpl'ye şunu yazarak jeton ekleyebilirsiniz:

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

1

Ayrıca bir alanın değerini belirli bir alan için satır içi renk olarak eklemek zorunda kaldım. Kolayca özelleştirilebilir bir çözüm için web'e göz attıktan sonra bunu yaptım:

  1. Rengin değerini, tıpkı bir önceki gönderideki resim gibi bir CSS Sınıfı jetonu olarak ekleyin.
  2. Hook_preprocess_views_view_field () işlevini şu şekilde yeniden yazın :

     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;
        }
      }
    
    }

Gördüğünüz gibi şu satırları ekledim:

$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]);
  }
}

Ve aşağıdaki satırı değiştirin:

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

0

önerilen alana bir isim ekleyin ve sonra tema klasörünüzde style.css dosyasını açın ve ".my-css-name" yazın ve ardından aşağıdaki gibi istediğiniz css sonuçlarını yazın:

.my-css-name {renk: kırmızı; Arka plan: yeşil; }


0

Sadece benzer bir şey yapıyorum ve işte yaptığım şey:

1- Renk ve başlık alanlarıyla bir görünüm oluşturun.

2- Bu görünüm için özel bir "views-view-fields.tpl" oluşturun. (Yalnızca renk alanı için özel bir şablon bana bir hata gösterdi)

3- Satırında field->contentihtiyacınız olanı ekleyin / değiştirin ....<h2 style="color: #<?php print $field->content; ?>">

/ / / / Şu andan itibaren test etmedim, ama iyi çalışmalı / / / /

4- Başlık alanını hariç tutun ve başlık / grupta gösterin

5- Bu görünüm için özel bir "views-view-unformatted.tpl" oluşturun.

6- Bu görüşe biz eklemek <?php print $title; ?></h2>sonra <?php print $row; ?>. (başlığı ekleriz ve ilk şablonda açık olan H etiketini kapatırız)


SON DÜZENLEME:

İhtiyacınız olan her şeyi yazdırmak için PHP görünümlerini kullanabilirsiniz ve stil filtrelenmeyecektir.


0

Aynı problemi yaşadım ve bir şablon oluşturarak çözdüm

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

Benim durumumda, ihtiyacım olan HTML'yi oluşturmak için kullandığım kod:

<?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 modülünü etkinleştirme ve kullanma

dpm($row);

şablon dosyasında ÇOK yardımcı oldu. Onsuz bunu anlayamazdım.


0

Bulabildiğim en kolay çözüm, değeri bir veri özelliği olarak eklemekti. Daha sonra JavaScript'imde değeri veri alanından alıyorum ve değişikliği yansıtmak için CSS'yi güncelliyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.