我有一個計劃,其中函數返回使用一系列點等號級聯分配的這樣一個相當大的HTML表:
function callme() {
$return = '';
$return .= '<table>';
foreach ($foo as $bar => $bar){
$return .= '<tr><td style="css">bla bla bla'.$bar.'</td>';
$return .= '<td>more stuff, modal buttons</td></tr>';
$return .= 'etc etc etc...';
}
$return .= '</table>';
return $return
}
我想找到一個更少的錯誤,WET處理這種方式,並不確定它是否應該使用array
,我將每個項目添加到implode/join
,也許使用對象將是有道理的。
我已經搜索了一下,沒有太多的運氣,並會喜歡SO社區的一些輸入。
編輯:
不知道是否有做這個職位上,主題的任何方式,我可以看到現在真的沒有辦法選擇正確的解決方案,這樣以來爲時已晚將其刪除(也許發佈到php mailing list更合適),我至少會試着讓它更有用。
用完30分鐘調試腳本,其中table
正被通過串聯使用的HTML
,text
和variable
部件產生「點等於」方法,並且其中的一個錯誤是造成每文本元素被呈現作爲錨(<a>some text</a>
)。移除所有的JavaScript,這是我預期在某種程度上產生的DOM元素錨標記後,找到了這個bug在下面一行:
$return .= '<br/><div id="visitMBO" class="btn visitMBO" style="display:none"><a href="'.$eventLinkURL.'" target="_blank">Manage on MindBody Site<a/></div>';
錯誤是在該行的末尾:<a/>
。哎呦。
這是一個相當長表,包括大量由JavaScript中使用CSS
classes
和id
S,還有很多變數所以有噸的單引號,雙引號和點所有的地方。現在我希望能夠根據用戶輸入呈現不同的變體,並且要麼使用test
子句分隔多個版本,要麼在整個測試中進行測試可能會更糟糕。
詢問HTML table generator class會更合適,但也偏離主題。其中的選項包括相當輕量級:htmlgen,更強大的Cellbrush和DynaWeb的Table Class,據我所知,這也是相當輕量級的。
作爲以下答案之一,.=
是一個合理的方法,如果表格不太複雜,並且如果我只是將每一行保持較短的長度,問題就會更加明顯。事實上,錨的開始標籤實際上從頁面的邊緣掉下來。
在下面的答案中註明(包含鏈接)其他用於分離邏輯,標記和數據的選項將使用模板引擎或使用php的DOM類(tutorial)。 Heredoc也會清理一些冗餘和多個引號。
有10十種幾個方法可以做到在PHP什麼。這裏沒有真正的問題需要回答 – 2015-06-21 02:42:22
@匿名我只是覺得這樣做很容易出現錯誤輸入或者看不到東西。 – MikeiLL
@Dagon我知道有很多(甚至可能有10打)的方式來做到這一點,我很開放,這可能是這個論壇的一個開放式的問題,但即使沒有其他解決方案共享,我會分享無論我想出什麼,也許這對某個人有用。 – MikeiLL