多:
<code><?php if ( in_category('10') ) echo'<p class="class1"><span class="icon-home"></span></p>'; ?> <?php if ( in_category('25') ) echo'<p class="class2"><span class="icon-cat"></span></p>'; ?> <?php if ( in_category('38') ) echo'<p class="class3"><span class="icon-dog"></span></p>'; ?> <?php if ( in_category('44') ) echo'<p class="class4"><span class="icon4"></span></p>'; ?> <?php if ( in_category('50') ) echo'<p class="class5"><span class="icon5"></span></p>'; ?> <?php if ( in_category('61') ) echo'<p class="class6"><span class="icon6"></span></p>'; ?> </code>
如何優化寫法?謝謝
*又編輯了一下,in_category 和 後面的 class 其實是沒有規律的。
多:
<code><?php if ( in_category('10') ) echo'<p class="class1"><span class="icon-home"></span></p>'; ?> <?php if ( in_category('25') ) echo'<p class="class2"><span class="icon-cat"></span></p>'; ?> <?php if ( in_category('38') ) echo'<p class="class3"><span class="icon-dog"></span></p>'; ?> <?php if ( in_category('44') ) echo'<p class="class4"><span class="icon4"></span></p>'; ?> <?php if ( in_category('50') ) echo'<p class="class5"><span class="icon5"></span></p>'; ?> <?php if ( in_category('61') ) echo'<p class="class6"><span class="icon6"></span></p>'; ?> </code>
如何優化寫法?謝謝
*又編輯了一下,in_category 和 後面的 class 其實是沒有規律的。
<code>for($i=1; $i<7; $i++) { if(in_category($i)) { echo "<p class=\"class{$i}\"></p>"; } }</code>
對於程式碼優化我沒有太多見解,留給其他小夥伴補充吧
更新:
再次優化了
<code>$arr = array( 10=>'<p class="class1"><span class="icon-home"></span></p>', 25=>'<p class="class2"><span class="icon-cat"></span></p>', 38=>'<p class="class3"><span class="icon-dog"></span></p>', 44=>'<p class="class4"><span class="icon4"></span></p>', 50=>'<p class="class5"><span class="icon5"></span></p>', 61=>'<p class="class6"><span class="icon6"></span></p>' ); function inCatToHtml($arr) { while (list($key, $value) = each($arr)) { if(in_category($key)) { echo $arr[$key]; } } } inCatToHtml($arr);</code>
echo 可以根據實際情況最佳化,最後回傳一個 in_category 的陣列HTML,然後統一處理
<code><?php foreach(range(1,6) as $categoryNum) { if(in_category($categoryNum)) { echo '<p class="class"'.$categoryNum.'"></p>'; } }</code>
不過感覺html裡面混寫php很low...
推薦
php模板引擎。
前端單頁或是一個簡單的js引擎。
======== 噗,題主修改了下,我也改下 ==========
<code><?php $categoryIcon = [ 10 => 'icon-home', .... ]; 具体就不写了...和上面一样。</code>
<code><?php $num = count(['1','2','3','4','5','6']); for( $i=0; $i<$num; $i++ ) { if(in_category($num[$i])) { echo "<p class=class".$i."></p>"; } } ?></code>
<code><?php if ($currentCategory = Category::currentCategory()): ?> <p class="<?=$currentCategory->labelClass?>"><span class="<?=$currentCategory->iconClass?>"></span></p> <?php endif; ?></code>
表現層只關心表現就行了,至於一共有多少個category,如何判斷當前頁面的category,每個category的class是什麼,無論你準備放db也好,寫數組配置也好,都封裝到Category類裡面去。
上面寫了這麼多,我還是覺得樓主原先的寫法一目了然
覺得樓主這個多個if
的判斷條件直接用switch
比較適合吧。不知道樓主這個in_category
方法裡面的程式碼是什麼樣的,就大膽改變一下這個方法吧。方法裡用switch
:
<code>function in_category( $num ) { switch ($num) { case '10': echo'<p class="class1"><span class="icon-home"></span></p>'; break; case '25': echo'<p class="class2"><span class="icon-cat"></span></p>'; break; case '38': echo'<p class="class3"><span class="icon-dog"></span></p>'; break; case '44': echo'<p class="class4"><span class="icon4"></span></p>'; break; default: echo ''; break; } }</code>
然後直接in_category( 10 )
可以嗎?
假設題主是在判斷文章屬於哪個分類就輸出某個ICON
那麼你可以先對分類做一個定義,
<code class="php">$categroies = [ 10=>['class'=>'icon-home'], 25=>['class'=>'icon-dog'], 38=>['class'=>'icon-cat'], 44=>['class'=>'icon4'] //当然这里的数据可以是从数据库里封装好的 ]; //等待输出的html $html = ''; $class_i = 1; foreach($categories as $key => $category) { if (in_category($key)) { $html .= '<p class="class' . ($class_i++) . '"><span class="' . $category['class'] . '"></span></p>'; } } echo $html;</code>
這裡不知道in_category
的用途,如果是為了判斷某個文章是否在某個分類因而需要去遍歷所有的分類,這樣的方式還是挺不合邏輯的。
前後端分離最好了