open cart 2.0.3.1 中,现在小计正在计算而不减去折扣 . 但我需要减去总折扣 .

请查看图片以获取具体示例 . http://postimg.org/image/lff2g1qff/

我修改了文件 /catalog/model/total/sub_total.php

$sub_total = $this->cart->getSubTotal(); 之后

已经下面的代码来获得小计 - 折扣

$total_discount_total = $this->cart->getTotalDiscounts();
$total_discount_value = 0; // initialize total discount;
foreach($total_discount_total as $value){
 $total_discount_value = $total_discount_value + $value;
}
$display_sub_total = $sub_total - $total_discount_value;

$total_data[] = array 中,已将 'value' => ..$sub_total 更改为 $display_sub_total

但它给出了以下错误 .

致命错误:在第7行的/home/public_html/catalog/model/total/sub_total.php中调用未定义的方法Cart :: getTotalDiscounts()

我不是代码专家 . 任何人都可以帮我修改这段代码吗?

下面是代码 .

catelog/model/total/sub_total.php

<?php
class ModelTotalSubTotal extends Model {
    public function getTotal(&$total_data, &$total, &$taxes) {
        $this->load->language('total/sub_total');

        $sub_total = $this->cart->getSubTotal();

        if (isset($this->session->data['vouchers']) && $this->session->data['vouchers']) {
            foreach ($this->session->data['vouchers'] as $voucher) {
                $sub_total += $voucher['amount'];
            }
        }

        $total_data[] = array(
            'code'       => 'sub_total',
            'title'      => $this->language->get('text_sub_total'),
            'value'      => $sub_total,
            'sort_order' => $this->config->get('sub_total_sort_order')
        );

        $total += $sub_total;
    }
}

admin/controller/total/total_discount.php

<?php
class ControllerTotalTotalDiscount extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('total/total_discount');

        $this->document->setTitle($this->language->get('heading_title'));

        $this->load->model('setting/setting');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
            $this->model_setting_setting->editSetting('total_discount', $this->request->post);

            $this->session->data['success'] = $this->language->get('text_success');

    $this->response->redirect($this->url->link('extension/total', 'token=' . $this->session->data['token'], 'SSL'));
        }

        $data['heading_title'] = $this->language->get('heading_title');
        $data['text_edit'] = $this->language->get('text_edit');

        $data['text_enabled'] = $this->language->get('text_enabled');
        $data['text_disabled'] = $this->language->get('text_disabled');
        $data['text_each'] = $this->language->get('text_each');
        $data['text_once'] = $this->language->get('text_once');

        $data['entry_count'] = $this->language->get('entry_count');
        $data['entry_percent'] = $this->language->get('entry_percent');
        $data['entry_each'] = $this->language->get('entry_each');
        $data['entry_status'] = $this->language->get('entry_status');
        $data['entry_sort_order'] = $this->language->get('entry_sort_order');

        $data['help_count'] = $this->language->get('help_count');
        $data['help_percent'] = $this->language->get('help_percent');
        $data['help_each'] = $this->language->get('help_each');

        $data['button_save'] = $this->language->get('button_save');
        $data['button_cancel'] = $this->language->get('button_cancel');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_total'),
            'href' => $this->url->link('extension/total', 'token=' . $this->session->data['token'], 'SSL')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('total/total_discount', 'token=' . $this->session->data['token'], 'SSL')
        );

        $data['action'] = $this->url->link('total/total_discount', 'token=' . $this->session->data['token'], 'SSL');

        $data['cancel'] = $this->url->link('extension/total', 'token=' . $this->session->data['token'], 'SSL');

        if (isset($this->request->post['total_discount_count'])) {
            $data['total_discount_count'] = $this->request->post['total_discount_count'];
        } else {
            $data['total_discount_count'] = $this->config->get('total_discount_count');
        }

        if (isset($this->request->post['total_discount_percent'])) {
            $data['total_discount_percent'] = $this->request->post['total_discount_percent'];
        } else {
            $data['total_discount_percent'] = $this->config->get('total_discount_percent');
        }

        if (isset($this->request->post['total_discount_each_count'])) {
            $data['total_discount_each_count'] = $this->request->post['total_discount_each_count'];
        } else {
            $data['total_discount_each_count'] = $this->config->get('total_discount_each_count');
        }

        if (isset($this->request->post['total_discount_status'])) {
            $data['total_discount_status'] = $this->request->post['total_discount_status'];
        } else {
            $data['total_discount_status'] = $this->config->get('total_discount_status');
        }

        if (isset($this->request->post['total_discount_sort_order'])) {
            $data['total_discount_sort_order'] = $this->request->post['total_discount_sort_order'];
        } else {
            $data['total_discount_sort_order'] = $this->config->get('total_discount_sort_order');
        }

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('total/total_discount.tpl', $data));
    }

    private function validate() {
        if (!$this->user->hasPermission('modify', 'total/total_discount')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }
return !$this->error;
    }
}
?>

