Magento 2.0 atau Magento 2.1 salah satu dari mereka.
Manish
@ Bahasa Spanyol Jika salah satu jawaban di atas membantu Anda memecahkan masalah, silakan menandainya sebagai solusi.
Siarhey Uchukhlebau
terima kasih tetapi solusi ini tidak menyelesaikan masalah saya. Saya harus menambahkan banyak hal.
Manish
1
Tentu, saya akan cukup sibuk sekarang saya akan menambahkan segera setelah mendapatkan gratis. Maaf atas ketidaknyamanan ini
Manish
Jawaban:
13
Untuk menambahkan bidang bersyarat ke model default (dan selanjutnya menggunakannya untuk tujuan validasi), Anda perlu membuat model baru (atau memodifikasi yang sudah ada) yang berisi bidang ini.
Sekarang, kita memiliki tabel dengan deskripsi model dan kita perlu melengkapi model itu sendiri, dan memasukkan ke dalamnya model dan koleksi sumber daya yang sesuai.
Model akan disebut 'Aturan':
app / code / Vendor / Rules / Model / Rule.php
<?php
namespaceVendor\Rules\Model;useMagento\Quote\Model\Quote\Address;useMagento\Rule\Model\AbstractModel;/**
* Class Rule
* @package Vendor\Rules\Model
*
* @method int|null getRuleId()
* @method Rule setRuleId(int $id)
*/classRuleextendsAbstractModel{/**
* Prefix of model events names
*
* @var string
*/protected $_eventPrefix ='vendor_rules';/**
* Parameter name in event
*
* In observe method you can use $observer->getEvent()->getRule() in this case
*
* @var string
*/protected $_eventObject ='rule';/** @var \Magento\SalesRule\Model\Rule\Condition\CombineFactory */protected $condCombineFactory;/** @var \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory */protected $condProdCombineF;/**
* Store already validated addresses and validation results
*
* @var array
*/protected $validatedAddresses =[];/**
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Data\FormFactory $formFactory
* @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
* @param \Magento\SalesRule\Model\Rule\Condition\CombineFactory $condCombineFactory
* @param \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
* @param array $data
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/publicfunction __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Data\FormFactory $formFactory,
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
\Magento\SalesRule\Model\Rule\Condition\CombineFactory $condCombineFactory,
\Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource =null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection =null,
array $data =[]){
$this->condCombineFactory = $condCombineFactory;
$this->condProdCombineF = $condProdCombineF;
parent::__construct($context, $registry, $formFactory, $localeDate, $resource, $resourceCollection, $data);}/**
* Set resource model and Id field name
*
* @return void
*/protectedfunction _construct(){
parent::_construct();
$this->_init('Vendor\Rules\Model\ResourceModel\Rule');
$this->setIdFieldName('rule_id');}/**
* Get rule condition combine model instance
*
* @return \Magento\SalesRule\Model\Rule\Condition\Combine
*/publicfunction getConditionsInstance(){return $this->condCombineFactory->create();}/**
* Get rule condition product combine model instance
*
* @return \Magento\SalesRule\Model\Rule\Condition\Product\Combine
*/publicfunction getActionsInstance(){return $this->condProdCombineF->create();}/**
* Check cached validation result for specific address
*
* @param Address $address
* @return bool
*/publicfunction hasIsValidForAddress($address){
$addressId = $this->_getAddressId($address);return isset($this->validatedAddresses[$addressId])?true:false;}/**
* Set validation result for specific address to results cache
*
* @param Address $address
* @param bool $validationResult
* @return $this
*/publicfunction setIsValidForAddress($address, $validationResult){
$addressId = $this->_getAddressId($address);
$this->validatedAddresses[$addressId]= $validationResult;return $this;}/**
* Get cached validation result for specific address
*
* @param Address $address
* @return bool
* @SuppressWarnings(PHPMD.BooleanGetMethodName)
*/publicfunction getIsValidForAddress($address){
$addressId = $this->_getAddressId($address);return isset($this->validatedAddresses[$addressId])? $this->validatedAddresses[$addressId]:false;}/**
* Return id for address
*
* @param Address $address
* @return string
*/privatefunction _getAddressId($address){if($address instanceofAddress){return $address->getId();}return $address;}}
Seperti yang Anda lihat, model kami mewarisi dari Magento\Rule\Model\AbstractModelmodel yang sudah memiliki semua metode yang diperlukan.
Tepat di Konstruktor, kami akan menambahkan kondisi pabrik yang memungkinkan kami untuk bekerja dengan mereka dan membuat beberapa metode. Ini harus memberi kita pemahaman tentang bagaimana model itu bekerja.
Perhatikan bahwa kami menggunakan model kondisi default dari \Magento\SalesRule\Model\Rule\Conditionmodul Magento SalesRule ( ). Jika Anda perlu memperluas kondisi, Anda dapat menambahkan klausa Anda sendiri dan / atau menulis ulang mereka sepenuhnya atau mewarisi dari kelas dasar yang tersedia. Di dapat berguna ketika Anda ingin menambahkan kondisi khusus yang tidak termasuk dalam kondisi default. Misalnya, Subtotal Dengan Diskon .
....
Selanjutnya, mari kita beralih ke antarmuka di panel admin. Kita membutuhkan Pengendali dengan serangkaian tindakan (seperti Simpan, Tambah, Edit, Tampilan Kisi, Reload Ketentuan) dan tata letak dengan blok.
Mari kita mulai dengan Controller itu sendiri. Pertama, nyatakan Pengendali umum:
Di sini, kita perlu memanggil pabrik model kami di Konstruktor. Itu dilakukan untuk membuat mereka (dan beberapa kelas tambahan, seperti register dan logger) tersedia untuk umum.
The _initRuleMetode bertanggung jawab atas inisialisasi aturan saat ini atau menciptakan dari yang baru dan kosong dengan kemampuan menambahkannya ke register. The _initAction()Metode beban layout dan membuat menu modul tersedia untuk tindakan (juga, itu menambah breadcumbs). The _isAllowed()Metode pemeriksaan jika admin saat ini memiliki akses ke Controller.
Pada langkah selanjutnya, kita akan menambahkan tindakan default:
Setelah selesai, kita harus menambahkan judul pengontrol savedan edit current modeltombol dan di Konstruktor. Juga, di sini Anda harus menambahkan teks utama untuk blok.
ini berfungsi seperti pesona, meskipun saya memperbarui aturan Penjualan yang berubah menjadi aturan Katalog. sekarang saya ingin menambahkan beberapa kondisi tertentu di drop down dari tabel kustom saya. Bagaimana saya bisa mendefinisikannya?
Umar
Bagaimana kita dapat mencapai Aturan Harga Katalog daripada Aturan Harga Keranjang
Ashna
3
Menggunakan komponen UI untuk Magento2.1
<fieldset name = "conditions">
<argumen name = "data" xsi: type = "array">
<item name = "config" xsi: type = "array">
<item name = "label" xsi: type = "string" translate = "true"> Ketentuan </item>
<item name = "collapsible" xsi: type = "boolean"> true </item>
<item name = "sortOrder" xsi: type = "number"> 20 </item>
</item>
</argument>
<nama wadah = "conditions_apply_to">
<argumen name = "data" xsi: type = "array">
<item name = "config" xsi: type = "array">
<item name = "sortOrder" xsi: type = "number"> 10 </item>
</item>
</argument>
<htmlContent name = "html_content">
<argumen name = "block" xsi: type = "object"> Magento \ SalesRule \ Block \ Adminhtml \ Promo \ Penawaran \ Edit \ Tab \ Ketentuan </argument>
</htmlContent>
</container>
</fieldset>
Saya dapat menyimpan nilai sebagai array serial di db. Tetapi bagaimana cara mengambilnya kembali?
Shathish
saya dapat menyimpan dalam db, tetapi saya tidak dapat menemukan pada edit di form.field kosong dalam bentuk edit. bisakah kamu membantu magento.stackexchange.com/questions/190537/…
Sameer Bhayani
ini menunjukkan untuk penjualan, Bagaimana kita bisa mendapatkan hanya untuk kategori?
Ashna
Bisakah kita mendapatkan ketentuan aturan harga katalog daripada aturan harga keranjang?
Ashna
@Sohel Rana sir bagaimana cara menambahkan fieldset kustom dalam formulir aturan penjualan di admin seperti ini prnt.sc/oqiac8
Jawaban:
Untuk menambahkan bidang bersyarat ke model default (dan selanjutnya menggunakannya untuk tujuan validasi), Anda perlu membuat model baru (atau memodifikasi yang sudah ada) yang berisi bidang ini.
Sekarang, kita memiliki tabel dengan deskripsi model dan kita perlu melengkapi model itu sendiri, dan memasukkan ke dalamnya model dan koleksi sumber daya yang sesuai.
Model akan disebut 'Aturan':
Seperti yang Anda lihat, model kami mewarisi dari
Magento\Rule\Model\AbstractModel
model yang sudah memiliki semua metode yang diperlukan.Tepat di Konstruktor, kami akan menambahkan kondisi pabrik yang memungkinkan kami untuk bekerja dengan mereka dan membuat beberapa metode. Ini harus memberi kita pemahaman tentang bagaimana model itu bekerja.
Perhatikan bahwa kami menggunakan model kondisi default dari
\Magento\SalesRule\Model\Rule\Condition
modul Magento SalesRule ( ). Jika Anda perlu memperluas kondisi, Anda dapat menambahkan klausa Anda sendiri dan / atau menulis ulang mereka sepenuhnya atau mewarisi dari kelas dasar yang tersedia. Di dapat berguna ketika Anda ingin menambahkan kondisi khusus yang tidak termasuk dalam kondisi default. Misalnya, Subtotal Dengan Diskon .....
Selanjutnya, mari kita beralih ke antarmuka di panel admin. Kita membutuhkan Pengendali dengan serangkaian tindakan (seperti Simpan, Tambah, Edit, Tampilan Kisi, Reload Ketentuan) dan tata letak dengan blok.
Mari kita mulai dengan Controller itu sendiri. Pertama, nyatakan Pengendali umum:
Di sini, kita perlu memanggil pabrik model kami di Konstruktor. Itu dilakukan untuk membuat mereka (dan beberapa kelas tambahan, seperti register dan logger) tersedia untuk umum.
The
_initRule
Metode bertanggung jawab atas inisialisasi aturan saat ini atau menciptakan dari yang baru dan kosong dengan kemampuan menambahkannya ke register. The_initAction()
Metode beban layout dan membuat menu modul tersedia untuk tindakan (juga, itu menambah breadcumbs). The_isAllowed()
Metode pemeriksaan jika admin saat ini memiliki akses ke Controller.Pada langkah selanjutnya, kita akan menambahkan tindakan default:
....
Editing:
Ini adalah cara menambahkan kondisi baru:
Kelas ini bertanggung jawab untuk memuat kondisi yang telah dipilih di antarmuka (semua kondisi tidak dapat dimuat sekaligus).
....
Selanjutnya, kita perlu membuat semua blok dan tata letak yang diperlukan.
Sekarang, mari kita mulai membuat dan mengedit aturan baru. Mari kita buat blok wadah utama untuk diedit:
Setelah selesai, kita harus menambahkan judul pengontrol
save
danedit current model
tombol dan di Konstruktor. Juga, di sini Anda harus menambahkan teks utama untuk blok.Ini adalah bentuk itu sendiri:
dan tab:
Kami akan memiliki dua tab: Informasi dan Ketentuan model umum.
Kondisi:
Untuk melihat detail lebih lanjut, silakan ikuti tautan ini .
sumber
Menggunakan komponen UI untuk Magento2.1
sumber