3 回答
TA贡献1798条经验 获得超7个赞
对于您在这里的主要问题...
您可以在一个三元条件下使用多个运算符,它看起来像这样:
$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>
TA贡献1796条经验 获得超7个赞
一种方法是根据两个变量创建输出并将其存储在一个数组变量中。如果长度至少为 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>
TA贡献1821条经验 获得超4个赞
我倾向于使用更简单的方法来使我的代码对其他开发人员可读。没有什么比有人试图变得不必要的聪明而不得不破译代码更糟糕的了。
我会做这样的事情:
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>';
}
- 3 回答
- 0 关注
- 160 浏览
添加回答
举报