使用PHP检查if / else语句的CSS样式表是否处于活动状态

时间:2014-05-19 23:33:26

标签: php css if-statement

这是一个奇怪的,它甚至可能不可能,但我想要做的是检查是否加载了特定样式表,如果它运行一个代码,否则运行另一个。例如:

// Create loop counter
$counter = 0;
while ( have_posts() ) {
    // MaxIT - Shows 2 listings per loop instead of 2
    for ($x = 0; $x < 2; $x++) {

        // Increase loop counter
        $counter++;

        the_post();

        // Include listing loop template
        get_template_part( 'loop', 'listing' );

    } // endwhile have_posts()

    echo '<hr style="width:100%; padding-left: 40px; margin: 60px 0px;" />';
}

此代码的要点是在房地产网站上显示属性。原始代码没有FOR循环,我补充说,因此它在显示水平规则之前一次显示2个属性。这纯粹是为了美观,在查看&#34; grid&#34;中的属性时看起来很棒。 view,每行显示两个属性,如:

PROPERTY |财产

HORIZONTAL RULE

但是,客户端也要求提供列表视图,每行显示1个属性,左侧是图像,右侧是详细信息。我用第二个样式表完成了这个,在第一个下拉选择器上加载。但是,因为上面的PHP在HR之前加载了2个属性,所以它显示为:

PROPERTY

PROPERTY

HORIZONTAL RULE

所以我想要完成的是让PHP说出#34;如果加载了grid_view.css,则在HR之前显示2个属性,否则如果加载了list_view.css,则在HR&#34之前显示1个属性;

PHP可以实现吗?我不熟悉任何其他编程语言,所以如果它可以在Javascript / JQuery中完成,那就没问题,但我可能需要&#34; dummy&#34;如果可能的解释。

提前感谢大家!

---- UPDATE / EDIT

好的,我在制定Justin建议的方法时遇到了麻烦,并设置了标记&#34; (在PHP中并不完全理解术语tbh),所以我现在对我当前的代码有了更多的了解(是的,它建立在Wordpress上,对不起我应该早点说过)。 / p>

在我的header.php中,我有...... 唉,有麻烦..

所以在我的header.php中我有这个...

<link rel="stylesheet" type="text/css" href="/wp-content/themes/wpcasa/slick/slick.css"/>
<link href="/wp-content/themes/wpcasa/lib/assets/css/layout.min.css" rel="stylesheet" type="text/css" title="layoutgrid">
<link href="/wp-content/themes/wpcasa/lib/assets/css/layout_list.css" rel="stylesheet" type="text/css" title="layoutlist">
<script type="text/javascript" src="/wp-content/themes/wpcasa/lib/assets/js/styleswitcher.js"></script>

这些样式表中只有一个是活动的,有一个是由styleswitcher.js文件处理的......

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

var cookie = readCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);

这不是我的代码,如前所述,我对Javascript几乎一无所知。

然后在我的search-listings.php文件中,我有这个标记来创建选择器......

<div class="btn-group">
        <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">View <span class="caret"></span></button>
            <ul class="dropdown-menu pull-right">
                <li><a href="#" onclick="setActiveStyleSheet('layoutgrid'); return false;">Grid view</a></li>
                <li><a href="#" onclick="setActiveStyleSheet('layoutlist'); return false;">List view</a></li>
            </ul>
</div>

主要问题是我需要顶部PHP代码的循环计数器以这种或那种方式运行。 @aug提供的链接似乎有意义,但据我所知,我无法在PHP中包装该Javascript以实现我需要做的事情。

所以回顾......

  • 这是一个显示属性列表的PHP while循环。

  • 我在while循环中写了一个PHP for循环,每次while循环循环显示2个列表,而不是1.

  • 上述工作正常,直到引入&#34;列表&#34;视图来了,由于我缺乏PHP知识,必须通过使用Javascript文件切换活动样式表来实现。

  • 我现在需要一种方法仍然可以切换到列表视图样式表,但要更改$ x&lt; 2到$ x&lt;加载列表视图样式表时为1,或者为了能够使用if / elseif语句为$ x&lt; 2或$ x&lt; 1取决于加载的样式表。

我希望这是有道理的,感谢迄今为止的所有帮助!

1 个答案:

答案 0 :(得分:1)

PHP会在任何HTML,Javascript或CSS之前得到处理,因此它无法判断CSS类是否存在,因为它在那个时间点不存在。

在您的特定情况下,我会将属性转储到JSON对象中并使用Javascript处理它。

编辑:PHP特定解决方案

好吧,我在您的代码中假设您正在使用wordpress,这在查看get_posts()http://codex.wordpress.org/Function_Reference/get_posts

时可能是值得的。

由于信息和代码有限,我能看到的最简单的方法是设置一个标志,指明这是否是列表视图。

假设变量是$ listview,它设置为true或false。

在您网页的模板文件中,您可以执行...

if(!$listview) {
    //echo your extra css here...
}

然后用你创建的循环......

    $counter = 0;
    if(!$listview) { $hr_counter = 1; } else { $hr_counter = 2; }
    while ( have_posts() ) {
    // MaxIT - Shows 2 listings per loop instead of 2
    for ($x = 0; $x < $hr_counter; $x++) {

        // Increase loop counter
        $counter++;

        the_post();

        // Include listing loop template
        get_template_part( 'loop', 'listing' );

    } // endwhile have_posts()

    echo '<hr style="width:100%; padding-left: 40px; margin: 60px 0px;" />';
}

这样你就可以做2个帖子,然后是规则,或者1个帖子然后是规则。

在没有看到更多代码的情况下,除了特定情况,我还可以提供更多帮助。

希望有助于或让你朝着正确的方向前进。