2016-09-30 3 views

Antwort

2

Bis spät in die Nacht, als Markus dir Anleitung gibt, wie es geht. Ich habe diese Übersteuerung getestet.

In override/controllers/admin erstellen neue Datei AdminOrdersController.php mit folgenden Code:

<?php 

class AdminOrdersController extends AdminOrdersControllerCore 
{ 
    public function __construct() 
    { 
     $this->bootstrap = true; 
     $this->table = 'order'; 
     $this->className = 'Order'; 
     $this->lang = false; 
     $this->addRowAction('view'); 
     $this->explicitSelect = true; 
     $this->allow_export = true; 
     $this->deleted = false; 
     $this->context = Context::getContext(); 

     $this->_select = ' 
     a.id_currency, 
     a.id_order AS id_pdf, 
     CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, 
     osl.`name` AS `osname`, 
     IF(carrier.`name` = "0", "-", carrier.`name`) AS `carriername`, 
     os.`color`, 
     IF((SELECT so.id_order FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.id_order < a.id_order LIMIT 1) > 0, 0, 1) as new, 
     country_lang.name as cname, 
     IF(a.valid, 1, 0) badge_success'; 

     $this->_join = ' 
     LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`) 
     LEFT JOIN `'._DB_PREFIX_.'address` address ON address.id_address = a.id_address_delivery 
     LEFT JOIN `'._DB_PREFIX_.'country` country ON address.id_country = country.id_country 
     LEFT JOIN `'._DB_PREFIX_.'country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = '.(int)$this->context->language->id.') 
     LEFT JOIN `'._DB_PREFIX_.'carrier` carrier ON a.id_carrier = carrier.id_carrier 
     LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`) 
     LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')'; 
     $this->_orderBy = 'id_order'; 
     $this->_orderWay = 'DESC'; 
     $this->_use_found_rows = true; 

     $statuses = OrderState::getOrderStates((int)$this->context->language->id); 
     foreach ($statuses as $status) { 
      $this->statuses_array[$status['id_order_state']] = $status['name']; 
     } 

     $this->fields_list = array(
      'id_order' => array(
       'title' => $this->l('ID'), 
       'align' => 'text-center', 
       'class' => 'fixed-width-xs' 
      ), 
      'reference' => array(
       'title' => $this->l('Reference') 
      ), 
      'new' => array(
       'title' => $this->l('New client'), 
       'align' => 'text-center', 
       'type' => 'bool', 
       'tmpTableFilter' => true, 
       'orderby' => false, 
       'callback' => 'printNewCustomer' 
      ), 
      'customer' => array(
       'title' => $this->l('Customer'), 
       'havingFilter' => true, 
      ), 
     ); 

     if (Configuration::get('PS_B2B_ENABLE')) { 
      $this->fields_list = array_merge($this->fields_list, array(
       'company' => array(
        'title' => $this->l('Company'), 
        'filter_key' => 'c!company' 
       ), 
      )); 
     } 

     $this->fields_list = array_merge($this->fields_list, array(
      'total_paid_tax_incl' => array(
       'title' => $this->l('Total'), 
       'align' => 'text-right', 
       'type' => 'price', 
       'currency' => true, 
       'callback' => 'setOrderCurrency', 
       'badge_success' => true 
      ), 
      'payment' => array(
       'title' => $this->l('Payment') 
      ), 
      'carriername' => array(
       'title' => $this->l('Carrier'), 
       'type' => 'text', 
       'align' => 'text-center', 
       'class' => 'fixed-width-xl', 
       'filter_key' => 'carrier!name', 
       'filter_type' => 'text', 
       'order_key' => 'carrier!name' 
      ), 
      'osname' => array(
       'title' => $this->l('Status'), 
       'type' => 'select', 
       'color' => 'color', 
       'list' => $this->statuses_array, 
       'filter_key' => 'os!id_order_state', 
       'filter_type' => 'int', 
       'order_key' => 'osname' 
      ), 
      'date_add' => array(
       'title' => $this->l('Date'), 
       'align' => 'text-right', 
       'type' => 'datetime', 
       'filter_key' => 'a!date_add' 
      ), 
      'id_pdf' => array(
       'title' => $this->l('PDF'), 
       'align' => 'text-center', 
       'callback' => 'printPDFIcons', 
       'orderby' => false, 
       'search' => false, 
       'remove_onclick' => true 
      ) 
     )); 

     if (Country::isCurrentlyUsed('country', true)) { 
      $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' 
      SELECT DISTINCT c.id_country, cl.`name` 
      FROM `'._DB_PREFIX_.'orders` o 
      '.Shop::addSqlAssociation('orders', 'o').' 
      INNER JOIN `'._DB_PREFIX_.'address` a ON a.id_address = o.id_address_delivery 
      INNER JOIN `'._DB_PREFIX_.'country` c ON a.id_country = c.id_country 
      INNER JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = '.(int)$this->context->language->id.') 
      ORDER BY cl.name ASC'); 

      $country_array = array(); 
      foreach ($result as $row) { 
       $country_array[$row['id_country']] = $row['name']; 
      } 

      $part1 = array_slice($this->fields_list, 0, 3); 
      $part2 = array_slice($this->fields_list, 3); 
      $part1['cname'] = array(
       'title' => $this->l('Delivery'), 
       'type' => 'select', 
       'list' => $country_array, 
       'filter_key' => 'country!id_country', 
       'filter_type' => 'int', 
       'order_key' => 'cname' 
      ); 
      $this->fields_list = array_merge($part1, $part2); 
     } 

     $this->shopLinkType = 'shop'; 
     $this->shopShareDatas = Shop::SHARE_ORDER; 

     if (Tools::isSubmit('id_order')) { 
      // Save context (in order to apply cart rule) 
      $order = new Order((int)Tools::getValue('id_order')); 
      $this->context->cart = new Cart($order->id_cart); 
      $this->context->customer = new Customer($order->id_customer); 
     } 

     $this->bulk_actions = array(
      'updateOrderStatus' => array('text' => $this->l('Change Order Status'), 'icon' => 'icon-refresh') 
     ); 

     AdminController::__construct(); 
    } 

} 

So gleichen wie Markus explanantion, ich habe carrier Tabelle dann in Abfrage auswählen hinzugefügt Namen joinned (haben anzuzeigen gesetzt - wenn keine Träger) und angezeigt es in field_list mit funktionierendem Filter und Auftrag. Beachten Sie, dass Sie in dieser Außerkraftsetzung nicht parent::__construct();, sondern AdminController::__construct(); anrufen müssen. Löschen Sie auch PrestaShop Cache bei Bedarf.

2

Sie sollten die Variablen $ this -> _ select, $ this -> _ join und $ this-> field_list bearbeiten, um den Träger anzuzeigen.

Die $ this -> _ beitreten sollte die folgende

LEFT JOIN `'._DB_PREFIX_.'order_carrier` oc ON (a.`id_order` = oc.`id_order`) 
LEFT JOIN `'._DB_PREFIX_.'carrier` carr ON (oc.`id_carrier` = carr.`id_carrier`) 

Dann in der Auswahl enthalten haben Sie die carr Tisch, so dass Sie

carr.name as `carriername` 

Um den Träger abrufen können. Dann in der Liste Felder sollten Sie so etwas wie

'carriername' => array(
    'title' => $this->l('Carrier') 
), 

Stört verwenden, dass die ersten zwei Elemente sind gültige SQL sein sollte, so verwenden Sie Leerzeichen und Komma an den richtigen Stellen (je nachdem, wo Sie den Code hinzugefügt). Außerdem sollten Sie eine Überschreibung für diese Funktionalität verwenden, damit Sie weiterhin Prestashop-Updates erhalten können (siehe http://doc.prestashop.com/display/PS16/Overriding+default+behaviors#Overridingdefaultbehaviors-Overridingacontroller).

Verwandte Themen