NOTE: This solution is deprecated in the 5.0 version of CCK. This is due to the fact that CCK in 5.0 now uses the standard node body and teaser fields. However, the following solution works well for any 4.7.x system.

CCK nodes do not function properly with Teasers. This is mainly due to the fact that CCK doesn't know which field in a custom node should be considered the $body field.

This limitation "may" be solved in 5.0 eventually, when the $body field type is added to CCK. In the meantime, some people have offered solutions by using the contemplate module to create a teaser on the fly for each node, but this has a couple of limitations. First, the teaser must be processed every time the node is served up to the user. Second, because the teaser is not stored, it can't be used in Views.

Here is a solution that will allow Teasers in CCK nodes to function in the same way as standard nodes:

  1. First, you must install the computed_field module for CCK. Use this module to create a computed field called "cckteaser" that will store the teaser text in the CCK table and make it available to Views.

    Following the directions in the computed field module, add the following code to the Computed Code field: (this assumes a computed field name of "cckteaser" and a custom CCK field of "body" to store your main body text)

    $node_field[0]['value'] = node_teaser($node->field_body[0]['value']);

    This uses Drupal core's node_teaser function to do the stripping for us. Therefore, it honors the Teaser length stored in the Drupal defaults and also honors the <!--break--> tag.

    Add the following code to the Display Format field:

    $display = $node_field_item['value'];

    Choose to store the value and use a field type of varchar. Make sure to specify a length long enough to hold the trimmed text. (200 to 800 characters, depending on your defined teaser length)

    Now, every time the custom CCK node is saved or revised, the teaser will be calculated and stored in the computed field exactly the same way as standard nodes.

  2. Make sure to install the contemplate module. This will allow you to build a special template for the CCK teaser and main body nodes.

    In the Teaser template, place the cckteaser field. In the Body Template, place the body field. You now have a custom CCK node that will display truncated Teasers just like standard nodes.

  3. There remains one small glitch, however. CCK assumes that true teasers don't work, so it sets the $readmore value to FALSE. This is the value that tells Drupal to display a "Read More" link below the content. We can recreate the read more link however, by adding the following code to the end of the Contemplate teaser template:
    <?php
    if (strlen($field_cckteaser[0]['value']) < strlen($field_body[0]['value']))
    { ?>
    <span class="readmore"><?php print l('... (read more)', 'node/'.$nid, array('title' => 'Read more on this article')); ?></span>
    <?php } ?>

    This custom code will first test to see if the cckteaser field is shorter than the body field. If it is, then "read more" is appended directly to the end of the cckteaser content and points to the url of the full page. This is a bit different from the location of "read more" on standard nodes. (which are below the content, next to the "add comment" link) But this location for "read more" catches the reader's eye better since it's on the same line as the content.

That's it. Until Teaser functionality becomes standard in CCK, this approach should work.