Prev/Next node navigation with a thumbnail in a full node

后端 未结 1 1945
北荒
北荒 2021-01-16 07:41

I\'ve been trying to figure this out and make it work, but as I\'m not a programmer, just a designer with limited coding knowledge I\'ve been hitting a wall on this one.

相关标签:
1条回答
  • 2021-01-16 08:12

    template.php

    function dad_prev_next($nid = NULL, $op = 'p', $qty = 1) {
        if ($op == 'p') {
            $sql_op = '<';
            $order = 'DESC';
        }
        elseif ($op == 'n') {
            $sql_op = '>';
            $order = 'ASC';
        }
        else {
            return NULL;
        }
    
        $output = '';
    
        // your node must have an image type field
        // let's say it's name is IMAGEFIELD
        // select from node table
        $query = db_select('node', 'n');
        // join node table with image field table
        $query->leftJoin('field_data_field_IMAGEFIELD', 'i', 'i.entity_id = n.nid');
        // join file managed table where all data about managed files stored
        $query->leftJoin('file_managed', 'f', 'f.fid = i.field_IMAGEFIELD_fid');
        $query
            // select nid and title from node
            ->fields('n', array('nid', 'title'))
            // select uri from file_managed (image path)
            ->fields('f', array('uri'))
            // select image alt and title
            ->fields('i', array('field_IMAGEFIELD_alt', 'field_IMAGEFIELD_title'))
            // where nid "greater than"/"lower than" our current node nid
            ->condition('n.nid', $nid, $sql_op)
            // where node type in array('your content types')
            ->condition('n.type', array('photos'), 'IN')
            // where node is published
            ->condition('n.status', 1)
            // where requested node has image to display (if you want thumbnail)
            ->condition('f.uri', '', '!=')
            // order by nid
            ->orderBy('n.nid', $order)
            // limit result to $qty
            ->range(0, $qty);
    
        // make query
        $result = $query->execute()->fetchAll();
    
        foreach ($result as $node) {
            // theme your thumbnail image
            $variables = array(
                // default image style name `thumbnail`
                // you can use your own by following
                // admin/config/media/image-styles on your site
                'style_name' => 'thumbnail',
                'path' => $node->uri,
                'alt' => $node->field_IMAGEFIELD_alt,
                'title' => $node->field_IMAGEFIELD_title
            );
            $image = theme('image_style', $variables);
    
            $options = array(
                'html' => TRUE,
                'attributes' => array(
                    'title' => $node->title
                )
            );
            $output = l($image, "node/{$node->nid}", $options);
        }
    
        return $output;
    }
    

    node.tpl.php

    <?php print dad_prev_next($node->nid, 'p', 2); ?>
    <?php print dad_prev_next($node->nid, 'n', 2); ?>
    
    0 讨论(0)
提交回复
热议问题