添加样式属性以查看字段


12

我想在视图中的每个标题字段中添加一个样式属性。我为一种颜色创建了一个字段。我试图这样重写结果:

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

但是样式属性将被删除。我正在使用Drupal 7。

任何帮助表示赞赏。


为什么将其删除?您是否尝试过使用全局文本字段?
亚历克斯·吉尔

谢谢您的回答!您对全局文本字段是什么意思?我认为的设置:格式:未格式化的列表显示:字段
Ksn 2012年

您可以选择添加“全局文本”字段。该字段必须位于您已添加的其他任何字段之后。然后,您可以在此自定义字段中使用令牌来创建与上面所做的类似的操作。然后,您可以隐藏自定义字段中显示的字段。
亚历克斯·吉尔

1
最好的选择是为该字段创建一个自定义模板文件,或者使用基于下面提到的令牌的类。
亚历克斯·吉尔

1
如果您在右侧的“高级”下查看“主题信息”选项,则此处将为您提供一些模板建议。
亚历克斯·吉尔

Answers:


4

您可以使用“样式设置”在标题字段中设置类别,如下屏幕所示。您可以在样式设置中使用令牌替换来将class设置为title字段。

在此处输入图片说明

使用小型javascript或jquery读取标题字段的类,并使用CSS属性将颜色设置为与类名相同的颜色。


2
也许您的解决方案有效,但是我不用JavaScript怎么解决这个问题。有可能吗?
2012年

2
由于安全问题,您不能直接将字段值注入样式属性。。请参阅此处的问题drupal.org/node/853880
Anil Sagar

然后,你需要编写不同的CSS类为每种颜色,但是这是最坏的情况,因为你需要写1600万类:( Javascript或jQuery的效果会更好。
Mathankumar

2
Anil,我尝试了您的解决方案,但Drupal从颜色中删除了#,因此我找到了jQuery的另一个解决方案。我将属性数据添加到字段中:<h2 data-color =“ [field_color]”> [title_1] </ h2>我已经研究了其他使用模板的解决方案,但是找不到正确的解决方法。
2012年

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. 像这样重写hook_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

在建议的字段中添加一个名称,然后在主题文件夹中打开style.css并键入“ .my-css-name”,然后输入所需的CSS结果,例如:

.my-css-name {color:red; 背景:绿色;}


0

我正在做类似的事情,这就是我所做的:

1-创建一个带有颜色和标题字段的视图。

2-为该视图创建自定义“ views-view-fields.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以反映更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.