Есть сайт телеканала на Drupal 7. Нужно реализовать подобную штуку: Есть файл с расписанием программ (.xlsx или .csv - со столбцами вида |6/16/2014 | 0:00 | "НАЗВАНИЕ" |12+| ) , нужно читать данные из этого файла и выводить в таблицу html в зависимости от даты и времени суток. В таблице должно быть 3 столбца - время, название и ограничение по возрасту, и 3 строки - уже прошедшая передача, идущая в данный момент и следующая. Вопросы и предложения на мэйл: inter91@mail.ru
table.php Код (Text): <?php header("Content-Type: text/html; charset=windows-1251"); $f=file("data.csv"); foreach($f as $k=>$v){ $f[$k]=explode(";","$v"); } $day=date("d-m-Y",time()); $H=date("H",time()); $i=date("i",time()); $arr=array(); foreach($f as $k=>$v){ foreach($v as $l=>$d){ if($d==$day){ if($v["1"]+0===$H){ list(,$arr[$k])=explode(":",$v['1']); } } } } function getTable($value){ echo "<table border=1>"; GLOBAL $f; $past=$value-1; $future=$value+1; echo "<tr> <td>До:</td><td>{$f[$past][1]}</td><td>{$f[$past][2]}</td><td>{$f[$past][3]}</td> </tr>"; echo "<tr> <td>Сейчас:</td><td>{$f[$value][1]}</td><td>{$f[$value][2]}</td><td>{$f[$value][3]}</td> </tr>"; echo "<tr> <td>Далее:</td><td>{$f[$future][1]}</td><td>{$f[$future][2]}</td><td>{$f[$future][3]}</td> </tr>"; echo "<table>"; } end($arr); $key=key($arr); foreach($arr as $k=>$v){ if($v==$i){ getTable($k); break; } if($v>$i){ $k--; getTable($k); break; } if($key==$k){ getTable($k); } } ?> data.csv Код (Text): 19-06-2014;21:45;Football;0+ 19-06-2014;22:00;Вести;12+ 19-06-2014;22:15;Моя планета;10+ 19-06-2014;23:00;Мультфильмы;0+ 19-06-2014;23:45;Хоккей;7+ Код требует доработки (различных проверок), но так более менее работает.
А если из базы? Сейчас так выводится: Код (Text): <?php<? include ("blocks/db.php"); // подключение блока где реализуется подключение к БД $strSQL = "SELECT date,time,name,age FROM tvprogram"; // запрос $rs = mysql_query($strSQL); $table = "<table border=1 width = '600px' align=center>"; while($row = mysql_fetch_array($rs)) { //цикл $table .= "<tr >"; $table .= "<td >".$row['time']."</td>"; $table .= "<td >".$row['name']."</td>"; $table .= "<td >".$row['age']."</td>"; $table .= "</tr>"; } $table .= "</table>"; echo $table; // выводится // Закрыть соединение с БД mysql_close(); ?>
Почти. Нужно вывести строку - передача идущая в данный момент. Пока как то так. Выводится передача, в поле time которой первая цифра минуты совпадает с текущей первой цифрой минуты. Не могу подобрать условие. Код (Text): <? include ("blocks/db.php"); // подключение блока где реализуется подключение к БД $strSQL = "SELECT date,time,name,age,week FROM tvprogram"; // запрос $rs = mysql_query($strSQL); $cdate = date("w"); $d = date("D"); $ctime = date("H"); $cmin = date("i"); if ($row['week'] == $cdate ) { $table1 = "<div name='top' id='segodnya' class='progra'>";} else { $table1 = "<div class='progra'>";} while($row = mysql_fetch_array($rs)) { $hour=substr($row['time'],0,2); $min=substr($row['time'],3,1); $ccmin=substr($cmin,0,1); if ($row['week'] == $cdate and $hour==$ctime and $min == $ccmin) { $table1 .= "<div class='strprg'>"; $table1 .= "<div id='ttime'>".$row['time']."</div>"; $table1 .= "<div id='tneme'>".$row['name']."</div>"; $table1 .= "<div id='tage'>".$row['age']."</div>"; $table1 .= "</div>"; } } $table1 .= "</div>"; //------------------------------------------------------------- if ($d == "Mon") {echo "Понедельник";} elseif ($d == "Tue") {echo "Вторник";} elseif ($d == "Wed"){echo "Среда";} elseif ($d == "Thu"){echo "Четверг";} elseif ($d == "Fri"){echo "Пятница";} elseif ($d == "Sat"){echo "Суббота";} else {echo "Воскресенье";} //------------------------------------------------------------- echo $table1; mysql_close(); ?>
Лови: Код (Text): <?php header("Content-Type: text/html; charset=utf-8"); $link=mysqli_connect("***","***","***","table_tv")or die("Не удалось подключиться к серверу БД."); $date=date("d-m-Y",time()); $sql="SELECT time, name, age FROM tvprogram WHERE date='$date'"; $result=mysqli_query($link,$sql)or die(mysqli_error($link)); while($row=mysqli_fetch_assoc($result)){ $arr[]=$row; } mysqli_close($link); if(!isset($arr)){ echo "Телепрограмма на сегодняшний день пуста!"; exit; } function getTable($value){ echo "<table border=1>"; GLOBAL $arr; $current=$value-1; $past=$value-2; echo "<tr> <td>До:</td><td>{$arr[$past]["time"]}</td><td>{$arr[$past]["name"]}</td><td>{$arr[$past]["age"]}</td> </tr>"; echo "<tr> <td>Сейчас:</td><td>{$arr[$current]["time"]}</td><td>{$arr[$current]["name"]}</td><td>{$arr[$current]["age"]}</td> </tr>"; echo "<tr> <td>Далее:</td><td>{$arr[$value]["time"]}</td><td>{$arr[$value]["name"]}</td><td>{$arr[$value]["age"]}</td> </tr>"; echo "<table>"; } $H=date("H",time()); $i=date("i",time()); $key=count($arr)-1; foreach($arr as $k=>$v){ foreach ($v as $l=>$d){ if($v["time"]+0==$H){ list($asd,$arr2[$k])=explode(":",$v["time"]); } if(!isset($arr2) and $k==$key){ foreach ($arr as $k=>$v){ foreach($v as $l=>$d){ if($v["time"]+0>$H){ getTable($k); break 4; } } } } } } end($arr); $key=key($arr); if(isset($arr2)){ foreach($arr2 as $k=>$v){ if($v==$i){ getTable($k); break; } if($v>$i){ getTable($k); break; } if($key==$k){ getTable($k); } } } ?> Дополнение: предыдущий код нечего не вывел бы, если 1 программа шла например 2 часа. Этот выведет правильную информацию. Примечание: если вводить время программ не по порядку, то данные в табличке будут неверные! Можно это исправить, но с соответствующими дополнениями, но главный вопрос: нужно ли это Вам?
Использовал первый вариант с хранением в файле, но почему то получаю белый лист, в чем может быть проблема? А мне вот как раз и нужно, что бы информация считывалась с файлика. Помогите плиз.