Adicionar atributo de estilo para visualizar campos

12

Gostaria de adicionar um atributo de estilo a cada campo de título em minha opinião. Eu criei um campo para uma cor. Eu tentei reescrever o resultado assim:

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

Mas o atributo style será removido. Estou usando o Drupal 7.

Qualquer ajuda apreciada.

Ksn
fonte
Por que é removido? Você já tentou usar um campo de texto global?
Alex Gill #
Obrigado pela sua resposta! O que você quer dizer com um campo de texto global? As configurações na minha opinião: Formato: Lista não formatada Mostrar: Campos
Ksn 9/10/12
Você tem a opção de adicionar um campo 'texto global'. Este campo deve ir atrás de outros campos que você já adicionou. Você pode usar tokens nesse campo personalizado para criar similar ao que você fez acima. Você pode ocultar os campos que são mostrados no campo personalizado.
Alex Gill #
1
Sua melhor opção é provavelmente criar um arquivo de modelo personalizado para esse campo ou usar uma classe com base no token mencionado abaixo.
Alex Gill #
1
Se você procurar em 'Avançado', no lado direito, há uma opção para 'Informações do tema', aqui serão apresentadas algumas sugestões de modelos.
Alex Gill #

Respostas:

4

Você pode definir uma classe para o campo de título usando Configurações de estilo, como mostrado abaixo na tela. Você pode usar substituições de token nas configurações de estilo para definir a classe no campo de título.

insira a descrição da imagem aqui

Usando javascript pequeno ou jquery, leia a classe do campo de título e defina a cor igual ao nome da classe usando a propriedade CSS .

Anil Sagar
fonte
2
Talvez sua solução funcione, mas eu o que resolver isso sem javascript. É possível?
Ksn 9/10/12
2
Você não pode diretamente injetar o valor do campo para o tipo de estabelecimento devido a questões de segurança .. Veja a questão aqui drupal.org/node/853880
Anil Sagar
Então você precisa para escrever classe css separado para cada cor, no entanto, este é o pior caso, porque você precisa escrever 16 milhões classe :( Javascript ou jquery seria melhor..
Mathankumar
2
Antes, tentei sua solução, mas o Drupal removeu # da cor, então encontrei outra solução com o jQuery. Adicionei os dados do atributo ao campo: <h2 data-color = "[field_color]"> [title_1] </h2> Eu investiguei outras soluções com modelos, mas não consegui encontrar o caminho certo para resolvê-lo.
KSN
1

Você pode criar um tpl para este campo (por exemplo: campo-de-view-MY-VIEW-NAME-page.tpl.php); neste tpl, você pode adicionar o token escrevendo isto:

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

Eu também tive que incluir o valor de um campo como uma cor embutida para um campo específico. Depois de navegar na Web por uma solução personalizável fácil, acabei fazendo o seguinte:

  1. Adicione o valor da cor como um token de classe CSS, assim como a imagem na postagem anterior.
  2. Reescreva a função hook_preprocess_views_view_field () da seguinte maneira:

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

Como você pode ver, adicionei estas linhas:

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

E mude a linha em:

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

adicione um nome ao campo sugerido e abra style.css na pasta do tema e digite ".my-css-name" seguido pelos resultados desejados do css, como:

.my-css-name {color: red; fundo: verde; }

aaronStarK
fonte
0

Estou apenas fazendo algo semelhante e aqui está o que eu fiz:

1- Crie uma visualização com campos de cores e títulos.

2- Crie um "views-view-fields.tpl" personalizado para essa visualização. (Um modelo personalizado apenas para o campo de cores me mostrou um erro)

3- Na field->contentlinha, adicione / substitua o que você precisa ....<h2 style="color: #<?php print $field->content; ?>">

/ / / / De agora em diante, não testei, mas deve funcionar bem / / / /

4- Exclua o campo do título e mostre-o no cabeçalho / grupo

5- Crie um "views-view-unformatted.tpl" personalizado para essa visualização.

6- Nesta visão, adicionamos <?php print $title; ?></h2>depois <?php print $row; ?>. (adicionamos o título e fechamos a tag H aberta no primeiro modelo)


ÚLTIMA EDIÇÃO:

Você pode simplesmente usar visualizações PHP para imprimir tudo o que você precisa e o estilo não será filtrado.

Federico Arena
fonte
0

Eu tive esse mesmo problema e resolvi-o criando um modelo chamado

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

No meu caso, o código que usei para criar o HTML necessário era:

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

Ativando o Módulo Devel e Utilizando

dpm($row);

no arquivo de modelo foi MUITO útil. Não poderia ter descoberto isso sem ele.

evanmcd
fonte
0

A solução mais fácil que encontrei foi inserir o valor como um atributo de dados. Em meu JavaScript, pego o valor do campo de dados e atualizo o CSS para refletir a alteração.

Hawkee
fonte