刚开始使用PHP来支持我。
结果我正在努力实现:
我有一张YouTube网址和MetaData的表格。 试图建立这个:
<div class="slide">
<iframe></iframe>
<iframe></iframe>
</div>
<div class="slide">
<iframe></iframe>
<iframe></iframe>
</div>
每张幻灯片两个视频,然后我将使用Deck.js对结果进行分页。
我怀疑我的方式完全是错误的,而不是在programmin g逻辑上经历过的;
while($data = mysql_fetch_array($result)) {
for ($counter = 1; $counter<=2; $counter++) {
echo "<div class=\"slide\">";
echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
/* If Video 1, increment counter for 2nd video */
if ($counter == 1) {
$counter++;
}
/* If Video 2, close div and reset counter */
else if ($counter == 2) {
echo "</div>";
$counter = 1;
}
/* If error break out */
else {
echo "</div>";
break;
}
}
}
基本上尝试嵌套循环来跟踪每个div有多少视频,并在div有两个时开始一个新视频。
我尝试了几种不同的方式,这是最新的方式。结果:
<div class="slide">
<iframe></iframe>
<div class="slide>
<iframe></iframe>
现在点击空白墙,不知道下一步该尝试什么。愿意使用/学习任何方法来完成结果,只是不知道在这一点上去哪里。
干杯。
答案 0 :(得分:0)
将<{1}} 放在<div>
循环之前(仍位于for
循环内)和while
之后 </div>
循环
答案 1 :(得分:0)
在while
循环中,您只检索一行,但随后您将使用嵌套循环对其进行两次迭代。取消内部循环,只需使用触发器变量来跟踪左右。我想这会做你想要的:
$left=true; // track whether we're emitting HTML for left or right video
while($data = mysql_fetch_array($result)) {
if ($left) {
echo "<div class=\"slide\">";
echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
}
echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
if (!$left) {
echo "</div>";
}
$left = !$left; // invert $left to indicate we're emitting the right iFrame
}
// end of loop. If we had an odd number of
// videos, tidy up the HTML
if (!$left) {
echo "</div>";
}
答案 2 :(得分:0)
您可以使用%运算符(模数)一起删除第二个循环。这个想法是a%b === 0然后数字a被b整除。使用它,您可以轻松检查偶数或奇数或每第N行。
$k = 1;
echo "<div class=\"slide\">";
while($data = mysql_fetch_array($result)) { // you should really change to mysqli or PDO
if($k % 3 === 0){
echo "</div>";
echo "<div class=\"slide\">";
}
echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
$k++;
}
echo "</div>";
答案 3 :(得分:0)
<?php
$x = 10;
$counter = 0;
while($x > 0)
{
if($counter != 0 && $counter % 2 == 0)
{
echo "ENDOFSLIDE</br>";
}
if($counter == 0 || $counter % 2 == 0)
{
echo "SLIDE</br>";
}
echo "iframe => $x </br>";
$x--;
$counter++;
}
echo "ENDOFSLIDE";
?>
答案 4 :(得分:0)
它不起作用,因为for循环位于SQL数据的fetch循环中。 for循环的第二次迭代没有新的SQL行。更好的解决方案是捕获标识两个视频(标题)的公共列,并在该值发生变化时生成新的div。尝试这样的东西,它将适用于具有相同标题的任意数量的SQL行。如果SQL查询没有返回任何行,并且仅使用一个URL处理标题的可能性,这也将给出正确的结果 - 如果你只是翻转并最终得到错误标题的URL,这可能会变得很难看。当然,与当前解决方案一样,您的SQL查询必须是ORDER BY VIDEO_TITLE,因此行是相邻的。我没有运行它,但应该关闭。
$lastTitle = "";
$n = 0; //count SQL rows processed
while($data = mysql_fetch_array($result)) {
// See if the title changed from last
if( $data['VIDEO_TITLE'] != $lastTitle ) {
// if we processed any rows, must end the current div before starting a new one
if( $n > 0 )
echo "</div>";
echo "<div class=\"slide\">";
echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
//save the title as last title
$lastTitle = $data['VIDEO_TITLE'];
}
$n++; //count the SQL row
echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
}
if( $n > 0 )
echo "</div>";