2015-08-24 1 views
0

Le code ci-dessous devient actif lorsque la quantité définie est atteinte.Remise basée sur la commande totale

Mais si ma quantité est de trois pour la remise éligible, dans ce cas, si un client achète quatre produits, il offre toujours un rabais pour trois produits seulement.

Il attend trois autres pour donner une réduction. Mais je veux que si ma quantité minimum de jeu se rencontre, alors il donnera une réduction sur le total des commandes en fonction de mon pourcentage défini.

  1. Je ne sais pas de codage. Quelqu'un peut-il aider à résoudre le problème avec le codage?

  2. Je suis nouveau sur stackoverflow. Si ma capacité d'expliquer est fausse, alors je demande vos excuses.

Voici le code.

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')) { 
       $items_count = floor($count/(int)$this->config->get('total_discount_count')); 

       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; 
     } 
    } 
} 
?> 

Répondre

1

Ce comportement est prévu - si vous achetez 3 produits vous obtenez un âge% sur le moins cher, donc bien sûr si vous voulez que la réduction sur deux produits que vous allez avoir acheter 6.

Mais vous le voulez donc si vous achetez 3 produits ou plus, vous obtenez la réduction de chaque produit supplémentaire? (par exemple si vous achetez 4, vous obtenez la réduction appliquée à 2 d'entre eux, si vous achetez 5, la réduction est appliquée à 3, etc.?)

Si vous n'êtes pas familier avec le codage, je ne voudrais pas recommande vraiment aller jouer avec ce (ou certainement garder une sauvegarde avant de faire), mais la modification que je voudrais faire est catalog/model/total/total_discount.php le dernier fichier que vous avez posté:

Modifier la ligne

$items_count = floor($count/(int)$this->config->get('total_discount_count')); 

à

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

Le résultat est que si vous indiquez 3 produits pour le décompte, le nombre de produits pour lesquels le rabais est appliqué correspond au nombre de produits dans le panier moins 3. (c.-à-d. 4ème, 5ème, 6ème, etc. aura actualisation)

EDIT

Il suffit de relire votre question et je comprends maintenant que vous voulez que la décote appliquée à l'ordre entier si au moins les produits X sont commandés?

Si oui, alors changer la même ligne ci-dessus pour

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

devrait permettre d'atteindre l'effet désiré. Cela n'affectera pas les frais de port, ni d'autres frais supplémentaires.

+0

Son travaillé. Merci beaucoup. –