Экспорт покупателей opencart 1.5.1.3

Для очередного проекта появилась нестандартная просьба — сделать экспорт покупателей в админке opencart в формат csv. Конечно можно было купить соответствующий модуль, но это решение не для программистов) Я предлагаю свое простенькое решение, которое реализуется путем добавления небольшого кода в 2-х файлах.Итак первый файл, который нужно отредактировать это customer_list.tpl находится в папке admin\view\template\sale

Было

      <div class="buttons"><a onclick="$('form').attr('action', '<?php echo $approve; ?>'); $('form').submit();" class="button"><?php echo $button_approve; ?></a><a onclick="location = '<?php echo $insert; ?>'" class="button"><?php echo $button_insert; ?></a><a onclick="$('form').attr('action', '<?php echo $delete; ?>'); $('form').submit();" class="button"><?php echo $button_delete; ?></a></div>

Стало

      <div class="buttons"><a class="button" href="/admin/index.php?route=sale/customer/export&token=<?php echo $this->session->data['token'] ?>">Экспорт покупателей</a><a onclick="$('form').attr('action', '<?php echo $approve; ?>'); $('form').submit();" class="button"><?php echo $button_approve; ?></a><a onclick="location = '<?php echo $insert; ?>'" class="button"><?php echo $button_insert; ?></a><a onclick="$('form').attr('action', '<?php echo $delete; ?>'); $('form').submit();" class="button"><?php echo $button_delete; ?></a></div>

 

Далее добавляем в файл admin\controller\sale\customer.php фуекцию экспорта, я разместил в конце файла перед последним закрытием }

    public function export(){
        $this->load->model('sale/customer');
        $results = $this->model_sale_customer->getCustomers($data);

    	foreach ($results as $result) {

			$this->data['customers'][] = array(
				'customer_id'    => $result['customer_id'],
				'name'           => $result['name'],
				'email'          => $result['email'],
				'customer_group' => $result['customer_group'],
				'status'         => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')),
				'approved'       => ($result['approved'] ? $this->language->get('text_yes') : $this->language->get('text_no')),
				'ip'             => $result['ip'],
				'date_added'     => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
			);
		}

        $output = '';
        $customer_export = 'customer_export_' . (string)(date('Y-m-d-Hi')) . '.csv';

		$tmp = DIR_SYSTEM . 'logs/';
		$uid = uniqid();
		$tmp_dir = $tmp . '/' . $uid . '/';
		$file = $tmp . '/' . $uid.'.csv';

		if (($handle = fopen($file, 'w')) !== FALSE) {

			$ods_title = array(
                '_customer_id_',
                '_name_',
                '_email_',
                '_customer_group_',
                '_status_',
                '_approved_',
                '_ip_',
                '_date_added_'
            );

			fputcsv($handle, $ods_title, ';', '"');

			foreach ($this->data['customers'] as $fields) {

				fputcsv($handle, $fields, ';', '"');
			}
			fclose($handle);
		} else {
			return '';
		}

		if (($output = file_get_contents($file)) !== FALSE ) {
			unlink($file);
		} 

		$this->response->addheader('Pragma: public');
		$this->response->addheader('Connection: Keep-Alive');
		$this->response->addheader('Expires: 0');
		$this->response->addheader('Content-Description: File Transfer');
		$this->response->addheader('Content-Type: application/octet-stream');
		$this->response->addheader('Content-Disposition: attachment; filename='.$customer_export);
		$this->response->addheader('Content-Transfer-Encoding: binary');
		$this->response->addheader('Content-Length: '. strlen($output));
		$this->response->setOutput($output);
        exit($this->response->output());
    }

Поля естественно можно поменять, что-то отключить, что-то добавить, но основной смысл думаю понятен) Теперь при клике на кнопку Экспорт покупателей мы получим список всех покупателей нашего магазина в csv
Этот же способ актуален и для Aceshop, собстевнно для него он и писался 😉

This entry was posted in Aceshop, Opencart and tagged , , . Bookmark the permalink.

10 комментариев: Экспорт покупателей opencart 1.5.1.3

  1. Ярослав:

    1.Файл не создается. Выгружается в окне браузера.
    2. Выкидывает при нажатии на кнопку «экспорт».

    • fonclub:

      Причин может быть куча. Включите отображение ошибок и смотрите в чем проблема.

  2. fox9595:

    С ссылкой еще можно поступить таким образом что бы не выкидывало:
    <a class="button" href="/admin/index.php?route=sale/customer/export&token=session->data[‘token’]; ?>»>Экспорт покупателей

  3. Виталий:

    $results = $this->model_sale_customer->getCustomers($data);

    а откуда у нас бурется переменная $data ?

    • fonclub:

      Ниоткуда) Её можно не писать, эта переменная используется только когда нужно сделать выборку по определённым параметрам. В данном случае она не нужна и ее нет.

      • Виталий:

        $results = $this->model_sale_customer->getCustomers($data);
        $data ….я убрал из-за неё ошибка вылетает

        Так же href=»/admin/index.php?route=sale/customer/export» не катит….так при клике на кнопку нас выкидывает с админки и просит заново авторизоваться….нужно еще токен передавать
        в фалй admin\controller\sale\customer.php в функцию getList()
        добавлена строка
        $this->data[‘export’] = $this->url->link(‘sale/customer/export’, ‘token=’ . $this->session->data[‘token’] . $url, ‘SSL’);

        ну и в теме теперь используется
        href=»» вместо старой ссылки.
        еще была проблема с кодировкой русских символов в csv файле

        • fox9595:

          Есть возможность предоставить код с учетом указанных правок в комментариях?
          Сам я туповат не совсем догоняю как исправить проблему с кодировкой ((((

        • Марианна:

          что и куда прописывать чтобы не выкидывало из админки? И с кодировкой помогите, спс.

          Иначе в чем смысл статьи если в ней половина решения?

          • fonclub:

            Поправил ссылку в статье. Добавил токен &token=session->data[‘token’] ?> . С кодировкой проблемы могут быть если файл сохранили после редактирования не в utf-8

Добавить комментарий для Виталий Отменить ответ

Ваш адрес email не будет опубликован.

*