2010-11-13 25 views
1

您對這段代碼有什麼看法?您對這段代碼的質量有什麼看法?

我知道這有html和php混合在一起。我們怎樣才能從PHP中分離HTML?還需要做些什麼來提高此代碼的質量?

希望這裏的一些PHP專家可以幫助我。

編輯:

只是想補充一點,在這個特殊的代碼業務邏輯已經成爲像AppointmentManager類獨立的文件,負責一切有關任命,建立刪除等等,等等

我放在這裏的代碼段(manage.php)只顯示約會的細節並允許編輯,取消它們。

現在,我不確定我們稱之爲該頁面,無論是顯示邏輯還是表示邏輯或其他任何....但我需要知道的是,如果它可以進一步分離HTML和PHP?

我可以做的事情,例如讓這片HTML出這個文件的...

<script language="JavaScript" src="ajax/core2.js"></script> 

<h2 align='center'> Appointment Control Panel V 1.0</h2> 
<h2 align='center'>Your Next Appointments</h2> 
<div id=detail></div> 

而且同樣休息吧......我的意思是完全獨立的HTML和PHP使主管和擴展應用程序很容易。

我不想使用Smarty,我認爲它不必要地使事情複雜化。

我可以創建一些PHP函數,當調用時呈現這個html,也許把它們放到一個像displayhtml.php這樣的常用函數文件中?

可能有其他更好的建議嗎?

<?php 
/* 
* manage.php 
* 
* Author: Bob : 2010-11-11 
* 
*/ 

ob_start(); 

$page_title = "Appointments Management"; 

require_once('appts/coreincs.inc'); 
require_once('appts/pagetop.inc'); 

$am = AppointmentManager::getInstance(); 
$appts = $am->getPendingAppointments($g_userID); 
?> 

<script language="JavaScript" src="ajax/core2.js"></script> 

<h2 align='center'> Appointment Control Panel V 1.0</h2> 
<h2 align='center'>Your Next Appointments</h2> 
<div id=detail></div> 

<?php 
if ($appts === NULL)  
{ 
    echo <<<EOEMPTY 
<p align='center'> 
    You have no upcoming appointments. 
</p> 
EOEMPTY; 
} 
else 
{ 
    /** 
    * List the appointments. Start the table. 
    */ 
    echo <<<EOT 
<table align='center' width='80%' border='0' cellspacing='0' 
     cellpadding='3' class='apptTable'> 
<tr> 
    <td width='25%' class='apptDispHeader'>When:</td> 
    <td width='30%' class='apptDispHeader'>Title:</td> 
    <td width='15%' class='apptDispHeader'>Action:</td> 
    <td width='25%' class='apptDispHeader'>Where:</td> 
</tr>  
EOT; 

    /** 
    * Zip through all the appointments and print them out. 
    */ 

    foreach ($appts as $appt) 
    { 
    //if ($appt->StartTime->sameDay($appt->EndTime)) 
    //{ 

     $start = $appt->FullTimestart; 
     $end = $appt->FullTimeend;  

    echo <<<EOAPPT  
<tr>  
    <td>$start ==> $end</td>  
    <td>  
    <div id=title_{$appt->AppointmentID} loaded="t_{$appt->AppointmentID}"> 
    <div id=title_{$appt->AppointmentID}_t_{$appt->AppointmentID}>  
    <a class='apptDispLink' 
     href='showappt.php?aid={$appt->AppointmentID}'> 
    {$appt->Title} 
    </a> 
</div> 
    </div> 
    </td> 

    <td><a onclick=Core2.loadXMLDoc('ajaxrequest.php?aid={$appt->AppointmentID}',['edit'],['detail'],['edit_form_{$appt->AppointmentID}'],"reLoad","hide_all")>Edit</a> | <a onclick=Core2.loadXMLDoc('cancel.php?aid={$appt->AppointmentID}',['delete'],['title_{$appt->AppointmentID}'],['cancel_{$appt->AppointmentID}'],"reLoad","hide_all")>Cancel</a></td> 
    <td> 
    {$appt->Location} 
    </td> 
</tr> 
EOAPPT;  
    }  

    /** 
    * Close out the Table:  
    */ 

    echo <<<EOT 
</table>  
<iframe name=main width="0" height="0" marginwidth="1" marginheight="1" scrolling="no" border="0" frameborder="0"></iframe> 

EOT; 
} 

require_once('appts/pagebottom.inc'); 
ob_end_flush(); 

?> 
+0

我建議首先要刪除所有這些換行符以提高讀能力。 – Thilo 2010-11-13 15:23:40

+0

我覺得有這樣的單身人士是愚蠢的。要麼傳遞構造函數的一些初始化參數,要麼'getPendingAppointments()'是一個類方法。 – 2010-11-13 15:24:11

+0

我建議你閱讀我以前問過的問題。 http://stackoverflow.com/questions/4148031/what-is-the-best-practice-to-use-when-using-php-and-html – 2010-11-13 15:25:45

回答

2
  1. 請不要使用Smarty。只需使用PHP's alternate syntax即可。各地的PHP開發人員都會感謝你。

  2. 不要使用require_once或include_once,它們會比較慢。此外,如果他們是「必要」使您的代碼工作,那麼您的設計可能存在問題。

  3. 保持您的屬性引用不變。你有一些與「一些有」,有的根本沒有報價。我建議總是雙引號的一切。

  4. 這也是分開你的業務邏輯形成模板filewise還有一個好主意。

我建議是這樣的:

require('coreincs.inc'); 
$am = AppointmentManager::getInstance(); 
$appts = $am->getPendingAppointments($g_userID); 
// ..more stuff here 

require('view_dir/view.php'); 

在你看來,你可以包括你的頁眉/頁腳

+0

顯然downvoted一個聰明的球迷 – Galen 2010-11-13 21:23:13

2

從HTML單獨的PHP,你可以使用一個完整的服務框架(Zend的,蛋糕等)或模板系統(Smarty的,還有其他的我想不出)。 - 這將是一個有爭議的問題,因爲人們濫用模板系統解析邏輯的能力導致模板比PHP/html混合的讀取時間更長。

如果您只有一兩個簡單的頁面,則可能不值得花時間投入這些運行。

require_once('appts/coreincs.inc'); 

.inc是一個醜陋的從php4持有,充其量它的醜陋在最壞的情況下它可以爲您的php作爲明文客戶端。所以只要堅持.PHP

echo <<<EOT 

我覺得這是對正在使用的模板系統的時候清理了更多的目光和其位這樣的小噁心。或者你可以做到這一點

<?php if ($appts === NULL): ?> 
<p align='center'>  
    You have no upcoming appointments.  
</p> 
<?php endif; ?> 

我承認這仍然是醜陋的,但結腸語法可以開始使您的PHP/HTML混合更清晰。特別是如果你把所有的函數聲明放到不同的文件中,只需在主php文件中構造html +調用方法/條件。

?> 

不要關閉php標記(特別是在包含的文件中),這可能會泄漏空白並導致問題。直到我看到它導致發送標題出現問題時,我才真正相信這是一個問題。

/** 

    * List the appointments. Start the table. 

    */ 

不要浪費在一個簡單的註釋使用//對單行註釋那麼多行始終,不使用雙**,除非它是一個文檔註釋中解釋的功能是什麼。