Задача №1
Есть магазин на opencart, есть модуль оформления заказа Simple.
Проблема в том что у модуля при оформлении заказа используются свои переменные name для таких полей как e-mail фамилия имя телефон адрес в итоге на странице оформления заказа в бразуере у покупателя не работает автозаполнение данных полей.
В новой версии автор все переделал. Но у меня версия 2х летней давности заточенная за это под свои нужны и менять теперь ради этого момента желания нет.
Я связался с разработчиком он сказал, что да мол нужно переписать весь модуль, у него тариф высокий ввиду того что уровень разработки и занятости у него высокий.
По этому и решил поискать исполнителя на фрилансе.
Вариантов исполнения вижу три:
- переписать названия переменных - нужно банально переименовать их , но боюсь это не сработает по ответу автора предполагаю что там более серьезная организация и просто переименовать не получится.
- второй вариант исполнения переписать логику заменив их на нужные переменные
- организовать подмену непосредственно на странице оформления заказа на яваскрипте или php т.е. выводить поля с правильным name, а перехватывать и записывать в name модуля, незнаю насколько это реализуемо и правильный ли подход на перспективу.
Задача № 2
Изначально было решение http://fonclub-blog.ru/eksport-pokupateley-opencar...
Выгрузка контактов покупателей были внесены незначительные правки в решение и теперь выгрузка идет не пользователей с данными, а заказов далее эти контакты вручную импортируются в goolge контакты.
public function export(){
$this->load->model('sale/order');
$results = $this->model_sale_order->getOrders();
foreach ($results as $result) {
$this->data['orders'][] = array(
'plus' => +,
'customer' => $result['customer'],
'telephone' => $result['telephone'],
'order_id' => $result['order_id'],
);
}
$output = '';
$order_export = 'contact' . (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(
'Plus',
'FamilyName',
'Phone 1 - Value',
'Website 1 - Value',
);
fputcsv($handle, $ods_title, ';', '"');
foreach ($this->data['orders'] 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='.$order_export);
$this->response->addheader('Content-Transfer-Encoding: binary');
$this->response->addheader('Content-Length: '. strlen($output));
$this->response->setOutput($output);
exit($this->response->output());
}
}
Но есть одно неудобство выгружаются все заказы, и если грузить их все вновь в контакты в google будут дубли. Их конечно можно убрать нажатием поиск и объединение дублей, но все же это не удобно. А можно перед импортом файл подредактировать конечно. Но это также не удобно.
Хочется чтобы по нажатию кнопки выгружались только заказы которые не выгружались до этого. При этом файл грузился не на сервер, а также в скачивание.
Вижу два решения:
- сложное где то как то хранить последнюю данные последней выгрузки. чтобы была возможность в mysql запросе указать с какого заказа начинать выгрузку.
- более простое это условно говоря поле куда вводится номер последнего текущего заказа в магазине (к примеру заказ 100) нажимается кнопка скачать выгрузились заказы по этот номер, значение (100 сохранилось), в следующий раз вводим новый номер последнего заказа (к примеру 125) и вызывается предыдущее сохраненное поле и делать запрос mysql выгружать с такого то по такой то.. но решение честно говоря тоже не очень впечатляет.
Вообще если есть возможность как то автоматизировать процесс загрузки в google контакты ну не знаю через api по крону как то это делать такое решение вообще отличное понятно что не будет дешевым, но можно обсудить