Добавление класса css в строку foreach - PullRequest
0 голосов
/ 02 марта 2012

У меня есть следующий код, который отображает связанные элементы в шаблоне WordPress, но я хотел бы добавить класс, к которому каждый второй элемент прикреплен с классом CSS right, что мне нужно изменить, чтобы добиться этого?

  <?php $rel = $related->show(get_the_ID(), true);
   foreach ($rel as $r) :
   echo '<div class=related-item><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
   endforeach;?>

Хотя это связано с Wordpress, я подумал, что это больше относится к общему PHP-кодированию, поэтому пишите здесь, а не на WPSE.

Ответы [ 5 ]

5 голосов
/ 02 марта 2012

попробуйте

<?php $rel = $related->show(get_the_ID(), true);
 $count = 0;
foreach ($rel as $r) {
 $class= ($count%2 == 0)?"right":"";

 echo '<div class="related-item '.$class.'"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
$count++;
}?>
2 голосов
/ 02 марта 2012

Если массив имеет упорядоченный индекс, вы можете использовать вычисление по модулю или побитовую операцию.Если массив основан на нечисловых или непоследовательных числах, вам нужно добавить счетчик.

$i & 1 // odd using bitwise

$i % 2 // odd modulo

Итак, вы получите следующее:

$i = 0;
foreach ($rel as $r) { // note that I have used curly brackets. I think it is cleaner  more standard
    $i++;
    $classes = array('related-item');
    if ($i % 2 == 0) $classes[] = 'right';

    echo '<div class="'.implode(' ', $classes).'"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
}

Или использование побитового:

$i = 0;
foreach ($rel as $r) { // note that I have used curly brackets. I think it is cleaner  more standard
    $i++;
    $classes = array('related-item');
    if ($i & 2 == 0) $classes[] = 'right';

    echo '<div class="'.implode(' ', $classes).'"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
}

Или, если $rel имеет последовательный индекс, начинающийся с нуля:

foreach ($rel as $index => $r) { // note that I have used curly brackets. I think it is cleaner  more standard
    $classes = array('related-item');
    if ($index & 2 == 1) $classes[] = 'right';

    echo '<div class="'.implode(' ', $classes).'"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
}
0 голосов
/ 02 марта 2012
<?php
 foreach($rel as $key => $r) {
   /* here we check if $key is even and assign class name or empty string to $class variable  */
   ($key%2) ? $class = 'your-class-name' : $class = '';

   /* and here we just add $class variable to 'class="related-items " part. */
   /* so if $key is odd then $class will be empt and your div will have only 'related-item' class, and if $key is even then $class will hold 'your-class-name' value and div will have two classes: related-item and your-class-name */
   echo '<div class="related-item '.$class.'"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
 }
?>
0 голосов
/ 02 марта 2012

Вы имеете в виду:


$i = 0;
    foreach ($rel as $r) :
        $class = (($i % 2) == 0) ? "your_class"  : "";
            echo '<div class="related-item $class"><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.''.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
        $i++;
    endforeach;

0 голосов
/ 02 марта 2012
    <?php $rel = $related->show(get_the_ID(), true);
       $i = 0;
       foreach ($rel as $r) {
           echo '<div class=related-item' . ($i++ % 2 ? '' :  ' right') . '><a href='.get_permalink($r->ID).'>'.'<div class=page-related-title>'.$r->post_title.'</div>'.get_the_post_thumbnail($r->ID, array(50,50)).'</a></div>';
       }
    ?>

Как то так.Мой совет - использовать фигурные скобки вместо foreach (): endforeach;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...