簡體   English   中英

什么是使用php從數據庫輸出數據的最佳方法?

[英]Whats the best way to output data from a database using php?

我對php比較陌生,並且正在使用mysql數據庫進行項目開發。 該項目由能夠撰寫帖子的用戶組成,這些帖子然后以列表格式顯示。 問題是,帖子顯示在網站上的不同位置,例如索引(主)頁面和用戶個人資料頁面。 如果您感到困惑,類似於Twitter。 我的問題是,顯示帖子的最佳方法是什么? 目前,我正在使用自己創建的類。 它具有從數據庫檢索帖子,並將它們全部保存在多維數組中的功能。 然后,該類中的另一個函數使用foreach格式化整個列表,然后返回格式化的HTML列表。 我要做的就是回顯返回的內容。 但是我在某處讀到,編寫輸出HTML的函數(尤其是類函數)是一種不好的做法。 什么是最好的方法,而不必在顯示帖子的每個頁面上重寫相同的代碼。 在函數中使用HTML是否真的是不好的做法?

示例...個人資料頁面如下所示。

<

require('class.php'); 

require('header.php');

$profile = new Profile(); 

$userProfile = $profile->GetUserProfile($userID); 

echo $userProfile;

$class = new Posts(); 

$posts = $class->GetUserPosts($userID); 

echo $posts;

require('footer.php'); 

?>

而且主頁看起來像這樣

<

$class = new Posts(); 

$posts = $class->GetAllPosts(); 

echo $posts;


?> 

其中,配置文件類將使用用戶ID並輸出已經以HTML格式設置的用戶配置文件。 帖子類具有返回確定數量的已在HTML列表中格式化的帖子的功能。

我應該將所有內容都保留在課堂上,還是有更好的方法?

謝謝

好吧,如果您不使用某種MVC框架,那么我想說擁有輸出HTML的函數不會殺死任何人。

但是,通常,將HTML與邏輯分離是有幫助的,通常這是通過使用散置的PHP創建HTML模板和模板片段來完成的。 像這樣:

<div>
    <h1><?php echo $title; ?></h1>
</div>

然后,您可以設置$title變量(和其他變量),並include('title_fragment.php')以輸出該HTML代碼。 您可以將其擴展為與整個頁面一起使用,從而使您的代碼僅需要處理傳遞到模板的少量數據。

當需要更改頁面布局或外觀時,您不必遍歷代碼即可查找生成的HTML的位...您可以直接進入模板文件。

這對於可維護的設計和代碼都很重要,並且使以后更容易生成其他輸出類型。

使用PHP,將兩者分開的最簡單的庫之一是Smarty模板。 使用Smarty(或任何其他模板庫),您可以編寫具有布局和一些簡單循環或其他構造的HTML文件,然后使用數據結構呈現該模板。 至少,我建議更改您的類以利用模板並以這種方式產生輸出,而不是在打印echo語句中混入一堆HTML的方式混雜在一起。

我什至避開@zombat的HTML片段中的echo語句解決方案,它們很快變得丑陋。

示例Smarty模板可實現所需的功能:

{section name=i loop=$posts}
   <li>{$posts[i].author} &mdash; {$post[i].text}</li>
{/section}

還有一些PHP支持代碼:

// Instantiate Smarty object
$smarty = new Smarty();

// Assign a hash of data
$smarty->assign('posts', array(
    array('author' => 'Jim',   'text' => 'Hi this is my post!'),
    array('author' => 'Sally', 'text' => 'My first post to the system')
  )
);

// Use the file with the above template in it
$smarty->display('posts.html');

將數據分配給模板的部分可能應該通過某種編程方式完成,以將您的類對象列表轉換為哈希列表。

這樣,您只需編輯HTML模板即可輕松更改輸出的外觀,而無需擔心觸摸任何代碼即可更改輸出。

理想情況下,您的班級應該只提供數據。 使用另一個PHP文件或通用類輸出HTML,因此稍后您可以從同一數據類中輸出XML,JSON等。 這樣可以將數據處理(模型/控制器)與數據表示形式(視圖)分開。

我不同意使用像Smarty這樣的模板引擎。 PHP 模板引擎。

您可以使用輸出緩沖。 這有助於構建模板,而不會被迫按顯示順序處理數據。

<?php
  $posts = take_data_from_class();
  ob_start();
  require_once('path/to/posts.php');
  $html_posts = ob_get_clean();

  // you can do the same with other parts like header or footer
  ob_start();
  require_once('path/to/header.php');
  $header = ob_get_clean();

  ob_start();
  require_once('path/to/footer.php');
  $footer = ob_get_clean();

?>

在posts.php中,您可以顯示帖子:

<? foreach ($posts as $p) { ?>
<div class="...">
  post data here
</div>
<? } ?>

現在,要顯示整個內容:

<?php echo $header . $html_posts . $footer; ?>

有關更多信息,請訪問http://us3.php.net/manual/zh/book.outcontrol.php

請享用!

我完全不熟悉Smarty ...這是如何工作的,使用smarty與僅創建函數以獲取大量數據並返回包含該數據的html以便稍后回顯相比有什么好處?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM