-1

注文合計に対して OpenCart の変更を行っています。これはコードのスニペットです:

<?php
foreach ($data['totals'] as $total) {
    if (
        $this->db->escape($total['code'])=="sub_total" ||
        $this->db->escape($total['title'])="Sub-Total" 
    ) {
        $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . (float)$data['total'] . "', sort_order = '" . (int)$total['sort_order'] . "'");
    } else {
        $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . $_SESSION['GCFinalOrderTotalIncludingDelivery'] . "', sort_order = '" . (int)$total['sort_order'] . "'");
    }
}
?>

これが疑似コードです。IF/Else を foreach ステートメント内にネストできますか?

<?php
foreach ($d['totals'] as $total) {
    if ($query=="x" ||  $query=="y") {
        a();
    } else {
        b();
    }
}
?>
4

6 に答える 6

7

確かに彼らはできます。

そして、それを言うのに30文字を使うのはかなり難しいです.

于 2012-09-06T10:46:50.043 に答える
1

はい、これを行うことができます。それもかなり一般的に行われます。==ただし、テストするときは必ず使用してください。あなたは=あなたのテストとして持っています。

于 2012-09-06T10:48:25.773 に答える
1

「はい、できます!」. ただし、ループがそれほど大きくない場合は、2 つの分岐の実際の違いを再考することをお勧めします。たとえば、疑似コードの例を見てみましょう。ループ自体によって提供される変数から派生したものではない値に応じて分岐が決定される場合は、分岐を移動する方が適切です。

foreach($someArr as $k=>$v)
{
    if ($someOtherVar === true)
    {
        echo 'The value is '.$v;
    }
    else
    {
        echo 'The key is '.$k;
    }
}

次のように書くことができます(そしてそうすべきです):

$str = 'The '.($someOtherVar === true ? 'value' : 'key').' is ';
foreach($someArr as $k=>$v)
{
    echo $str.$v;
}
于 2012-09-06T10:55:06.937 に答える
1

確かに、それはできます。何が問題なのかはっきりしませんが、次の行にタイプミスがあるとします:

$this->db->escape($total['title']) = "Sub-Total" 

これは次のようになります。

$this->db->escape($total['title']) == "Sub-Total" 
于 2012-09-06T10:46:56.877 に答える
0

はい、絶対にそうです。そうでなければ、プログラミング言語を持つことのポイントは何でしたか。

于 2012-09-06T10:47:50.277 に答える
0

OpenCart で編集しようとしているファイルは注文モデルだと思いますか?

/catalog/model/checkout/order.php

FANgel==によって言及された2 つが欠落しているという問題がありますが、問題はフロートにあります。この関数ではデータ属性が取り除かれます。Data 配列はもはやそのスニペット内にないためです。TOTAL に依存します。

だからあなたの行:

$this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . (float)$data['total'] . "', sort_order = '" . (int)$total['sort_order'] . "'");

次のようにする必要があります: ( NEW に注意してください(float)$total['value'])

$this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . (float)$total['value'] . "', sort_order = '" . (int)$total['sort_order'] . "'");

つまり、次のようになります。

#######
// WAS (float)$data['value'] 
// NOW (float)$total['value']
#######
foreach ($data['totals'] as $total) {
    if (
    $this->db->escape($total['code'])=="sub_total" ||
    $this->db->escape($total['title'])=="Sub-Total" 
    ) {
        $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . (float)$total['value'] . "', sort_order = '" . (int)$total['sort_order'] . "'");
    } else {
        $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . $_SESSION['GCFinalOrderTotalIncludingDelivery'] . "', sort_order = '" . (int)$total['sort_order'] . "'");
    }
}
于 2012-09-06T10:52:58.043 に答える