admin/language/English/total/total_discount.php

<?php

// Heading
$_['heading_title']    = 'Percent Discount for Big Orders';

// Text
$_['text_edit']       = 'Edit';
$_['text_total']       = 'Order Totals';
$_['text_success']     = 'Success: You have modified Discount total!';
$_['text_each']        = 'Each';
$_['text_once']        = 'Once';

// Entry
$_['entry_count']      = 'Products Count:';
$_['entry_percent']    = 'Percent Discount:';
$_['entry_each']       = 'Discount:';
$_['entry_status']     = 'Status:';
$_['entry_sort_order'] = 'Sort Order:';


//help

$_['help_count']      = 'The products count the order must reach before the discount becomes active.';
$_['help_percent']      = 'of the cheapest product in the order.';
$_['help_each']      = 'for Each X products or just Once.';
// Error
$_['error_permission'] = 'Warning: You do not have permission to modify Discount total!';
?>

admin/view/template/total/total_discount.tpl

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-discount" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">&times;</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
      <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-discount" class="form-horizontal">

      <div class="form-group">
            <label class="col-sm-2 control-label" for="input-count"><span data-toggle="tooltip" title="<?php echo $help_count; ?>"><?php echo $entry_count; ?></span></label>
            <div class="col-sm-10">
            <input type="text" name="total_discount_count" value="<?php echo $total_discount_count; ?>" placeholder="<?php echo $entry_count; ?>"  id="input-count" class="form-control" />
            </div>
          </div>

            <div class="form-group">
            <label class="col-sm-2 control-label" for="input-percent"><span data-toggle="tooltip" title="<?php echo $help_percent; ?>"><?php echo $entry_percent; ?>&nbsp;<b>%</b></span></label>
            <div class="col-sm-10">
            <input type="text" name="total_discount_percent" value="<?php echo $total_discount_percent; ?>" placeholder="<?php echo $entry_percent; ?>"  id="input-percent" class="form-control" />
            </div>
          </div>

          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-each"><span data-toggle="tooltip" title="<?php echo $help_each; ?>"><?php echo $entry_each; ?></span></label>
            <div class="col-sm-10">
              <select name="total_discount_each_count" id="input-each" class="form-control">
              <?php if ($total_discount_each_count) { ?>
                <option value="1" selected="selected"><?php echo $text_each; ?></option>
                <option value="0"><?php echo $text_once; ?>></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_each; ?></option>
                <option value="0" selected="selected"><?php echo $text_once; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>


     <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="total_discount_status" id="input-status" class="form-control">
                   <?php if ($total_discount_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>

          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-sort-order"><?php echo $entry_sort_order; ?></label>
            <div class="col-sm-10">
            <input type="text" name="total_discount_sort_order" value="<?php echo $total_discount_count; ?>" placeholder="<?php echo $entry_sort_order; ?>"  id="input-sort-order" class="form-control" />
            </div>
          </div>
      </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

catalog/language/english/total/total_discount.php

<?php
    $_['text_total_discount'] = 'Discount';
    ?>

catelog/model/total/total_discount.php

<?php

class ModelTotalTotalDiscount extends Model {
    public function getTotal(&$total_data, &$total, &$taxes) {
        $count = 0;
        $price = 0;
        $prices = array();

        foreach ($this->cart->getProducts() as $product) {
            $count += $product['quantity'];

            for ($i = 0; $i < $product['quantity']; $i++) {
                $prices[] = $product['price'];
            }
        }

        sort($prices);

        if ($count >= (int)$this->config->get('total_discount_count')) {
            if ($this->config->get('total_discount_each_count')) {
                if ($count >= (int)$this->config->get('total_discount_count')) {
    $items_count = $count;
} else {
    $items_count = 0;
}

                for ($i = 0; $i < $items_count; $i++) {
                    $price += $prices[$i];
                }
            } else {
                $price += $prices[0];
            }

            $this->load->language('total/total_discount');

            $price *= (float)$this->config->get('total_discount_percent') / 100;

            $total_data[] = array(
                'code'       => 'total_discount',
                'title'      => $this->language->get('text_total_discount'),
                'text'       => $this->currency->format(-$price),
                'value'      => -$price,
                'sort_order' => $this->config->get('total_discount_sort_order')
            );

            $total -= $price;
        }
    }
}
?>