2010-08-27 22 views
0

我遇到過幾十個腳本,其中html是echo'd out而不是被存儲。我想知道是否總是由於靈活性而將字符串存儲在字符串中?我是否應該始終存儲一串HTML而不是在時間上打印它的一部分?

一個隨機的例子是我有一個函數返回一個動態子導航的HTML。我打印的開幕div標籤,打印它的內容,然後分別打印結束的div標籤:

<div id="nav"> 
<?php echo $nav->getHTML();?> 
</div> 

不過,我現在有一個特殊的類分配給基於是否量#nav DIV列表項目和$nav->getHTML()以內的字符總和超過了一定數量,以便分別分配不同的line-heightheight。爲此,我必須將其加載到DOMDocument並使用DOMXpath並進行一些評估。

 html = '<div id="nav">'; 
     html.= $nav->getHTML(); 

     dom = new DOMDocument(); // create a DOM tree 
     xpath = new DOMXpath($d); // create a DOM Xpath tree 

     // bunch of DOM querying/manipulation 

     html.= '</div>'; 

我在想,不應該最好總是存儲這樣的東西,以便爲需要字符串操作的未來請求提供更靈活的東西嗎?或者我只是不必要地過度使用?或者,也許我正在以這種錯誤的方式去做,並且需要重構我的課程,以便在內部而不是外部查詢DOM?

編輯:後,我決定ul是否將跨越多個行(這是一個水平列表)基於字符的限制(比方說200)我會添加一個特殊類的#nav項目,從那時在做CSS中的樣式。

免責聲明:我根本不想依賴JS。我知道我可以解決它,但我希望它立即正確渲染。

回答

1

我認爲,因爲在這種情況下,你知道字符串受到操縱,那麼現在存儲它是有道理的。如果您正在構建不受服務器端操作影響的模板或其他視圖,那麼您會發現自己瘋狂地跟蹤您的所有任務,其中大部分任務都是您永遠不會觸及的。

現在,爲您的實際的問題,它聽起來像你不需要的是服務器端操作,但一些硬核CSS。這可能符合分離風格,內容和行爲的一般最佳做法。

+0

解決這個純粹的CSS是不可行的。我在動態操控絕對定位'ul'需要粘貼到另一個元素的底部,如果有多行'li',那麼我需要改變'ul'的高度和行高,這也需要跨瀏覽器兼容。我不能動態地「知道」ul是跨越多行還是不用純CSS。 – 2010-08-27 18:23:27

+0

爲什麼不能? BS。定位在底部需要一個底部:0;它不需要高度。如果你設置了一些聰明的樣式(display:inline-block; overflow:auto;對於UL,float:left;對於LI),那麼li應該換行,就好像它們是段落中的單詞一樣, ul會保持流體的高度。 你也可以使用jQuery來輔助視覺計算,只要它們的總計算寬度小於ul的寬度,並相應地乘以ul的高度,就可以將每個li附加到UL。 – dmrnj 2010-08-27 19:08:55

1

就個人而言,我不願意在服務器端腳本中放置演示詳細信息(如計算您提到的line-heightheight屬性)。我會盡力處理它與CSS或(在最壞的情況下)JavaScript。

就你而言,我並不知道很多$nav,但是你不能計算line-height和其他人,而不是來源?說,除了getHTML之外,還有getHeightgetLineHeight方法。

1

解析生成的HTML以派生業務/渲染邏輯不是一個好主意。 我寧願有另一個名爲「getClass」的函數,該函數根據$ nav-> getHTML()中的列表項或字符總數返回類。

< div id =「nav」class =「<?php echo $ nav- > getDisplayClass();? >「>

<?PHP的echo $ nav- > getHTML();? >

</DIV >

+0

唯一需要注意的是我並不是真的被允許與課堂混淆。 – 2010-08-27 18:29:40

相關問題