как найти количество в цикле foreach? - PullRequest
0 голосов
/ 29 декабря 2011

я хочу посчитать комментарии в каждой статье ... но счетчик комментариев находится между циклами foreach .. поэтому я не могу правильно подсчитать комментарии ... поэтому я хочу цикл, но мне не нужен цикл в счетчике

articles_controller.php

$count = $this->Article->Comment->find(
    'count', array('conditions' =>  array('Comment.status' => 1))
);

изделия / index.ctp

<?php
// initialise a counter for striping the table
$count = 0;

// loop through and display format
foreach($articles as $article):
    // stripes the table by adding a class to every other row
    $class = ( ($count % 2) ? " class='altrow'": '' );
    // increment count
    $count++;

?>

<?php 
    echo $html->link(
        $article['Article']['title'], 
        array( 'action' => 'view', $article['Article']['id'])
    );  
?>

<!-- date and comment counter -->
<p class="entry-meta">
    <span class="date"><?php echo $article['Article']['created']; ?></span> <span class="meta-sep">|</span>
    <span class="comments-link">
    <!-- here i will put the comment counter -->
    <a href="declining-health.html#respond"> <?php  echo $count ['Comment'];>Comments</a>
    </span>
</p>

<?php endforeach; ?>

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Используйте свойство counterCache в отношении Post-> Comment и убедитесь, что у вас есть поле comment_count в модели поста.

IE:

<?php
    class Post extends AppModel {
        public $name = 'Post';
        public $hasMany = array(
            'Comment' => array(
                'className'    => 'Comment',
                'foreignKey'   => 'post_id'
            )
        );
    }
?>

<?php
    class Comment extends AppModel {
        public $name = 'Comment';
        public $belongsTo = array(
            'Post' => array(
                'className'    => 'Comment',
                'counterCache'   => true
            )
        );
    }
?>
// in the database table for table posts make sure to do the following

add a column: comment_count int(11) default 0

Теперь, когда вы добавляете новыйpost, у вас будет поле comment_count с начальным значением 0. Когда новый комментарий добавляется или удаляется из сообщения, значение счетчика автоматически обновляется.

Это позволяет вам просто циклически перемещаться по массиву posts ивыведите значение поля comment_count или используйте его для проверки комментариев, затем вставьте элемент и т. д.

2 голосов
/ 29 декабря 2011

Количество элементов в массиве можно посчитать с помощью sizeof().

0 голосов
/ 29 декабря 2011

Krisitian дал вам ответ, но позвольте мне предложить вам все ваши стили в интерфейсе.

псевдо-селектор css

//styles every second(even) elements
.your_class:nth-child(2n){background-color:hotpink;}

tr:nth-child(2n){background-color:hotpink;}

...these also work with jquery
...