受注テーブルに「キャリア」列を追加しようとしています。私はAdminOrdersController.phpのfields_list配列にそのフィールドを追加する必要があることを知っていますが、フィールドに配列を展開すると、carrier
私はBOにunknown column 'carrier'
エラーがあります。私が間違っていることは何ですか?Prestashopバックオフィスの受注テーブルにキャリア列を追加
答えて
マルケスとしての遅れはあなたにそれを行う方法を教えてくれます。私はこのオーバーライドをテストしました。
override/controllers/admin
で次のコードを使用して新しいファイルAdminOrdersController.php
を作成します。
<?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();
}
}
マルクスのexplanantionように同じ
、私はjoinnedいるcarrier
テーブルをクエリに追加した名前を選択します(表示するように設定されている - ノーキャリアの場合)と表示されましたそれはfield_list
のフィルタとオーダーを使用しています。 このオーバーライドではparent::__construct();
ではなく、AdminController::__construct();
に電話する必要はありません。 必要に応じてPrestaShopキャッシュもクリアしてください。
キャリアを表示するには、$ this - > _ select、$ this - > _ joinおよび$ this-> field_list変数を編集する必要があります。
$この - > _参加するには、次に、選択して使用すると、カーテーブルを持っているので、あなたがキャリアを取得するには
carr.name as `carriername`
を使用することができ、次の
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`)
が含まれている必要があります。その後、フィールドがリストにあなたが最初の2つの項目は、有効なSQLでなければならないこと
'carriername' => array(
'title' => $this->l('Carrier')
),
実行(Do)の心のようなものを使用する必要がありますので、(あなたは、コードを追加した場所に応じて)適切な場所にスペースやカンマを使用します。また、この機能のオーバーライドを使用する必要があるため、Prestashopアップデートを入手することもできます(http://doc.prestashop.com/display/PS16/Overriding+default+behaviors#Overridingdefaultbehaviors-Overridingacontroller参照)。
- 1. バックオフィスprestashop deconexion
- 2. prestashop製品のバックオフィスに新しいフィールドタブを追加するには?
- 3. AngularUIをUmbracoバックオフィスに追加
- 4. 出荷バックオフィスを注文するためのボタンを追加
- 5. PrestaShopの1.7バックオフィスで「製品を追加」ページを編集する方法
- 6. Prestashopワンステップ・チェックアウトでプログラマブルにキャリアを変更
- 7. prestashop adminバックオフィスにアクセスできない
- 8. PrestaShop:チェックアウトページからキャリアを解除する
- 9. Prestashopは、バックオフィスで注文商品の2倍のコストを表示します
- 10. Prestashop。 mailalertモジュールに注文バーコードを追加するには?
- 11. prestashop注文に固定税を追加してください
- 12. Prestashop:注文サマリーページにフィールドを追加する方法
- 13. 受注テーブル困難
- 14. PRESTASHOP - 追加の設定ページ
- 15. DockerでPrestashopを実行しているときのバックオフィスのERR_TOO_MANY_REDIRECTS
- 16. Prestashop製品をタイムアウトに追加
- 17. Prestashop 1.6の注文をリストする方法アドレスが割り当てられていないバックオフィス
- 18. PrestaShop 1.6バックオフィスのページ付けが正しく機能しない
- 19. 行番号の列をテーブルに追加
- 20. SQLのテーブルに列を追加する
- 21. Morris.jsに注釈/注釈を追加
- 22. レンダリングのPrestashopバックオフィスの入力フィールドタイプにデフォルト値を設定する方法
- 23. 注文確認ページの注文ID Prestashop
- 24. 注釈をpdfに追加
- 25. Prestashop:範囲外の注文
- 26. prestashop 1.6 webserviceで商品を追加
- 27. Prestashopでnoindexタグを追加する
- 28. クラスをテーブル列に追加する
- 29. NetSuite:商品受注に先立ってsalesorderにクレジットカードのauthCodeとpnRefNumを追加
- 30. Woocommerceの管理注文リストにカスタムフィールドを追加する "注文"既存の列