1

This is really really easy in Drupal 7: just use field_view_field or field_view_value. Choose the latter if you want to re-render a particular field value, or the former if you want to re-render the whole field (label and all values).

However, I couldn't figure out how to do this in Drupal 6. I resorted to implementing hook_nodeapi and changing the node content before it was rendered. This approach cannot be implemented from the theme, though, I'm looking for a theme solution.

1 Answer 1

1

In template_preprocess_node($vars), you can do:

$node=$vars['node'];

and then all the fields of the node are available to you, and a quick

drupal_set_message('<pre>' . print_r($node,true) . '</pre>');

will show them to you. So if you had a text field called field_description you can access it via:

$node->field_description[0]['value'];

and you can then modify to your heart's content, eg:

$node->field_description[0]['value']='What I really wanted to say was....';

and then at the end:

$vars['node']=$node;

sets it on its way.

5
  • That's not what I asked. I want to prepare the field, change some parameters and pass it through drupal_render(). And anyway, changing $vars['node'] would probably be useless since node.tpl.php prints $vars['content']. Commented Mar 20, 2012 at 14:50
  • D'oh. You're right. But I've long stopped using $content in my node.tpl.php's for this and a whole other raft of reasons. But, you can cp content-field.tpl.php out of cck's directory and then cp it again to content-field-FIELDNAME.tpl.php and modify that to redo that field, and that will make it into $content.
    – Jimajamma
    Commented Mar 20, 2012 at 15:36
  • Yes, but it doesn't re-render the field items. field.tpl.php is just the wrapper. Commented Mar 21, 2012 at 3:05
  • Why can't you change the <?php print $item['view'] ?> in there to whatever you need to render field how you want it rendered? You have $item['value'] or $item['nid'] etc so you have the raw information to work with to do whatever... or am I totally missing the point here?
    – Jimajamma
    Commented Mar 21, 2012 at 3:51
  • that is precisely what i'm looking for. The $item['value'] is not a renderable array, though, it's just the raw value (or a filtered value). What I want is to build the renderable array (with its '#theme' and '#formatter' items). Commented Mar 22, 2012 at 14:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.