Matt Saunders
Matt Saunders

Reputation: 4371

Drupal 7 Views custom view template fields

I've successfully created a custom view template for my Drupal 7 site but am having issues adding attributes to the content which is outputted. I've searched high and low for the answer to this but to no avail.

I have a view called: views-view-fields--homepage-articles.tpl.php

I am printing content like :

$fields['title']->content

This is fine and expected, and outputs:

<a href="link-to-page">Title</a>

But I want to add classes to it - how? I'm thinking I need to write a hook, but I cannot find this documented anywhere. At the moment my solution is a string replace:

<?php print str_replace('<a ', '<a class="brand-blue uppercase nodecoration"', $fields['title']->content); ?>

As you can imagine, this is not a satisfactory or long-term solution.

Many thanks!

Upvotes: 1

Views: 1902

Answers (2)

jamestsymp
jamestsymp

Reputation: 157

You should be able to add the classes to the field using template_preprocess_views_view_fields().

Edit: Couldn't do it the way I thought, but you can overwrite the output of the field like so:

function MY_THEME_preprocess_views_view_fields(&$vars) {
  $view = $vars['view'];
  if ($view->name == 'node_listing') {
    foreach ($vars['fields'] as $id => $field) {
      if ($id == 'title') {
        $field_output = l($view->result[$view->row_index]->node_title, 'node/'. $view->result[$view->row_index]->nid, array('attributes' => array('class' => 'brand-blue uppercase nodecoration')));

        $vars['fields'][$id]->content = $field_output;
      }
    }
  }
}

Upvotes: 3

stevepurkiss
stevepurkiss

Reputation: 131

Have you tried using Semantic Views? https://drupal.org/project/semanticviews - that way you can override the classes within the UI instead of template files, may suit your needs better.

Upvotes: 0

Related Questions