php - 显示不同媒体类型的提要的最佳方式是什么?

标签 php mysql

我最近创建了一个名为 feed.php 的 php 文件,该文件旨在从 MySQL 数据库中获取项目并将它们(以新闻提要样式的方式)显示在网页上。我完成它的方式涉及使用 19 个 if/elseif/else 语句——而且这个数字还在增长。

简而言之,这些语句的作用是决定信息的显示方式。我将包含下面的代码,但它非常长且重复。

<?

$con = mysqli_connect("localhost","username","password","database");

if (!$con)
{
  die('Could not connect: ' . mysqli_connect_error());
}


$query = "SELECT * FROM mainfeed ORDER BY timestamp DESC LIMIT 0 , 1000";

$comments = mysqli_query($con, $query);

echo "<h1>Recent Posts</h1><br><br><hr>";

while($row = mysqli_fetch_array($comments, MYSQLI_ASSOC))
{
  $comment = $row['comment'];
  $timestamp = $row['timestamp'];
  $file = $row['file'];
  $info = pathinfo($file);
  $info['extension'];
  $comment = htmlspecialchars($row['comment'],ENT_QUOTES);
  $ytlink = $row['ytlink'];
  $tag = $row['tag'];
  $tag2 = $row['tag2'];
  $tag3 = $row['tag3'];
  $handle = $row['handle'];
  $score = $row['score'];
  $id = $row['id'];

  $ytarray=explode("/", $ytlink);
  $ytendstring=end($ytarray);
  $ytendarray=explode("?v=", $ytendstring);
  $ytendstring=end($ytendarray);
  $ytendarray=explode("&", $ytendstring);
  $ytcode=$ytendarray[0];

  $display = Array('jpg', 'jpeg', 'png', 'PNG', 'gif');
  $vid = Array('MOV', 'mov', 'mp4');


if($tag != ''){
    $tagdisp = "<br><a href='/$tag' class='posttag'>$tag</a>";

}

elseif($tag==''){
    $tagdisp="";

}

if($tag2 != ''){
    $tagdisp2 = "<a href='/$tag2' class='posttag'>$tag2</a>";

}

elseif($tag2==''){
    $tagdisp2="";

}

if($tag3 != ''){
    $tagdisp3 = "<a href='/$tag3' class='posttag'>$tag3</a>";

}

elseif($tag3==''){
    $tagdisp3="";

}

if($tag != 'explicit' && $tag2 != 'explicit' && $tag3 != 'explicit'){

if ($file != NULL) {

  if (in_array($info['extension'], $display)){

  echo " <div class='card'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <a href='$file'><img src='$file' style='width:70%; margin-left:15%; margin-right:15%; margin-top:5px; border-style:none;'></a><br>
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";
  }

  elseif(in_array($info['extension'], $vid)) {
    echo " <div class='card'>
    <h3>Handle: $handle</h3><br />
    <p>$comment</p><br /><br />
     <video controls='controls' width='70%' src='$file' style='border-style: solid'></video><br>
    <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
    <p style='color: grey'>$timestamp</p><hr>
    </div>
   ";
}

  else {

  echo " <div class='card'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <a href='$file'><h3>Click Here To View Attached File</h3></a><br>
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

  }
}

elseif($ytlink != NULL) {

  echo " <div class='card'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe><br />
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

}

else {

  echo " <div class='card'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br />
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

}

}

if($tag == 'explicit' OR $tag2 == 'explicit' OR $tag3 == 'explicit'){

if ($file != NULL) {

  if (in_array($info['extension'], $display)){

  echo " <div class='cardexp'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <img src='$file' style='width:70%; margin-left:15%; margin-right:15%; margin-top:5px; border-style:solid;'><br>
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";
  }

  elseif(in_array($info['extension'], $vid)) {
    echo " <div class='cardexp'>
    <h3>Handle: $handle</h3><br />
    <p>$comment</p><br /><br />
     <video controls='controls' width='70%' src='$file' style='border-style: solid'></video><br>
    <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
    <p style='color: grey'>$timestamp</p><hr>
    </div>
   ";
}

  else {

  echo " <div class='cardexp'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <a href='$file'><h3>Click Here To View Attached File</h3></a><br>
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

  }
}

elseif($ytlink != NULL) {

  echo " <div class='cardexp'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />
      <iframe width=\"420\" height=\"315\" src=\"http://www.youtube.com/embed/$ytcode\" frameborder=\"0\" allowfullscreen></iframe><br />
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

}


else {

  echo " <div class='cardexp'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br />
      <p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";

}

}

}

mysqli_close($con);

?>

我觉得我用来创建这个 feed 的方法(以及我告诉浏览器显示不同媒体类型的方法,可能不是我能做到的最好方法。

如果我要重写此文件,获得相同结果的最佳(最有效)方法是什么?

非常感谢。

最佳答案

function getCardTemplate($comment, $id, $score, $tagdisp, $tagdisp2, $tagdisp3, $timestamp, $innerTemplate) {
  return " <div class='card'>
      <h3>Handle: $handle</h3><br />
      <p>$comment</p><br /><br />".$innerTemplate. 
     "<p>Post #$id</p>
      <p id='scorecount-$id'>Score: $score</p><br>
      <button onclick='myfunction($id,1)'>&#8679;</button><button onclick='myfunction($id,-1)'>&#8681;</button><br>
      <br>$tagdisp $tagdisp2 $tagdisp3<br>
      <p style='color: grey'>$timestamp</p><hr>
    </div>
  ";
}

然后将所需的文本作为 $innerTemplate 传递。您仍然会有很多案例,但重复性会降低,可读性会更高,也更易于维护。

关于php - 显示不同媒体类型的提要的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37497500/

相关文章:

php - FB 广告 API (#17) 达到用户请求限制

php - 如何将 CSS 附加到 PHP 中的 mail() 方法?

mysql - SQL数据库-为另一表列获取一列最大值

mysql - 使用 row_number 时 MySQL 中的子查询问题

php - Symfony 表单 - Choicetype - 错误 "Array to string covnersion"

php - 单击“返回”时,客户的 CC 双倍收费

mysql - 来自 MySQL 的 VB.NET ComboBox SelectedIndex

mysql - 子表在一对多更新过程中未更新

mysql - 与 MySQL 触发器作斗争

php - 查询构建器不插入时间戳