Într-o buclă foreach, cum pot ținti ultimul element din buclă?

28 iul. 2011, 12:12:53
Vizualizări: 22.5K
Voturi: 2

Am următorul cod pentru o buclă foreach și vreau să țintesc ultimul element din buclă (de exemplu, dacă sunt 3 evenimente vreau să țintesc al treilea eveniment) pentru a face ceva puțin diferit cu CSS-ul. Cum aș putea face asta?

<?php $pages = get_pages(array('child_of' => $post->ID, 'sort_column' => 'menu_order'));
    foreach($pages as $post)
    {
    setup_postdata($post);
    $fields = get_fields();
?>
<div class="event">
    <img class="event-thumbimage" src="<?php echo $fields->thumb_image; ?>" height="120" width="140" alt="<?php echo $fields->event_title; ?>" />
    <h2><?php echo $fields->event_title; ?></h2>
    <p>
        Locație: <?php echo $fields->location; ?><br />
        Început: <?php echo $fields->start_date; ?> la <?php echo $fields->start_time; ?>
        <?php $fields = get_acf(); if($fields->end_date != "") : ?>
        , Sfârșit: <?php echo $fields->end_date; ?> la <?php echo $fields->end_time; ?>
        <?php else : ?>
        <?php endif; ?>
    </p>                        
    <p style="margin-bottom:0px!IMPORTANT;"><?php echo substr($fields->description,0,170) . "..."; ?></p>
    <p><a class="read-more" href="<?php echo get_page_link($post->ID); ?>" title="Citește mai multe despre: <?php echo $fields->event_title; ?>">Citește mai mult...</a></p>
</div>
<?php } wp_reset_query(); ?>
0
Toate răspunsurile la întrebare 2
6

Puteți încerca asta:

foreach( $pages as $key => $post )

și:

<div class = "event <?php if( $key == ( count( $pages ) - 1 ) ) echo 'last'; ?>" >

Aceasta va adăuga o clasă last ultimului div cu clasa event.

28 iul. 2011 12:41:45
Comentarii

Mulțumesc, în mod ciudat a adăugat ultima clasă la al doilea element în loc de al treilea (adică ultimul element).

Rob Rob
28 iul. 2011 12:45:55

Ah da, asta pentru că $key începe de la zero, nu de la unu. Am reparat codul. Spune-mi dacă funcționează acum.

mike23 mike23
28 iul. 2011 13:02:30

ar trebui să fie if( $key == (count( $pages ) -1) ) deoarece primul index al array-ului este 0 în timp ce funcția count începe de la 1.

Bainternet Bainternet
28 iul. 2011 13:03:10

@Bainternet Mulțumesc, știam ce trebuie să fac dar nu mi-a ieșit sintaxa corect!

Rob Rob
28 iul. 2011 13:05:23

@Bainternet Se comportă puțin ciudat. Folosind -1 ca count, face ca primul item să fie "ultimul". Când schimb la +1, nu funcționează când sunt doar două iteme în listă dar merge când sunt 3, aaahh!!

Rob Rob
28 iul. 2011 15:51:15

@mike23 Vezi comentariul de mai sus pentru problema.

Rob Rob
28 iul. 2011 18:23:29
Arată celelalte 1 comentarii
1

Deoarece $pages este un array, obțineți numărul acestuia cu $pages_count = count( $pages ); și apoi în interiorul buclei, păstrați un contor care este incrementat la fiecare iterație a buclei și comparați dacă este egal cu numărul if ( $pages_count == $counter++ )

28 iul. 2011 12:27:18
Comentarii

Mulțumesc, nu sunt foarte sigur cum să implementez asta. Elementele sunt nelimitate, deci nu neapărat al treilea element, ci ultimul element.

Rob Rob
28 iul. 2011 12:35:58