0

1 つのオプションがエコー アウトされた次の関数を考えてみましょう。

function dynamic_options() {
$getheadercolor = get_header_textcolor();
$options_social = get_option('sandbox_theme_social_options');   
$wrapper_background_color = get_option('wrapper_background_color');

if($getheadercolor !='blank'){
echo '<style type="text/css">';
}

  if($getheadercolor !='blank') {
     echo "\n"."#header a{   
     color:#$getheadercolor;
     }";     
  }//End If $getheadercolor

   if($getheadercolor !='blank'){
        echo "\n".'</style>';
   }

}// End Dynamic options

このようなものをヘッダーに出力します(問題なく動作し、希望どおりに動作します

<style type="text/css">

#header a{

 color:#30409b;
}
</style>

ここで問題があります。この関数にはオプションが 1 つだけではなく、多数のオプション(20 ~ 30 個のオプション) があります。要点を説明するために、今のところ、関数には5 つのオプションがあるとしましょう。したがって、次のようになります。

function dynamic_options() {
$getheadercolor = get_header_textcolor();
$options_social = get_option('sandbox_theme_social_options');   
$wrapper_background_color = get_option('wrapper_background_color');

//My main "problem" is an IF Statement below because it will look like a mess
//With 20 options or more and with all those OR inside it... 
if($getheadercolor !='blank' || $sitecolor !='' || $textcolor !='' 
|| $backgroundcolor !='' || $menucolor !=''){
echo '<style type="text/css">';
}

  if($getheadercolor !='blank') {
     echo "\n"."#header a{   
     color:#$getheadercolor;
     }";     
  }//End If $getheadercolor

     if($sitecolor !='blank') {
     echo "\n"."#wrapper{    
     background-color:#$sitecolor;
     }";     
  }//End If $sitecolor

     if($textcolor !='blank') {
     echo "\n".".entry p{    
     color:#$textcolor;
     }";     
  }//End If $textcolor

     if($backgroundcolor !='blank') {
     echo "\n"."body{    
     background-color:#$backgroundcolor;
     }";     
  }//End If $backgroundcolor

     if($menucolor !='blank') {
     echo "\n".".nav{    
     background-color:#$menucolor;
     }";     
  }//End If $menucolor

   //So to even close my style tag i need a bunch of those statments
   if($getheadercolor !='blank' || $sitecolor !='' || $textcolor !='' 
       || $backgroundcolor !='' || $menucolor !=''){
        echo "\n".'</style>';
   }

したがって、上記の関数は機能します、この部分
if($getheadercolor !='blank' || $sitecolor !='' || $textcolor !='' || $backgroundcolor !='' || $menucolor !='')は私には間違っているようです。この IF ステートメントには20
を超えるオプションがあるため、コードが遅くなり、非効率的になるのではないかと心配しています。私のPHP Forceは強力ではありません...私の唯一の(理想的ではない)解決策は、次のように2つのIFステートメントを単純に省略することです:

     function dynamic_options() {
     $getheadercolor = get_header_textcolor();
     $options_social = get_option('sandbox_theme_social_options');  
     $wrapper_background_color = get_option('wrapper_background_color');
     echo '<style type="text/css">';    

 if($getheadercolor !='blank') {
     echo "\n"."#header a{   
     color:#$getheadercolor;
     }";     
  }//End If $getheadercolor

     if($sitecolor !='blank') {
     echo "\n"."#wrapper{    
     background-color:#$sitecolor;
     }";     
  }//End If $sitecolor

     if($textcolor !='blank') {
     echo "\n".".entry p{    
     color:#$textcolor;
     }";     
  }//End If $textcolor

     if($backgroundcolor !='blank') {
     echo "\n"."body{    
     background-color:#$backgroundcolor;
     }";     
  }//End If $backgroundcolor

     if($menucolor !='blank') {
     echo "\n".".nav{    
     background-color:#$menucolor;
     }";     
  }//End If $menucolor

     echo "\n".'</style>';  
}// End Dynamic options

これらの IF ステートメントを使用しないコードも機能しますが、問題は、オプションがない場合、関数がヘッダー内に空のCSS スタイル タグをエコーすることです。これは望ましくありません。 この関数をよりうまく機能させるための例やアドバイスを誰かに教えてもらえますか? PS私は自分自身をPHPの初心者だと考えているので、誰かが私に素晴らしく明確なアドバイスや例を教えてくれれば、それは大歓迎です! ありがとうございました!!! <style type="text/css"></style>



4

4 に答える 4

1

オプションを連想配列に保存し、「空白」または「」文字列を含むアイテムを削除する必要があります。したがって、配列が空でない場合は単にエコーします。

$options = array();
$options['header_color'] = get_header_color();
$options['text_color'] = get_text_color();
$remove = array('','blank');
$options = array_diff($options, $remove);
if (!empty($options)) {
echo '<style type="text/css">';
if(isset($options['header_color'])) {
    echo "\n"."#header a{   
    color:#".$options['header_color'].";
    }";     
}
if(isset($options['text_color'])) {
    echo "\n".".entry p{   
    color:#".$options['text_color'].";
    }";     
}
   echo '</style>'; 
}
于 2013-08-27T12:55:20.343 に答える
1

if(){} ステートメントの代わりに、switch() { case.. } ステートメントを使用します。これは、提供されたコードの方が見栄えが良いからです。

<?php
   function dynamic_options() {
       echo "<style type='text/css'>
       $css = array( 'headercolor'=>'blank',
                     'options_social'=>'blank',
                     'wrapper_background_color'=>'blank' );
       $css['headercolor'] = 'c0c0c0'; // get_header_textcolor();
       //$css['options_social'] = 'dont set this one'; //get_option('sandbox_theme_social_options');
       $css['wrapper_background_color'] = 'f00'; //get_option('wrapper_background_color');

    foreach( $css as $itm => $value ) {
        if( $value != 'blank' ) {
            switch( $itm ) {
                case 'headercolor'              : echo "\n"."#header a{color:#{$value};}"; break;
                case 'wrapper_background_color' : echo "\n"."#wrapper{background-color:#{$value};}";  break;
            }
        }
    }
    echo "</style>";
  }
?>

ブラウザに違いはないので、最終的な出力は問題ありません。

報奨金の提供に感謝しますが、レインチェックを行います - いつかあなたの助けが必要になるかもしれません.

于 2013-08-27T13:06:33.517 に答える
1

オプションに連想配列を使用することを考えましたか:

$css = array( 'headercolor'=>'', 'options_social'=>'' .... );

現在行っているように値を設定します。

$getheadercolor = get_header_textcolor();
$options_social = get_option('sandbox_theme_social_options');   
$wrapper_background_color = get_option('wrapper_background_color');

次に、 foreach() ステートメントを使用して値を反復処理します。このようにして、プロパティ名とその値を取得します。

于 2013-08-27T12:25:33.813 に答える
0

スタイルを変数に入れることができるかもしれません。if ステートメントの実行後、変数が空かどうかを確認できます。そうでない場合は、スタイル タグを印刷できます。

于 2013-08-27T12:20:53.637 に答える