0

考虑一个带有一个选项的以下函数:

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>

现在问题来了:这个函数不会只有一个选项,而是一堆选项(20-30 个选项)。因此,为了说明我的观点,假设现在我的函数将有五个选项。所以它看起来像这样:

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 不强......所以我唯一(不理想)的解决方案是简单地省略这两个 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 语句的代码也可以工作,但现在的问题是,如果没有选项,我的函数仍然会在我的标题中回显一个<style type="text/css"></style>的 CSS 样式标签:这是我不想要的。

有人可以给我一个让这个功能更好地工作的例子或建议吗?

PS我认为自己是PHP菜鸟,所以如果有人能给我一个很好的明确的建议或例子,我将不胜感激!谢谢你!!!

4

4 回答 4

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 回答
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

我使用 switch() { case.. } 语句而不是 if(){} 语句只是因为您提供的代码看起来更整洁。

<?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 回答
0

也许您可以将样式放入变量中。执行 if 语句后,您可以检查变量是否为空。如果没有,您可以打印样式标签。

于 2013-08-27T12:20:53.637 回答