2

我正在尝试使用 FOR 循环来编写动态 CSS。CSS 需要根据数据库表中的项目数进行更改。这是我的尝试,但它没有给我想要的输出:

    <?php
    $count_posts = wp_count_posts( 'portfolio' )->publish; // This is for a wordpress site.
    $slidecount = ceil( $count_posts / 3 ); // there are 3 database entries in each "slide".

    for ($c = 0 ; $c < $slidecount; $c++){ 
    echo '#slide' . ($c + 1) . ':checked ~ #controls label.c-label' . ($c < $slidecount ? (($c + 2) . ', ') : '1'); // This is the part I'm not sure on... How do I properly nest the ($c + 2) expression into a shorthand if/else statement ??
    }
    echo ' {' . "\n" . 'float: right;' . "\n" . 'display: block; }' . "\n";
    ?>

输出(当数据库表中有 5 个项目时):

            #slide1:checked ~ #controls label.c-label2, 
    #slide2:checked ~ #controls label.c-label3, 
    #slide3:checked ~ #controls label.c-label4, 
    #slide4:checked ~ #controls label.c-label5, 
    #slide5:checked ~ #controls label.c-label6 {
    float: right;
    display: block;
    }

期望的输出:

    #slide1:checked ~ #controls label.c-label2, 
    #slide2:checked ~ #controls label.c-label3, 
    #slide3:checked ~ #controls label.c-label4, 
    #slide4:checked ~ #controls label.c-label5, 
    #slide5:checked ~ #controls label.c-label1 {
    float: right;
    display: block;
    }

我希望 FOR 循环的最后一次执行将“1”附加到“标签”的末尾,以便 CSS 选择器指向第一个元素“c-label1”。这用于构建一个纯 CSS 滑块,该滑块使用单选按钮更改幻灯片,并且需要在幻灯片结束时将幻灯片循环回到开头。每当保存新的数据库条目时,我需要代码自动更新。

任何人都可以帮我清理代码以使其正常工作吗?

非常感谢你。

4

3 回答 3

2

在你的 for 循环条件中,你有

$c < $slidecount

这意味着您的循环体中的相同条件也得到了满足,因此您生成 c-label1 的代码将永远不会被执行。

尝试改变

$c < $slidecount 

($c < ($slidecount-1))
于 2013-08-18T08:34:09.170 回答
1

发生这种情况是因为您$c < $slidecount在语句中使用,但您的$c值从 0 开始,因此它永远不会与您匹配slidecount,也不会为假。您还应该更改圆括号()

一个快速的解决方案可能是将 1 添加到您的$c变量中。这应该工作

(($c+1) < $slidecount ? ($c + 2) . ', ' : '1');
于 2013-08-18T08:34:43.877 回答
0

这就是您使用(和的方式)。尝试这个:

echo '#slide' . ($c + 1) . ':checked ~ #controls label.c-label' . ($c < $slidecount ? $c + 2 . ', ': '1');
于 2013-08-18T08:33:16.743 回答