Let's make it a CCK formatter

Manuel Garcia - July 3, 2009 - 16:57
Project:Node Reference Variables
Version:6.x-1.x-dev
Component:Code
Category:feature request
Priority:normal
Assigned:greg.harvey
Status:active
Description

Hi, great initiative with this module!

I've tested it locally, and looks to be working fine =)

About the suggestion, have you thought of moving this to a CCK formatter in the future? Seems to me it could be a good way to go!

I suppose the code would have to be more stable but hey, this is really new still. Just thought I'd drop the idea just in case =)

#1

greg.harvey - July 6, 2009 - 07:58
Assigned to:Anonymous» greg.harvey

Hi. Thanks for the suggestion. I don't really know anything about CCK formatters yet, but it sounds like a perfectly sensible idea. Assigning to me. Can you suggest a module that might be a good current example of a CCK formatter for CCK 6.x-2.x?

#2

Manuel Garcia - July 6, 2009 - 10:27

I know there are two hooks available, hook_field_formatter_info and hook_field_formatter  , but unfortunately the documentation for d6 does not include these two yet.

hook_field_formatter_info(): Declare information about a formatter.
hook_field_formatter($field, $item, $formatter, $node): Prepare an individual item for viewing in a browser.

This comment could also be useful perhaps.

My guess is better look at an example, even nodereference itself implements formatter_info, might be a good way to start.

Some other examples could be:
thickbox, and perhaps a more simple example could be imagefield

Let me know how it goes, looks to me that it's not as hard as it sounds, after seeing some examples :D

#3

Manuel Garcia - July 7, 2009 - 18:01

I've been digging into cck formatters myself a bit, something I wanted to learn anyway, and this should get you started

<?php

/**
* Implementation of hook_field_formatter_info().
*/
function nodereference_variables_field_formatter_info() {
 
$formatters = array();
  if (
module_exists('tabs')) {
   
$formatters['tabs'] = array(
     
'label' => t('Display in tabs'),
     
'field types' => array('nodereference'),
     
'description' => t('Displays the referenced nodes in tabs using the tabs module.'),
    );
  }
  return
$formatters;
}


/**
* Implementation of hook_theme().
*/
function nodereference_variables_theme() {
 
$theme = array();
  if (
module_exists('tabs')) {
   
$theme['nodereference_variables_formatter_tabs'] = array('arguments' => array('element' => NULL));
  }
  return
$theme;
}

/**
* Theme function for displaying referenced nodes in tabs
*/
function theme_nodereference_variables_formatter_tabs($element) {
 
$output = '';
 
// do your magic here
 
return $output;
}
?>

Something along those lines should get what we want =) ---now Im not sure wether this should be provided by CCK, or tabs or what... hope it helps!

#4

greg.harvey - July 7, 2009 - 17:50

Thanks for this - great start. To be honest, I don't have an opportunity to implement it for a little while as I have to get on with delivering the site I'm working on with what I have (deadlines are tight) but I will come back to this and finish it if I get time, either before I go on holiday or when I get back. =)

#5

capellic - July 15, 2009 - 22:41

As someone who has struggled with this topic, this would be GREAT. I'll watch for it on the module release feed!

#6

Manuel Garcia - August 8, 2009 - 13:34

Just for future reference when you get to doing this, I've written up an article about how to create a cck formatter, take a look, I hope I wrote it clearly enough =) There is an example module attached to the article, implementing a couple of cck formatters for nodreference, you could just use that as a template if you want.

 
 

Drupal is a registered trademark of Dries Buytaert.