Tambahkan atribut gaya ke bidang tampilan


12

Saya ingin menambahkan atribut gaya ke setiap bidang judul dalam pandangan saya. Saya telah membuat satu bidang untuk warna. Saya mencoba menulis ulang hasilnya seperti ini:

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

Tetapi atribut style akan dihapus. Saya menggunakan Drupal 7.

Setiap bantuan dihargai.


Mengapa itu dihapus? Sudahkah Anda mencoba menggunakan bidang teks global?
Alex Gill

Terima kasih atas jawaban Anda! Apa yang Anda maksud dengan bidang teks global? Pengaturan dalam pandangan saya: Format: Daftar tidak diformat Tampilkan: Fields
Ksn

Anda memiliki opsi untuk menambahkan bidang 'teks global'. Bidang ini harus digunakan setelah bidang lain yang telah Anda tambahkan. Anda kemudian dapat menggunakan token di bidang khusus ini untuk membuat yang serupa dengan apa yang telah Anda lakukan di atas. Anda kemudian dapat menyembunyikan bidang yang ditampilkan di bidang khusus.
Alex Gill

1
Pilihan terbaik Anda adalah membuat file templat khusus untuk bidang ini atau menggunakan kelas berdasarkan token yang disebutkan di bawah ini.
Alex Gill

1
Jika Anda melihat di bawah 'Advanced' di sebelah kanan ada opsi untuk 'Informasi tema', di sini itu akan memberi Anda beberapa saran untuk template.
Alex Gill

Jawaban:


4

Anda dapat mengatur kelas ke bidang judul menggunakan Pengaturan Gaya seperti yang ditunjukkan di bawah layar. Anda dapat mengganti token pengguna dalam pengaturan gaya untuk mengatur kelas ke bidang judul.

masukkan deskripsi gambar di sini

Menggunakan javascript atau jquery kecil, baca kelas bidang judul dan atur warnanya sama dengan nama kelas menggunakan properti CSS .


2
Mungkin solusi Anda berhasil, tetapi saya harus menyelesaikannya tanpa javascript. Apakah mungkin?
Ksn

2
Anda tidak dapat secara langsung menyuntikkan nilai bidang ke properti gaya karena masalah keamanan .. Lihat masalah di sini drupal.org/node/853880
Anil Sagar

Maka Anda perlu menulis kelas css terpisah untuk setiap warna, namun ini adalah kasus terburuk, karena Anda perlu menulis 16 juta kelas :(. Javascript atau jquery akan lebih baik.
Mathankumar

2
Anil, saya mencoba solusi Anda tetapi Drupal menghapus # dari warnanya, jadi saya menemukan solusi lain dengan jQuery. Saya menambahkan data atribut ke bidang: <h2 data-color = "[field_color]"> [title_1] </h2> Saya telah menyelidiki solusi lain dengan templat, tetapi saya tidak dapat menemukan cara yang tepat untuk menyelesaikannya.
Ksn

1

Anda dapat membuat tpl untuk bidang ini (contoh: views-view-field-MY-VIEW-NAME-page.tpl.php), di tpl ini Anda dapat menambahkan token yang menulis ini:

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

1

Saya juga harus memasukkan nilai bidang sebagai warna sebaris untuk bidang tertentu. Setelah menjelajahi web untuk solusi yang mudah disesuaikan, saya akhirnya melakukan ini:

  1. Tambahkan nilai warna sebagai token Kelas CSS, sama seperti gambar di posting sebelumnya.
  2. Tulis ulang fungsi hook_preprocess_views_view_field () seperti ini:

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

Seperti yang Anda lihat, saya telah menambahkan baris ini:

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

Dan ubah baris di bawah:

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

0

tambahkan nama ke bidang dan disarankan lalu buka style.css di folder tema Anda dan ketik ".my-css-name" diikuti oleh hasil css yang diinginkan seperti:

.my-css-name {color: red; latar belakang: hijau; }


0

Saya hanya membuat sesuatu yang serupa dan inilah yang saya lakukan:

1- Buat tampilan dengan bidang warna dan judul.

2- Buat kustom "views-view-fields.tpl" untuk tampilan itu. (Template khusus hanya untuk bidang warna, menunjukkan kesalahan)

3 - Pada field->contentbaris menambah / mengganti apa yang Anda butuhkan ....<h2 style="color: #<?php print $field->content; ?>">

/ / / / Mulai sekarang, saya tidak mengujinya, tetapi seharusnya berfungsi dengan baik // //

4- Kecualikan bidang judul dan perlihatkan di tajuk / grup

5- Buat kustom "views-view-unformatted.tpl" untuk tampilan itu.

6- Dalam tampilan ini kita tambahkan <?php print $title; ?></h2>setelah <?php print $row; ?>. (kami menambahkan judul dan menutup tag H terbuka di templat pertama)


EDIT TERAKHIR:

Anda cukup menggunakan tampilan PHP untuk mencetak semua yang Anda butuhkan dan gaya tidak akan difilter.


0

Saya memiliki masalah yang sama dan menyelesaikannya dengan membuat templat bernama

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

Dalam kasus saya, kode yang saya gunakan untuk membuat HTML yang saya butuhkan adalah:

<?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>';

Mengaktifkan modul Devel dan menggunakan

dpm($row);

dalam file template itu SANGAT membantu. Tidak mungkin menemukan ini tanpa itu.


0

Solusi termudah yang bisa saya temukan adalah memasukkan nilai sebagai atribut data. Kemudian di JavaScript saya, saya mengambil nilai dari bidang data dan memperbarui CSS untuk mencerminkan perubahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.