Я создал собственный отчет. В отчете содержится значительное количество полей, обязательных для заполнения при экспорте в форму CSV.
Я пытаюсь выяснить, есть ли способ пропустить рендеринг некоторых полей в интерфейсной сетке. Большинство из них не очень важны для процесса фильтрации в админке и используются только при загрузке отчета для дальнейшего анализа за пределами Magento.
Я ожидаю, что этот тип функциональности будет находиться в классе сетки, поскольку именно он генерирует реальную сетку и, позже, экспортированный CSV, но я не вижу ничего похожего на видимость.
Прежде чем я перейду и переопределю методы в этом классе для нашего пользовательского отчета, существует ли менее известный способ сделать это проще, чем мое добавление какого-либо свойства showInGrid через массив свойств addColumn?
TL, DR. Есть ли простой способ экспортировать поля (скажем, CSV или XML), но пропустить из сетки администратора?
Ответы:
Создайте отдельное определение блока - например, продублируйте блок Grid для другого блока, специфичного для вашего CSV; Я бы назвал это
Csvgrid.php
вместоGrid.php
- он будет содержать все те же функциональные возможности, что и обычныеGrid.php
, но опущу один столбец.В вашем контроллере:
При дублировании Grid поместите
Csvgrid.php
в тот же физический каталог, чтоGrid.php
и, соответственно, переименуйте его - не забудьте изменить имя класса!Редактировать:
Так что получается, что
Mage_Adminhtml_Block_Widget_Grid
есть метод, который называетсяremoveColumn
- определяется как:Я предполагаю, что, поскольку
Mage_Adminhtml_Block_Report_Grid
extendsMage_Adminhtml_Block_Widget_Grid
наследует этот метод и должен иметь возможность его использовать. В этом случае я бы создал новый блок Grid и расширил Grid, в котором находится ваш текущий отчет. Оттуда вы можете использовать свой собственныйprepareColumns
метод, вызыватьparent::_prepareColumns()
и затем вызыватьremoveColumn
..Удачи.
источник
_prepareColumns
будет ссылаться на индекс, которого больше нет в коллекции. В то время как есть метод 'removeColumn', я бы сказал, расширьте класс Grid и вызовитеparent::_prepareColumns()
, а затем внедрите свой собственныйremoveColumns
метод.Вы можете использовать set
column_css_class
иheader_css_class
asno-display
для столбца, который вы хотите скрыть. Это скроет ваш столбец из сетки администратора. Однако этот столбец будет присутствовать в экспортированном CSV или XML.источник
В
_afterLoadCollection()
Mage / Adminhtml / Block / Widget / Grid.php есть метод, который можно переопределить, чтобы удалить / добавить столбцы для экспорта или отображения с помощью$this->_isExport
.ПРИМЕЧАНИЕ. Добавление этого параметра к
_prepareCollection()
не будет работать, так как фильтры коллекции не будут отправлены, в результате чего вся коллекция сбрасывается за вычетом какой-либо фильтрации.источник
Если вам нужны только эти поля для отчета, почему бы вам не добавить их только для отчета? Блоки сетки имеют метод getCollection, который возвращает модель коллекции, и вы можете добавить поля, необходимые для вашего отчета.
источник
Самый простой способ сделать это
Откатитесь на файл Grid.php (app / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)
затем добавьте свой пользовательский столбец, как я сделал ниже:
также внес изменения в
это означает, что мы должны добавить наше собственное значение столбца в коллекцию. Для этого мы должны объединить наш стол с таблицей сбора сетки.
Теперь зайдите и проверьте бэкэнд, экспортируйте заказы. будет добавлен наш пользовательский столбец.
источник