Обычно если стоимость создания интернет магазина достаточно высока, заказчики просят сделать импорт товаров из их прайс листов. Им необходимо чтобы была возможность не только добавлять новый товар на сайт, но и обновлять цены и количество на складе уже существующих товаров.
PHP как известно не умеет работать excel-файлами стандартными средствами. Конечно есть множество различных классов, которые могут читать и записывать информацию в excel, но с ними возникает достаточно много проблем (об этом мы напишем в следующих статьях).
Куда проще и удобней работать с csv-файлами.
Для примера сделаем небольшую программку. Она будет обрабатывать csv-файл сотрудников компании OX2.ru.
Создадим новую таблицу в Excel, содержащую следующие поля:
Сохраним таблицу как csv-файл, с разделителем поля «;».
У нас должен получиться такой файл:
"Иванов А.А.";"Программист компании OX2.ru";89255552332 "Сидоров А.Е.";"Дизайне компании OX2.ru";89161231212 "Пирожков А.Б.";"Арт-директор OX2.ru";84951232121 "Кулибин Б.А.";"Менеджер OX2.ru";89031233333
Ниже приведен исходный код с подробным описанием.
Код слелан на ООП с использованием классов, и при небольшой доработки может многократно использоваться в различных приложениях. Если вы не привыкли к программированию на классах, а используете функции или еще что-то, то настоятельно рекомендуем переучиваться ))
Так же в коде используется генерация исключений (Exception), о них читайте в следующих наших статьях.
<?php /** * Класс для работы с csv-файлами * @author дизайн студия ox2.ru */ class CSV { private $_csv_file = null; /** * @param string $csv_file - путь до csv-файла */ public function __construct($csv_file) { if (file_exists($csv_file)) { //Если файл существует $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную } else { //Если файл не найден то вызываем исключение throw new Exception("Файл "$csv_file" не найден"); } } public function setCSV(Array $csv) { //Открываем csv для до-записи, //если указать w, то ифнормация которая была в csv будет затерта $handle = fopen($this->_csv_file, "a"); foreach ($csv as $value) { //Проходим массив //Записываем, 3-ий параметр - разделитель поля fputcsv($handle, explode(";", $value), ";"); } fclose($handle); //Закрываем } /** * Метод для чтения из csv-файла. Возвращает массив с данными из csv * @return array; */ public function getCSV() { $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения $array_line_full = array(); //Массив будет хранить данные из csv //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { $array_line_full[] = $line; //Записываем строчки в массив } fclose($handle); //Закрываем файл return $array_line_full; //Возвращаем прочтенные данные } } try { $csv = new CSV("ox2.csv"); //Открываем наш csv /** * Чтение из CSV (и вывод на экран в красивом виде) */ echo "<h2>CSV до записи:</h2>"; $get_csv = $csv->getCSV(); foreach ($get_csv as $value) { //Проходим по строкам echo "Имя: " . $value[0] . "<br/>"; echo "Должность: " . $value[1] . "<br/>"; echo "Телефон: " . $value[2] . "<br/>"; echo "--------<br/>"; } /** * Запись новой информации в CSV */ $arr = array("Антонов Б.А.;Админ OX2.ru;89031233333", "Колобков В.Б.;Босс OX2.ru;89162233333"); $csv->setCSV($arr); } catch (Exception $e) { //Если csv файл не существует, выводим сообщение echo "Ошибка: " . $e->getMessage(); } ?>
Основную работу с CSV файлами на себя берет класс CSV , Он имеет следующие методы:
setCSV(Array $csv) - записывает данные в csv-файл. Данные должны быть переданы массивом. Метод может дозаписывать csv файл, и создавать новый (читайте в описании).
Метод getCSV читает данные из csv файла, и возвращает двумерный массив следующего вида:
Array ( [0] => Array ( [0] => Иванов А.А. [1] => Программист компании OX2.ru [2] => 89255552332 ) [1] => Array ( [0] => Сидоров А.Е. [1] => Дизайне компании OX2.ru [2] => 89161231212 ) [2] => Array ( [0] => Пирожков А.Б. [1] => Арт-директор OX2.ru [2] => 84951232121 ) [3] => Array ( [0] => Кулибин Б.А. [1] => Менеджер OX2.ru [2] => 89031233333 ) )
Пример достаточно простой, несмотря на то что получилось достаточно много кода.
И дальше с помощью цикла foreach обходим массив, и выводим в красивом виде содержимое csv файла.
Импорт данных из csv файлов будет полезен не только для обновление товаров в интернет-магазинах, но и для подгрузки/обновлении какой-либо информации на обычный сайт.
Например, мы разрабатывали сайт управляющей компании, и им требовалось ежемесячно публиковать информацию по счетчикам горячей и холодной воды. Все данные у них храняться в excel файлах. И тут прекрасно подошел csv формат!
При этом стоимость создания сайта останется не изменой, а функционал и автоматизация сайта будет на уровень выше чем у конкурентов.
Комментарии (Написать комментарий)
Комментарий:
Огроменное спасибо!!
Заполните все поля
Написать комментарий