【发布时间】:2013-04-03 22:09:17
【问题描述】:
我正在为 WordPress 构建一个自定义模板,并且在几个地方我使用了 PHP if else 语句,例如页脚中的 JS 中的以下示例。它工作正常,但我想知道这是否被认为是“不好的做法”,如果是这样,有什么更好的方法来处理它?
<script type="text/javascript">
var $submenu = $('.submenu');
// SUBMENU animation
<?php if ( in_category('Collection') == false ) { ?> // if not a Collection subpage
$('.menu li a').each(function() {
if ( $(this).text() == 'Collection' ) { // If is Collection link show submenu on hover
$(this).mouseenter(function() {
$submenu.slideDown();
});
} else { // else close submenu on hover over other menu links
$(this).mouseenter(function() {
$submenu.slideUp();
});
}
});
$('.nav').mouseleave(function() { // close submenu
$submenu.slideUp();
});
<?php } else { ?> // If a Collection subpage always show subnav
$submenu.show();
<?php } ?>
</script>
【问题讨论】:
-
一点也不。这样你就可以得到干净的代码,并且正确地分离了关注点。另一种方法是您将拥有一个 javascript 变量
var inCategory = <?= in_category("Collection") ?>。然后你可以通过javascript检查inCategory变量。但是,您这样做的方式还可以。你唯一能做的就是清理 if 语句并使用<?= if (in_category("Collection")) : ?>,然后使用<?= else: ?>,最后使用<?= endif ?> -
另一种方法是通过 PHP 在页面中简单地设置一个变量,例如
var isCollection = <?php echo in_category('Collection') ? 1 : 0 ?>。然后你的 JS 可以检查这个 var 并做适当的事情。一个优点是您可以将 JS 移动到可以缓存的外部文件中,而不是重新发送嵌入在每个页面中的相同 JS 有效负载。 -
混合服务器代码和 javascript 使代码维护变得更加困难。
-
我认为这是一种不好的做法,混合 html 和 js。因为您无法使用
jshint或jslint等工具为您的脚本自动验证代码。 -
免得有人怀疑,赞成票意味着这是一个好的问题而不是一个好的方法。
标签: php jquery wordpress if-statement