Thêm thuộc tính kiểu để xem các trường


12

Tôi muốn thêm một thuộc tính phong cách cho từng trường tiêu đề trong chế độ xem của tôi. Tôi đã tạo một trường cho một màu. Tôi đã cố gắng viết lại kết quả như thế này:

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

Nhưng thuộc tính style sẽ bị xóa. Tôi đang sử dụng Drupal 7.

Bất kỳ trợ giúp đánh giá cao.


Tại sao nó được gỡ bỏ? Bạn đã thử sử dụng một trường văn bản toàn cầu thay thế?
Alex Gill

Cảm ơn về câu trả lời của bạn! Bạn có ý nghĩa gì với một trường văn bản toàn cầu? Các cài đặt trong chế độ xem của tôi: Định dạng: Danh sách chưa được định dạng Hiển thị: Các trường
Ksn

Bạn có tùy chọn để thêm trường 'văn bản toàn cầu'. Trường này phải đi sau bất kỳ trường nào khác mà bạn đã thêm. Sau đó, bạn có thể sử dụng mã thông báo trong trường tùy chỉnh này để tạo tương tự như những gì bạn đã làm ở trên. Sau đó, bạn có thể ẩn các trường được hiển thị trong trường tùy chỉnh.
Alex Gill

1
Tùy chọn tốt nhất của bạn là có thể tạo tệp mẫu tùy chỉnh cho trường này hoặc sử dụng một lớp dựa trên mã thông báo được đề cập bên dưới.
Alex Gill

1
Nếu bạn xem phần 'Nâng cao' ở phía bên phải có tùy chọn 'Thông tin chủ đề', thì ở đây nó sẽ cung cấp cho bạn một số đề xuất cho các mẫu.
Alex Gill

Câu trả lời:


4

Bạn có thể đặt một lớp thành trường tiêu đề bằng Cài đặt kiểu như hiển thị bên dưới màn hình. Bạn có thể thay thế mã thông báo người dùng trong cài đặt kiểu để đặt lớp thành trường tiêu đề.

nhập mô tả hình ảnh ở đây

Sử dụng javascript hoặc jquery nhỏ, đọc lớp của trường tiêu đề và đặt màu giống như tên lớp bằng thuộc tính CSS .


2
Có thể giải pháp của bạn hoạt động, nhưng tôi phải giải quyết vấn đề này mà không cần javascript. Là có thể?
Ksn

2
Bạn không thể tiêm trực tiếp giá trị trường vào thuộc tính kiểu do vấn đề bảo mật .. Xem vấn đề tại đây drupal.org/node/853880
Anil Sagar

Sau đó, bạn cần phải viết lớp css riêng cho mỗi màu, tuy nhiên đây là trường hợp xấu nhất, vì bạn cần phải viết 16 triệu lớp :(. Javascript hoặc jquery sẽ tốt hơn.
Mathankumar

2
Anil, tôi đã thử giải pháp của bạn nhưng Drupal đã xóa # khỏi màu, vì vậy tôi tìm thấy một giải pháp khác với jQuery. Tôi đã thêm dữ liệu thuộc tính vào trường: <h2 data-color = "[field_color]"> [title_1] </ h2> Tôi đã nghiên cứu các giải pháp khác với các mẫu, nhưng tôi không thể tìm ra cách giải quyết phù hợp.
Ksn

1

Bạn có thể tạo một tpl cho trường này (ví dụ: view-view-field-MY-VIEW-NAME-page.tpl.php), trong tpl này, bạn có thể thêm mã thông báo bằng văn bản này:

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

1

Tôi cũng phải bao gồm giá trị của một trường dưới dạng màu nội tuyến cho một trường cụ thể. Sau khi duyệt web để tìm giải pháp tùy chỉnh dễ dàng, tôi đã kết thúc việc này:

  1. Thêm giá trị của màu dưới dạng mã thông báo Lớp CSS, giống như hình ảnh trong bài viết trước.
  2. Viết lại hàm hook_pre process_view_view_field () như thế này:

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

Như bạn thấy, tôi đã thêm những dòng này:

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

Và thay đổi dòng dưới:

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

0

thêm tên vào trường anil được đề xuất sau đó mở style.css trong thư mục chủ đề của bạn và nhập ".my-css-name" theo sau là kết quả css mong muốn, chẳng hạn như:

.my-css-name {màu: đỏ; nền: màu xanh lá cây; }


0

Tôi chỉ làm một cái gì đó tương tự và đây là những gì tôi đã làm:

1- Tạo chế độ xem với các trường màu và tiêu đề.

2- Tạo một "view-view-Field.tpl" tùy chỉnh cho khung nhìn đó. (Một mẫu tùy chỉnh chỉ dành cho trường màu, cho tôi thấy một lỗi)

3- Tại field->contentdòng thêm / thay thế những gì bạn cần ....<h2 style="color: #<?php print $field->content; ?>">

/ / / / Từ bây giờ, tôi đã không kiểm tra nó, nhưng nó sẽ hoạt động tốt / / / /

4- Loại trừ trường tiêu đề và hiển thị nó trên tiêu đề / nhóm

5- Tạo một "view-view-unformatted.tpl" tùy chỉnh cho chế độ xem đó.

6- Trong quan điểm này, chúng tôi thêm <?php print $title; ?></h2>sau <?php print $row; ?>. (chúng tôi thêm tiêu đề và đóng thẻ H mở trong mẫu đầu tiên)


EDIT CUỐI:

Bạn chỉ có thể sử dụng PHP khung nhìn để in tất cả những thứ bạn cần và kiểu sẽ không được lọc.


0

Tôi đã có vấn đề tương tự và giải quyết nó bằng cách tạo một mẫu có tên

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

Trong trường hợp của tôi, mã tôi đã sử dụng để tạo HTML tôi cần là:

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

Kích hoạt mô-đun Devel và sử dụng

dpm($row);

trong tập tin mẫu là RẤT hữu ích. Không thể tìm ra điều này mà không có nó.


0

Giải pháp đơn giản nhất tôi có thể tìm thấy là chèn giá trị dưới dạng một thuộc tính dữ liệu. Sau đó, trong JavaScript của tôi, tôi lấy giá trị từ trường dữ liệu và cập nhật CSS để phản ánh sự thay đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.