-1

So I'm wanting to make a way to display the 2nd newest row from my database. So my example (To help better explain it) If i have 10 rows. I want to display only the second newest one. Not the newest one but the one right after it. Or the maybe even the third one. I have my working code below and i see the for each loop. But I'm not sure how to only display the one I'm wanting it to display. I also don't think how i have it set up is the most efficient way of acomplishing this.

I am using concrete5 for this site and the main idea is for composer so i can post a new post and the pull a recent news feed but showing the second post.

Here is my current code: (This shows the first post)

    <?php 
    defined('C5_EXECUTE') or die("Access Denied.");
    ?>
    <div id="blog-index">
        <?php  
        $isFirst = true; //So first item in list can have a different css class (e.g. no top border)
        $excerptBlocks = ($controller->truncateSummaries ? 1 : null); //1 is the number of blocks to include in the excerpt
        $truncateChars = ($controller->truncateSummaries ? $controller->truncateChars : 255);
        $imgHelper = Loader::Helper('image');
        foreach ($cArray as $cobj):
            $title = $cobj->getCollectionName();
            $date = $cobj->getCollectionDatePublic(DATE_APP_GENERIC_MDY_FULL);
            $author = $cobj->getVersionObject()->getVersionAuthorUserName();
            $link = $nh->getLinkToCollection($cobj);
            $firstClass = $isFirst ? 'first-entry' : '';

            $entryController = Loader::controller($cobj);
            if(method_exists($entryController,'getCommentCountString')) {
                $comments = $entryController->getCommentCountString('%s '.t('Comment'), '%s '.t('Comments'));
            }
            $isFirst = false;
        ?>
        <div class="entry">
            <div class="title">
                <h3>
                    <a href="<?php  echo $link; ?>" class="text-error"><?php  echo $title; ?></a>
                </h3>
                <h6 class="post-date">
                    <?php  
                    echo t('Posted by %s on %s',$author,$date);
                    ?>
                </h6>
            </div>
            <div class="excerpt">
                <?php
                    $a = new Area('Main');
                    $a->disableControls();
                    if($truncateChars) {
                      $th = Loader::helper('text');
                      ob_start();
                        $a->display($cobj);
                      $excerpt = ob_get_clean();
                      echo $th->entities($th->shorten($excerpt,$truncateChars));
                    } else {
                      $a->display($cobj);
                    }
                  ?>
            </div>
            <div class="ccm-spacer"></div>
            <br />
            <div class="meta">
                <?php  echo $comments; ?> <a href="<?php  echo $link; ?>" class="btn btn-danger"><?php  echo t('Read the full post'); ?> <i class="icon-chevron-right"></i></a>
            </div>
        </div>
        <hr class="blog-entry-divider"/>
        <?php  endforeach; ?>
    </div>
John Ayers
  • 509
  • 1
  • 11
  • 33
  • How are you generating $cArray? In MySQL You can do `LIMIT 1, 1` that will return you the 2nd row. Or you could do `LIMIT 1, 5` that will return you the 2nd, 3rd, 4th, 5th, and 6th rows. – chrislondon Jul 01 '13 at 13:06
  • Why don't you just limit the query? First of all use ORDER BY to get the rows in the order you want then use LIMIT 1,1 to get the second row or LIMIT 2,1 TO get the third row etc – Pattle Jul 01 '13 at 15:40

1 Answers1

1

To build upon what the others have written as comments:

What you've pasted is a concrete5 view. You'll notice there's no db querying or PageList building in there. For that, you need to look in the controller. (This looks like a page list block view, so the controller will be in / concrete / core / controllers / blocks / page_list.php (on c5.6+).

The concrete5 api code to do what the others have suggested (let mysql handle the skipping) is done within the ->get() call. So, on about line 135:

$pl->get(1, 1);

Remember not to modify the files directly, but to override them the c5 way. There are plenty of tutorials on this on the c5 website.

James S
  • 3,355
  • 23
  • 25