在yang config i中,a有一些参数,如:
$application_promo_shipping = true;
$application_promo_engrave = false;我使用这样一个三元条件来编写PHP代码:
<p class="mx-auto nav-link-promo <?= ($this->config->item('application_promo_shipping')?:"d-none")?>">Free Shipping</p>
<p class="mx-auto nav-link-promo <?= ($this->config->item('application_promo_engrave')?:"d-none")?>">Free engrave</p>如果值为true,则"d-none"类为hide,因此唯一的文本显示是Free shipping。
但是,如果航运和雕刻是真的,我如何用两个参数来制作这样的代码,我想这样称呼一个段落:
免费雕刻及免费送货
因为现在使用代码,如果我在2个参数中将值更改为true,那么在1段到另一段之间有很大的空间。
发布于 2019-05-10 10:44:58
你的主要问题..。
--您可以在一个三元条件下使用多个操作符,它将如下所示:
$output = ($var1 === true && ($var2 == 2 || $var3 == 3)) ? 'if true' : 'if false';,但,在您的情况下,我不推荐它,因为您的三元条件将是一个很长的行,其他程序员很难理解。那么,..。我该怎么解决呢?
只要将您的配置值重命名为更容易理解和更简短的内容:),那么您就可以执行三元操作,代码就会看起来很好。
方法1:
<?php
$messages = [
0 => 'Free Shipping',
1 => 'Free engrave',
2 => 'FREE ENGRAVE & FREE shipping'
];
$shipping = $this->config->item('application_promo_shipping');
$engrave = $this->config->item('application_promo_engrave');
$message_key = ($shipping && $engrave) ? 2 : (($engrave) ? 1 : 0);
?>
<p class="mx-auto nav-link-promo"><?php echo $messages[$message_key]; ?></p>方法2: (不推荐)
<?php
$shipping = $this->config->item('application_promo_shipping');
$engrave = $this->config->item('application_promo_engrave');
?>
<p class="mx-auto nav-link-promo <?php echo ($shipping) ? '' : 'd-none'; ?>">Free Shipping</p>
<p class="mx-auto nav-link-promo <?php echo ($engrave) ? '' : 'd-none'; ?>">Free engrave</p>
<p class="mx-auto nav-link-promo <?php echo ($shipping && $engrave) ? '' : 'd-none'; ?>">FREE ENGRAVE & FREE shipping</p>发布于 2019-05-10 05:35:04
其中一种方法是基于这两个变量创建输出,并将其存储在一个数组中。如果长度至少为1或更高,则打印段落并使用分隔符implode() &表示值。这样,如果这两个条件都是假的,那么段落甚至不会在HTML中呈现。
通过三元操作符使用更短的代码可能是有用的--但在这种情况下,如果条件是真的,使用普通的if语句可能会更好。
$output = [];
if ($this->config->item('application_promo_shipping')) {
$output[] = "Free shipping";
}
if ($this->config->item('application_promo_engrave')) {
$output[] = "Free engraving";
}
if (count($output)) {
?>
<p class="mx-auto nav-link-promo"><?php echo implode(" & ", $output); ?></p>
<?php
}如果您一心想使用三元和d-none类,那么您也可以在相同的条件下这样做(但是仍然需要前两个if块来声明$output的值)。
<p class="mx-auto nav-link-promo <?= count($output) ?: 'd-none'; ?>"><?= implode(" & ", $output); ?></p>发布于 2019-05-10 12:04:44
我倾向于使用一种简单得多的方法,以便让其他开发人员能够读懂我的代码。没有什么比破译代码更糟糕的了,因为有人试图变得毫无必要的聪明。
我会做这样的事情:
if (application_promo_shipping AND !application_promo_engrave) {
echo '<p class="mx-auto nav-link-promo">Free Shipping</p>';
}
if (application_promo_engrave AND !application_promo_shipping) {
echo '<p class="mx-auto nav-link-promo">Free Engraving</p>';
}
if (application_promo_engrave AND application_promo_shipping) {
echo '<p class="mx-auto nav-link-promo">Free Engraving</p> & <p class="mx-auto nav-link-promo">Free Shipping</p>';
}https://stackoverflow.com/questions/56071071
复制相似问题