Saya telah membuat laporan khusus. Laporan ini memiliki sejumlah bidang di dalamnya yang diperlukan saat diekspor dalam bentuk CSV.
Yang saya coba cari tahu adalah apakah ada cara untuk menghilangkan rendering dari beberapa bidang di grid front-end. Sebagian besar dari mereka tidak terlalu penting untuk proses pemfilteran di admin dan hanya digunakan ketika laporan diunduh untuk penguraian lebih lanjut di luar Magento.
Saya berharap ini untuk mengetik fungsionalitas untuk berada di kelas grid karena itulah yang menghasilkan grid yang sebenarnya dan, kemudian, CSV yang diekspor, tetapi saya tidak melihat apa pun yang terlihat berhubungan dengan visibilitas.
Sebelum saya masuk dan menimpa metode di kelas ini untuk laporan kustom kami, apakah ada cara yang kurang diketahui untuk melakukannya lebih mudah daripada saya menambahkan beberapa jenis properti "showInGrid" melalui array properti addColumn?
TL, DR apakah ada cara mudah untuk mengekspor bidang (misalnya, CSV atau XML) tetapi dihilangkan dari kisi admin?
Jawaban:
Buat definisi blok terpisah - mis. Duplikat blok Grid ke blok lain yang khusus untuk CSV Anda; Saya akan menyebutnya
Csvgrid.php
sebagai gantiGrid.php
- ini akan berisi semua fungsi yang sama yangGrid.php
berisi normal , tetapi mengabaikan satu kolom.Di controller Anda:
Saat menduplikasi Grid, tempatkan
Csvgrid.php
ke direktori fisik yang samaGrid.php
tetapi ubah nama sesuai - jangan lupa untuk mengubah nama kelas!Edit:
Jadi ternyata
Mage_Adminhtml_Block_Widget_Grid
ada metode yang disebutremoveColumn
- didefinisikan sebagai:Dugaan saya adalah karena
Mage_Adminhtml_Block_Report_Grid
extendsMage_Adminhtml_Block_Widget_Grid
mewarisi metode ini dan harus dapat digunakan. Saya akan, dalam hal ini, membuat blok Grid baru dan memperpanjang Grid bahwa laporan Anda saat ini. Dari sana Anda dapat menggunakanprepareColumns
metode Anda sendiri , panggilparent::_prepareColumns()
dan kemudian panggilremoveColumn
..Semoga berhasil.
sumber
_prepareColumns
yang akan referensi indeks yang tidak ada dalam koleksi lagi. Meskipun ada metode 'removeColumn', saya akan mengatakan memperpanjang kelas Grid dan memanggilparent::_prepareColumns()
, lalu menyuntikkanremoveColumns
metode Anda sendiri .Anda dapat menggunakan set
column_css_class
danheader_css_class
sebagaino-display
kolom yang ingin Anda sembunyikan. Ini akan menyembunyikan kolom Anda dari kisi admin. Namun, kolom ini akan ada di csv atau xml yang diekspor.sumber
Ada metode
_afterLoadCollection()
di Mage / Adminhtml / Block / Widget / Grid.php yang dapat diganti untuk menghapus / menambah kolom untuk ekspor atau tampilan$this->_isExport
.CATATAN: Menambahkan ini ke
_prepareCollection()
tidak akan berfungsi karena filter pengumpulan tidak akan dikirimkan, sehingga seluruh koleksi dibuang tanpa filter apa pun.sumber
Jika Anda hanya membutuhkan bidang-bidang itu untuk laporan, mengapa Anda tidak menambahkannya untuk laporan saja? Blok kotak memiliki metode getCollection yang akan mengembalikan model pengumpulan dan Anda dapat menambahkan bidang yang Anda butuhkan untuk laporan Anda.
sumber
Cara mudah untuk melakukannya adalah
Kembalikan file Grid.php (app / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)
kemudian tambahkan kolom khusus Anda seperti yang saya lakukan di bawah ini:
juga membuat perubahan
ini berarti kami harus menambahkan nilai kolom khusus kami ke koleksi. Untuk itu kita harus bergabung dengan tabel kita dengan tabel kumpulan grid.
Sekarang pergi dan periksa backend, ekspor pesanan. akan ada kolom khusus kami ditambahkan.
sumber