gpt4 book ai didi

php - 使用 PHP 检查 CSS 样式表是否对 if/else 语句有效

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:36 25 4
gpt4 key购买 nike

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

// 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 个属性。这纯粹是为了美观,在“网格” View 中查看属性时看起来很棒,每行显示两个属性,例如:

属性(property) |属性(property)

水平规则

但是,客户还要求有一个 ListView ,每行显示 1 个属性,左侧是图像,右侧是详细信息。我通过单击下拉选择器加载的第二个样式表完成了此操作。但是,因为上面的 PHP 在 HR 之前加载了 2 个属性,所以显示如下:

属性(property)

属性(property)

水平规则

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

这可以用 PHP 实现吗?我不熟悉任何其他编程语言,所以如果可以用 Javascript/JQuery 完成,那很好,但如果可能的话,我可能需要“虚拟”解释。

提前致谢!

----更新/编辑

好吧,我无法弄清楚如何在 PHP 中执行贾斯汀建议的“设置标志”(不太了解该术语),所以这里有更多关于我当前代码的见解(是的,它是基于 Wordpress 构建,抱歉我早该这么说)。

在我的 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>

一次只有一个样式表处于事件状态,哪个由 stylesswitcher.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 提供的链接似乎很有意义,但据我所知,我无法将 Javascript 包装在 PHP 周围以实现我需要做的事情。

所以回顾一下......

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

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

  • 在引入“列表” View 之前,上述方法运行良好,由于我缺乏 PHP 知识,必须使用 Javascript 文件来切换事件样式表来实现。

    <
  • 我现在需要一种方法来仍然能够切换到 ListView 样式表,但要么在加载 ListView 样式表时将 $x < 2 更改为 $x < 1,要么能够有一个 if/elseif 语句,根据加载的样式表给你 $x < 2 或 $x < 1。

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

最佳答案

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

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

编辑:PHP 特定解决方案

好吧,我根据您使用的 wordpress 的代码做出假设,在查看 get_posts() http://codex.wordpress.org/Function_Reference/get_posts 时可能值得这样做

由于可用的信息和代码有限,我能看到的最简单的方法是设置一个标志来指定这是否是 ListView 。

让我们假设变量是设置为 true 或 false 的 $listview。

在您页面的模板文件中,您可以...

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 个帖子然后执行规则。

在没有看到更多代码的情况下,我无法针对您的具体情况提供更多帮助。

希望这能帮助或让您朝着正确的方向前进。

关于php - 使用 PHP 检查 CSS 样式表是否对 if/else 语句有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com