Был у меня один проект на Shop-Script, мне скажем мягко не зашел этот движок, по многим причинам. Решил переносить товары из Webasyst в Prestashop, готового модуля для нормального экспорта товаров я не нашел, поэтому решил написать свой. Так как не сильно захотелось разбираться с созданием модулей для Webasyst, решил сделать это в виде отдельного скрипта. Первым делом, я пошел в PhpMyAdmin и стал сочинять запрос для экспорта товаров, вот что у меня получилось:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
SELECT p.`id`, p.`status`, p.`name`, c.`name` AS `cat_name`, p.`price`, p.`min_price`, p.`summary`, p.`description`, p.`meta_title`, p.`meta_keywords`, p.`meta_description`, p.`url`, IF( sf.`name` IS NOT NULL, GROUP_CONCAT( DISTINCT( CONCAT( (sf.`name`), ':', (CASE WHEN sf.`type` = 'color' THEN( SELECT `value` FROM `shop_feature_values_color` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'varchar' THEN( SELECT `value` FROM `shop_feature_values_varchar` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'double' THEN( SELECT CONCAT(`value`, ':', `sort`) FROM `shop_feature_values_double` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'boolean' THEN '+' END ) ) ) SEPARATOR ',' ), '' ) AS `feature(name:value)`, IF( pm.`product_id` IS NOT NULL, GROUP_CONCAT( DISTINCT( CONCAT( '/wa-data/protected/shop/products/', MID(CONCAT('000', p.`id`), -2, 2), '/', MID(CONCAT('000', p.`id`), -4, 2), '/', pm.`product_id`, '/images/', pm.`id`, '.', pm.`original_filename` ) ) ORDER BY p.`id` ASC SEPARATOR ',' ), '' ) AS url_image FROM `shop_product` p LEFT JOIN `shop_product_images` pm ON (pm.`product_id` = p.`id`) LEFT JOIN `shop_category` c ON (c.`id` = p.`category_id`) LEFT JOIN `shop_product_features` pf ON (pf.`product_id` = p.`id`) LEFT JOIN `shop_feature` sf ON (sf.`id` = pf.`feature_id`) GROUP BY p.`id` |
Этим запросом вытащил все данные, которые мне были нужны, обратите внимание, что здесь нет артикула, т.к мой Shop-Script был немного модифицирован.
А дальше создадим каталог csvexport в корне нашего сайта и добавим файл product.php со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
<?php $server = rtrim($_SERVER['HTTP_HOST'], '/'); if ((isset($_SERVER['REQUEST_SCHEME']) and $_SERVER['REQUEST_SCHEME'] === 'https') or (isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] === 'on')) { $protocol = 'https://'; } else { $protocol = 'http://'; } /* Подключение к базе данных MySQL с помощью вызова PDO драйвера (не забудьте изменить настройки подключения, на свои)*/ $dsn = 'mysql:dbname=Имя Базы;host=localhost'; $user = 'mysql'; $password = 'mysql'; try { $dbh = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch (PDOException $e) { echo 'Подключение не удалось: ' . $e->getMessage(); } class CSV { private $_csv_file = null; /** * @param string $csv_file - путь до csv-файла */ public function __construct($csv_dir, $csv_file) { $csv_file = $csv_dir . $csv_file; $this->_csv_file = $csv_file; $fp = fopen($csv_file, "w"); //Очищаем файл fclose($fp); //Закрываем файл } public function setCSV(array $csv) { $fp = fopen($this->_csv_file, "a"); //Открываем csv для до-записи fputs($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); //BOM foreach ($csv as $value) { //Проходим массив fputcsv($fp, $value, ';'); //Записываем, 3-ий параметр - разделитель поля } fclose($fp); //Закрываем } } $csv_dir = '../csvexport'; $csv_dir = $csv_dir . '/'; $csv = new CSV($csv_dir, 'productexport.csv'); $sth = $dbh->prepare(" SELECT p.`id`, p.`status`, p.`name`, c.`name` AS `cat_name`, p.`price`, p.`min_price`, p.`summary`, p.`description`, p.`meta_title`, p.`meta_keywords`, p.`meta_description`, p.`url`, IF( sf.`name` IS NOT NULL, GROUP_CONCAT( DISTINCT( CONCAT( (sf.`name`), ':', (CASE WHEN sf.`type` = 'color' THEN( SELECT `value` FROM `shop_feature_values_color` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'varchar' THEN( SELECT `value` FROM `shop_feature_values_varchar` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'double' THEN( SELECT `value` FROM `shop_feature_values_double` WHERE pf.`feature_value_id` = `id` ) WHEN sf.`type` = 'boolean' THEN '+' END ) ) ) SEPARATOR ',' ), '' ) AS `feature(name:value)`, IF( pm.`product_id` IS NOT NULL, GROUP_CONCAT( DISTINCT( CONCAT( '". $_SERVER['DOCUMENT_ROOT'] ."/wa-data/protected/shop/products/', MID(CONCAT('000', p.`id`), -2, 2), '/', MID(CONCAT('000', p.`id`), -4, 2), '/', pm.`product_id`, '/images/', pm.`id`, '.', pm.`original_filename` ) ) ORDER BY p.`id` ASC SEPARATOR ',' ), '' ) AS url_image FROM `shop_product` p LEFT JOIN `shop_product_images` pm ON (pm.`product_id` = p.`id`) LEFT JOIN `shop_category` c ON (c.`id` = p.`category_id`) LEFT JOIN `shop_product_features` pf ON (pf.`product_id` = p.`id`) LEFT JOIN `shop_feature` sf ON (sf.`id` = pf.`feature_id`) GROUP BY p.`id` "); $sth->execute(); $product = $sth->fetchAll(PDO::FETCH_ASSOC); $csv->setCSV($product); |
Надеюсь эта статья поможет кому-то в таком деле, как экспорт данных из Webasyst Shop-Script Premium.
Будьте внимательны, при выборе CMS-движка для своего магазина).
почему решили уйти в websys/
бесплатно ? если есть бюджет 60-100 вы бы так же ушли?
Не совсем понял вопроса — я и ушел из Webasyst на Prestashop. Prestashop мне нравиться, шопскрипт -нет. Преста лучше — удобнее и быстрее, все как то по уму сделано. Но это мое личное мнение и каждому свое.