[support] CCK/nodereference/Views - Block of referenced nodes?

Larry Garfield larry at garfieldtech.com
Mon Mar 26 14:53:30 UTC 2007


It looks like in your argument code you're trying to pass in an argument for each related nid.  That's wrong. :-)  Instead, just pass the current nid (which you are getting correctly) as the argument, and then use that single argument to filter the nodereference field.  You don't need any SQL for it; Views will do the "WHERE field_related=$nid" part itself.

Cheers.

--Larry Garfield

On Mon, 26 Mar 2007 15:28:22 +0100, Garrett Coakley <garrettc at polytechnic.co.uk> wrote:
> 
> Hi,
> 
> I'm building a site (Drupal5.1) that contains a CCK content type for
> articles. The article type has a nodereference field attached so that
> authors can generate a list of related articles ("If you like this
> article you might also like..." functionality.).
> 
> I've been able to build a custom function that displays a list of the
> related nodes at the end of the article by doing:
> 
> # template.php
> function display_related_articles($node) {
>    if ($node->field_related_articles['0']['view'] != '') {
>      return _phptemplate_callback('box_related_articles', array
> ('node' => $node));
>    }
> }
> 
> # box_related_articles.tpl.php
> <ul>
> <?php foreach ($node->field_related_articles as $related) { ?>
>    <li><?php print $related['view']; ?></li>
> <?php } ?>
> </ul>
> 
> I'd now like to replicate this same functionality into a sidebar
> block, but I'm hitting a brick wall somewhere. Using the views module
> I've generated a custom block using the "Arguments" system to do the
> following:
> 
> # Argument Type
> Node Reference: Related Articles - Display All Values
> 
> # Argument Code
> if ($type == 'block' && arg(0) == 'node' && is_numeric(arg(1))) {
>    $currentnode = arg(1);
>    $query = db_query("SELECT field_related_articles_nid FROM
> content_field_related_articles WHERE nid = %d ORDER BY
> field_related_articles_nid ASC", $currentnode);
>    $args = array();
>    while ($result = db_fetch_object($query)) {
>      $args[] = $result->field_related_articles_nid;
>    }
> }
> return $args;
> 
> This works to a certain degree, but it's showing some odd quirks. The
> test node I'm using references 6 other articles, but the block is
> displaying 7 entries: 5 of the referenced articles, 1 seemingly
> random article, and a link back to the article currently being
> displayed.
> 
> I have a feeling I'm being dense and missing something supremely
> simple here, but I can't for the life of me work out what it is. I've
> poured over the docs on drupal.org and although I've found lots of
> explanations on how to display reverse references ("List all the
> nodes that reference this one") I can't seem to find a solution for
> this, what I originally thought was simple, use case.
> 
> This site is currently under development so I can't point you towards
> a URL, but if anyone wants to see an export of the view then I could
> stick it up on pastebin.
> 
> Thanks in advance.
> 
> G.
> 
> --
> ------------------------------------------------------------------------
>    Blog: http://polytechnic.co.uk
> Photos: http://flickr.com/photos/garrettc
>   Music: http://last.fm/user/garrettc1
> 
> 
> 
> --
> [ Drupal support list | http://lists.drupal.org/ ]



More information about the support mailing list