Вопрос

У нас есть пользовательский скрипт экспорта заказов, который запускается из памяти.Экспорт небольшого диапазона времени работает нормально, но экспорт всего декабря не работает (больше заказов, чем обычно, из-за праздников.)

Я добавил некоторые операторы журнала, чтобы дать мне использование памяти в различных точках в процессе, и провела экспорт для небольшого диапазона времени.Похоже, что шип происходит при рендеринге отчета.

Beginning of controller action Memory: 5.84M <database query happens at this point> after getReport() Memory: 19.48M <now Magento prepares our HTML output> End of controller action Memory: 44.14M * При экспорте большого набора данных «Конец действия контроллера» никогда не достигнут.

Нам действительно нужно только использовать функцию экспорта CSV, но мы даже не можем добраться до этого, потому что вы должны «обновить» сетку, прежде чем нажать «Экспорт».

Краткая из переписывания этого как автономный отчет (за пределами Magento) Я не уверен, что делать.Кто-нибудь?

Это было полезно?

Решение

Так что я оказался, что взломал отчет, чтобы вы могли запустить экспорт CSV без сначала загрузки сетки, указав? AS_CSV в конце URL.

Во-первых, я добавил этот маленький фрагмент индексией, чтобы эффективно повторно проложить запрос на ExportCsVaction, если? AS_CSV установлен в URL.

public function indexAction() {
    if(isset($_GET['as_csv'])) {
        $this->exportCsvAction();
        return;
    }

    $this->_initAction()
            ->renderLayout();
}
.

Теперь мы можем взять любой URL, генерируемый сборщиком даты, добавить? AS_CSV к нему и получите экспорт CSV для этого диапазона даты.

Затем я добавил этот код JavaScript на страницу индекса отчета (через макет XML):

// This is how the "Refresh" button generates the URL for the date range.
varienGrid.prototype.getFilter = function(){
    var filters = $$('#'+this.containerId+' .filter input', '#'+this.containerId+' .filter select');
    var elements = [];
    for(var i in filters){
        if(filters[i].value && filters[i].value.length) elements.push(filters[i]);
    }
    if (!this.doFilterCallback || (this.doFilterCallback && this.doFilterCallback())) {
        return this.addVarToUrl(this.filterVar, encode_base64(Form.serializeElements(elements)));
    }
}
// This is the function that the "Export" button calls. Overwrite it and add the ?as_csv queryString
varienGrid.prototype.doExport = function() {
    window.location = this.getFilter() + '?as_csv';
}
.

Хотя это не самое элегантное решение, это многоразовый для кого-либо еще с этой уникальной проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top