繁体   English   中英

使用逻辑和 html 分离从数据库中列出帖子

[英]Listing posts from database with logic and html separation

我想知道如果从数据库中列出帖子,是否有一种方法可以完全分离逻辑和 HTML(没有 OOP 或模板引擎用于练习和学习目的),目前,代码如下所示:

<!--TEMPLATE:-->
<?php require_once(HEAD); ?>
  <body>  
    <?php require_once(HEADER); ?>
    <?php require_once(BANNER); ?>
    <!-- Main Content (S) -->
      <main class="container">
      
      <?php while($row = mysql_fetch_assoc($result)): ?>
      
      $postImg = $row["post_img"];
      $postAuthor = $row["post_author"];
      $postTitle = $row["post_title"];

      <div class="col">
        <div class="card shadow-sm">
          <img class="card-img-top" src="<?= $postImg ?>" alt="Card image cap">
          <div class="card-body">
            <p class="card-text">
              <small class="text-muted"><a class="fw-bold" href=""><?= $postAuthor ?></a></small>
            </p>
            <h5 class="card-title mb-3"><?= $postTitle ?></h5>
            <div class="d-flex justify-content-between">
            </div>
          </div>
        </div>
      </div>

      <?php endwhile; ?>

      </main>
     <!-- Main Content (E) -->
    <?php require_once(FOOTER); ?>
    <?php require_once(JS_FILES); ?>
  </body>
  </html>

变量: $postImg$postAuthor$postTitle使用数据库中的数据进行设置。 目前,列出帖子的逻辑与HTML帖子模板发生在同一个地方,我有一个想法,我将这篇帖子HTML移动到不同的模板文件,我在listPosts() ZC1C425268E68384F14AB5074itC17Z9 的每次迭代中使用它环形。

主要问题:有没有办法将这篇文章 HTML 代码留在当前文件中,并以某种方式将其与所有结果集行循环?

当前的方法是很好的做法,因为人们通常使用 PHP 和 HTML。

您有四个选择:

  • 要么遵循 MVC 架构模式
  • 使用模板引擎
  • 仅将 HTML 保存在单独的php文件中并包含在逻辑文件中。
  • 您的php文件具有逻辑但响应提供给来自客户端的 AJAX 调用,该调用将基于数据进行渲染部分(例如: JSON )。

第三个选项的示例:

您的数据库查询脚本文件: post.php

<!--TEMPLATE:-->
<?php require_once(HEAD); ?>
  <body>  
    <?php require_once(HEADER); ?>
    <?php require_once(BANNER); ?>
    <!-- Main Content (S) -->
      <main class="container">
      
      <?php while($row = mysql_fetch_assoc($result)): ?>
      
      $postImg = $row["post_img"];
      $postAuthor = $row["post_author"];
      $postTitle = $row["post_title"];

      // include template
      include 'postView.php';
    
      <?php endwhile; ?>

      </main>
     <!-- Main Content (E) -->
    <?php require_once(FOOTER); ?>
    <?php require_once(JS_FILES); ?>
  </body>
  </html>

您的 html 文件: postView.php

<div class="col">
 <div class="card shadow-sm">
  <img class="card-img-top" src="<?= $postImg ?>" alt="Card image cap">
   <div class="card-body">
    <p class="card-text">
     <small class="text-muted"><a class="fw-bold" href=""><?= $postAuthor ?></a></small>
    </p>
    <h5 class="card-title mb-3"><?= $postTitle ?></h5>
    <div class="d-flex justify-content-between"></div>
   </div>
  </div>
</div>

您可以创建一个signlePost.php文件并将您的 html 代码放入其中,如下所示:

<div class="col">
        <div class="card shadow-sm">
          <img class="card-img-top" src="<?= $postImg ?>" alt="Card image cap">
          <div class="card-body">
            <p class="card-text">
              <small class="text-muted"><a class="fw-bold" href=""><?= $postAuthor ?></a></small>
            </p>
            <h5 class="card-title mb-3"><?= $postTitle ?></h5>
            <div class="d-flex justify-content-between">
            </div>
          </div>
        </div>
      </div>

然后在你的逻辑文件中使用 include 或 require 像这样:

<!--TEMPLATE:-->
<?php require_once(HEAD); ?>
  <body>  
    <?php require_once(HEADER); ?>
    <?php require_once(BANNER); ?>
    <!-- Main Content (S) -->
      <main class="container">
      
      <?php while($row = mysql_fetch_assoc($result)): ?>
      
      $postImg = $row["post_img"];
      $postAuthor = $row["post_author"];
      $postTitle = $row["post_title"];

      include 'singlePost.php';

      <?php endwhile; ?>

      </main>
     <!-- Main Content (E) -->
    <?php require_once(FOOTER); ?>
    <?php require_once(JS_FILES); ?>
  </body>
  </html>

但如果您使用 OOP 来更好地构建您的代码会更好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM