这是一个奇怪的,它甚至可能不可能,但我想要做的是检查是否加载了特定样式表,如果它运行一个代码,否则运行另一个。例如:
// 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取决于加载的样式表。
我希望这是有道理的,感谢迄今为止的所有帮助!
答案 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个帖子然后是规则。
在没有看到更多代码的情况下,除了特定情况,我还可以提供更多帮助。
希望有助于或让你朝着正确的方向前进。