如何在PHP和CSS的for循环中正确定位div

时间:2017-03-08 21:48:38

标签: php html css

我有一个问题,一直在努力解决。我创建了一个你可以调用它的“博客”,我可以选择发一个新帖子。当我发布新帖子时,会添加一个div。但是,当添加div时,前一个帖子会向右移动。我尝试了各种各样的建议,但我无法得到它。这是一张图片:

configured

我想要的是让div正确排列。这是我的代码:

    row = 0;
    offset = 0;
    oldPos = -1;
    final String nonBreakingSpace = "\u00A0\u00A0";
    textV.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int pos;
            StringBuilder sb = new StringBuilder(textV.getText());

            pos = textV.getLayout().getLineStart(row);
            if (oldPos!=-1 && pos<oldPos)
            {
                sb.delete(oldPos, oldPos + nonBreakingSpace.length());
            }

            if (offset==0)
            {
                row++;
                offset = -1;
            }
            else
            {
                offset = 0;
            }
            final int lineCount = textV.getLayout().getLineCount();
            pos = textV.getLayout().getLineStart(row);
            oldPos = pos+offset;
            if (row>=lineCount)
            {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                    removeLayoutListenerPre16(textV.getViewTreeObserver(), this);
                } else {
                    removeLayoutListenerPost16(textV.getViewTreeObserver(), this);
                }
                sb.insert(0, nonBreakingSpace);
                sb.insert(sb.length(), nonBreakingSpace);
            }
            else
            {
                sb.insert(pos+offset, nonBreakingSpace);                    
            }
            textV.setText(sb);
        }
    }); 
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeGlobalOnLayoutListener(listener);
}

@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
    observer.removeOnGlobalLayoutListener(listener);
}   

注意:我猜“run snipped”似乎没有运行php。

1 个答案:

答案 0 :(得分:1)

听起来你并没有在正确的地方关闭div。

确保缩进正确无误,并确保在<div>关闭之前,foreach内打开的每个foreach也已关闭。

当你在这样的循环中有很多标记时,我喜欢使用foreach(): endforeach;,因为这样可以更容易地阅读代码。

<?php foreach ($posts as $post):?>
<div>
    <h2 class ="title">
       <a href="index.php?id=<?php echo $post['post_id'];?>" style="color:white"><?php echo $post['title'];?></a>
    </h2>
    <p> 
        Posted on 
        <?php echo date('d-m-Y h:i:s', strtotime($post['date_posted'])); ?>
        in 
        <a href="category.php?id=<?php echo $post['category_id']; ?>", style="color:green">
            <?php echo $post['name']; ?>
        </a>
        <br></br>
        <?php if(getPermissions($username)): ?>

            <a href="edit_post.php?id=<?php echo $post['post_id']; ?>", style="color:green">Edit Post |</a>

            <a href="delete_post.php?id=<?php echo $post['post_id']; ?>", style="color:green"> Delete Post</a>

        <?php endif; ?>
    </p>
    <div class="contents"> 
      <?php echo nl2br($post['contents']); ?></div>
    <div>

</div>
<?php endforeach;?>

为每个帖子添加包装div将在标记内部提供一个框。 Div有显示:block是默认的。这比使用<br /><p>&nsbp;</p>更好,因为当你需要设置该元素的样式时,它会给你更多的控制。