[英]How to save repetitive fields to database with a foreign key in PHP / WordPress?
[英]PHP - How to DRY repetitive database queries and html blocks?
我有一種情況是重復相同的數據庫查詢,並在應用程序的各個地方使用相同的相關HTML。
那么干燥這個的通常/最佳實踐方法是什么?
包括完美適用於這種情況,但如果我采用它作為DRYing的方法,我可能最終會得到太多包括減慢應用程序的速度嗎?
我通常用靜態方法創建實用程序類來處理重復塊的回顯。 例如,看看我的social plugins
類
您可以嘗試使用中央文件進行數據庫查詢,並僅將其包含在您需要的位置。 類似的html片段。
您可能會發現在此實例中有用的MVC模式(請參閱http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller )
如果你真的想要自己 - 至少部分地,而不是使用一個完整的框架,你可以混合一些完善的庫,並從模板中分離邏輯。
例如,我所做的就是使用Smarty--一個成熟的模板引擎 - 並擴展其基類以進行廉價查詢。
通常你會以這種方式使用Smarty,將你的邏輯與模板分開:
$Smarty = new Smarty();
$Smarty->assign( 'myvariable', array( ... ) ); // usually a database query return
$Smarty->display( 'template.tpl' );
所以我把它擴展為查詢:
class QSmarty extends Smarty {
function query( $sql ) {
$args = func_get_args();
$sql = array_shift( $args );
foreach( $args as $k => $v ) $args[$k] = mysql_escape_string( $v );
$safe_sql = vsprintf( $sql, $args );
// assuming this will be manageable (paginated or reasonably sized)
$ret = array();
$t = mysql_query( $safe_sql );
while( $r = mysql_fetch_assoc( $t ) ) {
$ret[] = $r;
}
return( $ret );
}
}
因此你可以一遍又一遍懶洋洋地使用它:
$Smarty = new QSmarty();
$Smarty->assign( 'users', $Smarty->query(
"select * from users where group=%s",
$_GET['group'] // gets sanitized automatically
));
$Smarty->display( 'users.tpl' );
模板文件users.tpl可能如下所示:
<ul>
{foreach $users as $user}
<li class="{cycle values='odd,even'} {if $user@last}last_user{/if}">
{$users.id}: {$users.username|lower}
</li>
{/foreach}
</ul>
由於Smarty支持模板繼承,自定義模板函數和其他功能嵌套,因此您可以將可重用HTML分段為各自的文件,並在其他模板中使用模板標記,例如{include users.tpl},如您所見,分配和重新分配變量適合。 非常干燥。
說實話,是的,這幾乎是Smarty的銷售宣傳,展示或突出了它的一些功能。 除了質詢之外,Smarty正在這里做所有繁重的工作。 給它或另一個模板引擎一個旋轉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.