Заготовки для автоматического заполнения товарами магазина OpenCart 1.5.5.1.2

Вот такие данные отправляются в Модель при создании товара стандартным контроллером:

Array
(
    [product_description] => Array
        (
            [1] => Array
                (
                    [name] => Название товара
                    [seo_h1] => HTML-тег H1
                    [seo_title] => HTML-тег Title
                    [meta_keyword] => 
                    [meta_description] => 
                    [description] => 

Описание html

  • asdsa
  • afsdf
  • asdfs
[tag] => ) [2] => Array ( [name] => Название товара ENG [seo_h1] => [seo_title] => [meta_keyword] => [meta_description] => [description] => [tag] => ) ) [model] => Модель (Обязательное поле) [sku] => [upc] => [ean] => [jan] => [isbn] => [mpn] => [location] => [price] => 5800 [tax_class_id] => 0 [quantity] => 26 [minimum] => 1 [subtract] => 1 [stock_status_id] => 5 [shipping] => 1 [keyword] => here_is_seo_url [image] => data/demo/apple_cinema_30.jpg [date_available] => 2016-02-13 [length] => [width] => [height] => [length_class_id] => 1 [weight] => [weight_class_id] => 1 [status] => 1 [sort_order] => 1 [manufacturer_id] => 9 [main_category_id] => 0 [product_category] => Array ( [0] => 20 [1] => 26 ) [filter] => [product_store] => Array ( [0] => 0 ) [download] => [related] => k [product_related] => Array ( [0] => 40 [1] => 45 ) [product_attribute] => Array ( [0] => Array ( [name] => Clockspeed [attribute_id] => 3 [product_attribute_description] => Array ( [1] => Array ( [text] => быстрая ) [2] => Array ( [text] => fast ) ) ) ) [option] => ra [product_option] => Array ( [0] => Array ( [product_option_id] => [name] => Radio [option_id] => 1 [type] => radio [required] => 1 [product_option_value] => Array ( [0] => Array ( [option_value_id] => 31 [product_option_value_id] => [quantity] => 50 [subtract] => 1 [price_prefix] => + [price] => [points_prefix] => + [points] => [weight_prefix] => + [weight] => ) [1] => Array ( [option_value_id] => 43 [product_option_value_id] => [quantity] => 70 [subtract] => 1 [price_prefix] => + [price] => [points_prefix] => + [points] => [weight_prefix] => + [weight] => ) ) ) ) [product_image] => Array ( [0] => Array ( [image] => data/demo/canon_eos_5d_3.jpg [sort_order] => 1 ) [1] => Array ( [image] => data/demo/hp_2.jpg [sort_order] => 2 ) ) [points] => [product_reward] => Array ( [1] => Array ( [points] => ) ) [product_layout] => Array ( [0] => Array ( [layout_id] => ) ) )

Вот такие данные отправляются в Модель при создании категории стандартным контроллером:

Array
(
    [category_description] => Array
        (
            [1] => Array
                (
                    [name] => Название категории
                    [seo_h1] => 
                    [seo_title] => 
                    [meta_keyword] => 
                    [meta_description] => 
                    [description] => 
                )
            [2] => Array
                (
                    [name] => Название категории ENG
                    [seo_h1] => 
                    [seo_title] => 
                    [meta_keyword] => 
                    [meta_description] => 
                    [description] => 
                )
        )
    [parent_id] => 20
    [filter] => 
    [category_store] => Array
        (
            [0] => 0
        )
    [keyword] => category_url
    [image] => data/demo/htc_logo.jpg
    [top] => 1
    [column] => 1
    [sort_order] => 0
    [status] => 1
    [category_layout] => Array
        (
            [0] => Array
                (
                    [layout_id] => 
                )
        )
)

Вот такие данные отправляются в Модель при создании производителя стандартным контроллером:

Array
(
    [name] => Название производителя
    [manufacturer_store] => Array
        (
            [0] => 0
        )
    [keyword] => manuf_url
    [image] => data/demo/apple_logo.jpg
    [sort_order] => 7
    [manufacturer_description] => Array
        (
            [1] => Array
                (
                    [seo_h1] => Название производителя h1
                    [seo_title] => 
                    [meta_keyword] => 
                    [meta_description] => 
                    [description] => 
                )
            [2] => Array
                (
                    [seo_h1] => Название производителя h1 eng
                    [seo_title] => 
                    [meta_keyword] => 
                    [meta_description] => 
                    [description] => 
                )
        )
)

Пример кода для создания производителя:

// Допустим ранее мы уже получили массив с названиями производителей, подключили модель и перевели бабушки через дорогу.
foreach($manufacturers as $v){
	if(!strlen($v)){continue;} // Ну а вдруг..
	$ta = array(); // ta это типа tempArray
	$ta['name'] = $v;
	$ta['image'] = "";
	$ta['keyword'] = "";
	$ta['sort_order'] = $v;
	$ta['manufacturer_store'] = array(0);
	$description = array(
		'seo_h1' => $v,
		'seo_title' => "",
		'meta_keyword' => "",
		'meta_description' => "",
		'description' => "");
	$ta['manufacturer_description'] = array('1' => $description); //Если у нас языков больше чем 1, то надо будет еще для них добавить
	$this->model_catalog_manufacturer->addManufacturer($ta); 
}

Пример кода для создания товара:

// Допустим ранее мы уже получили массив со всеми данными товара, подключили модель и повесили во дворе скворечник.
foreach ($tovar_raw_data as $k=>$row) {
	if(!strlen($row['name'])){
		continue;
	}
	$ta = array();
	
	$product_description = array(
		'name' => $row['name'],
		'seo_h1' => '',
		'seo_title' => '',
		'meta_keyword' => '',
		'meta_description' => '',
		'description' => $row['description_text'],
		'tag' => ''
	);
	$ta['product_description'] = Array(1 => $product_description);
	$ta['model'] = $row['art'];
	$ta['sku'] = '';
	$ta['upc'] = $row['id'];
	$ta['ean'] = "";
	$ta['jan'] = "";
	$ta['isbn'] = '';
	$ta['mpn'] = '';
	$ta['stock_status_id'] = 5;
	$ta['location'] = '';
	$ta['price'] = 0;
	$ta['date_available'] = date("Y-m-d");
	$ta['tax_class_id'] = '';
	$ta['quantity'] = $row['ostatki'];
	$ta['minimum'] = 1;
	$ta['subtract'] = 1;
	$ta['shipping'] = 1;
	$ta['keyword'] = '';
	if(strlen($row['image']) > 5){
		$ta['image'] = $this->uploadImageCTGO($row['image']); // Этот метод описан в резделе "Полезные функции (методы)"
	}else{
		$ta['image'] = "";
	}
	$ta['length'] = '';
	$ta['width'] = '';
	$ta['height'] = '';
	$ta['length_class_id'] = 1;
	$ta['weight'] = '1';
	$ta['weight_class_id'] = 1;
	$ta['status'] = 1;
	$ta['sort_order'] = 1;
	$ta['manufacturer_id'] = $this->getManufacturerIdByName($row['tm']); // Этот метод описан в резделе "Полезные функции (методы)"
	$ta['main_category_id'] = $this->getCateroryIdByName($row['vid']); // Этот метод описан в резделе "Полезные функции (методы)"
	$ta['product_store'] = array(0);
	$ta['related'] = '';
	$ta['option'] = '';
	$ta['points'] = '';
	$ta['product_reward'] = array(1=>array('points'=>0));
	$ta['product_layout'] = array(1=>array('layout_id'=>0));

	$this->model_catalog_product->addProduct($ta);
	//break;
}

Полезные функции (методы), которые встречаются в примерах:

Перевод через Яндекс.Переводчик API. Ксати, вот еще Пример перевода с помощью Yandex Translate API.

public $translated = array(); // К счастью Яндекс ограничивает бесплатный доступ, поэтому оптимизируем код чтобы не делать лишних запросов
public function yTranslate($string){
	$cache_key = md5($string);
	if(array_key_exists($cache_key, $this->translated)){
		return $this->translated[$cache_key];
	}
	$yKey = "--ВАШ КЛЮЧ API--";
	
	$YT_link = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=".$yKey."&text=%s&lang=ru-en";
	$ytranslate = json_decode(file_get_contents(sprintf($YT_link, $string)), true);
	if($ytranslate['code'] == 200){
		$this->translated[$cache_key] = $ytranslate['text'][0];
		return $ytranslate['text'][0];
	}else{
		return $string;
	}
}

Получить ID производителя по его имени

public function getManufacturerIdByName($name){
	$result = $this->db->query("SELECT manufacturer_id FROM oc_manufacturer WHERE name = '".trim($name)."' LIMIT 1");
	if($result->num_rows){
		$manufacturer_id = $result->row['manufacturer_id'];
	}else{
		$manufacturer_id = 0;
	}
	return $manufacturer_id;
}

Получить ID категории по ее имени

public function getCateroryIdByName($name){
	$result = $this->db->query("SELECT category_id FROM oc_category_description WHERE name = '".trim($name)."' ORDER BY language_id LIMIT 1");
	if($result->num_rows){
		$category_id = $result->row['category_id'];
	}else{
		$category_id = 0;
	}
	return $category_id;
}

Загрузка картинок

public function uploadImageCTGO($image_addr){
	$servdir = $_SERVER['DOCUMENT_ROOT'];
	$hashName = md5($image_addr);
	$pathinfo = pathinfo($image_addr);
	$dir = "/image/data/parce_img/";
	if(!empty($pathinfo['extension'])){
		$new_filename = $dir.$hashName.".".$pathinfo['extension'];
		if(!file_exists($servdir.$new_filename)){
			if(!file_exists($servdir.$dir)){
				mkdir($servdir.$dir, 0755);
			}
			try{
				$content = file_get_contents($image_addr);
			}catch(Exception $e){
				$content = false;
			}
			if($content){
				$fp = fopen($servdir.$new_filename, "w");
				fwrite($fp, $content);
				fclose($fp);
				return substr($new_filename, strlen("/image/"));
			}
		}else{
			return substr($new_filename, strlen("/image/"));
		}
	}
}

Транслитизация URL

	public function rus2translit($string) {
		$converter = array(
			'а' => 'a',   'б' => 'b',   'в' => 'v',
			'г' => 'g',   'д' => 'd',   'е' => 'e',
			'ё' => 'e',   'ж' => 'zh',  'з' => 'z',
			'и' => 'i',   'й' => 'y',   'к' => 'k',
			'л' => 'l',   'м' => 'm',   'н' => 'n',
			'о' => 'o',   'п' => 'p',   'р' => 'r',
			'с' => 's',   'т' => 't',   'у' => 'u',
			'ф' => 'f',   'х' => 'h',   'ц' => 'c',
			'ч' => 'ch',  'ш' => 'sh',  'щ' => 'sch',
			'ь' => '\'',  'ы' => 'y',   'ъ' => '\'',
			'э' => 'e',   'ю' => 'yu',  'я' => 'ya',
			
			'А' => 'A',   'Б' => 'B',   'В' => 'V',
			'Г' => 'G',   'Д' => 'D',   'Е' => 'E',
			'Ё' => 'E',   'Ж' => 'Zh',  'З' => 'Z',
			'И' => 'I',   'Й' => 'Y',   'К' => 'K',
			'Л' => 'L',   'М' => 'M',   'Н' => 'N',
			'О' => 'O',   'П' => 'P',   'Р' => 'R',
			'С' => 'S',   'Т' => 'T',   'У' => 'U',
			'Ф' => 'F',   'Х' => 'H',   'Ц' => 'C',
			'Ч' => 'Ch',  'Ш' => 'Sh',  'Щ' => 'Sch',
			'Ь' => '\'',  'Ы' => 'Y',   'Ъ' => '\'',
			'Э' => 'E',   'Ю' => 'Yu',  'Я' => 'Ya',
		);
		return strtr($string, $converter);
	}
	public function str2url($str) {
		$str = $this->rus2translit($str);
		$str = strtolower($str);
		$str = preg_replace('~[^-a-z0-9_]+~u', '-', $str);
		$str = trim($str, "-");
		return $str;
	}
	

Приемы при разборе файлов:

// Пример загрузки файла
$servdir = $_SERVER['DOCUMENT_ROOT'];
$fileFROMxml = "/image/StarKids.xml";
$fileFROMcsv = "/image/tovar.csv";
$dataFROMxml_raw = json_decode(json_encode(simplexml_load_string(file_get_contents($servdir.$fileFROMxml))), true); // XML в массив
$dataFROMcsv_raw = explode("|||||",file_get_contents($servdir.$fileFROMcsv)); // CSV в массив

Вот такие данные отправляются в Модель (помимо id опции) при обновлении опции стандартным контроллером:

Array
(
    [option_description] => Array
        (
            [1] => Array
                (
                    [name] => Размер
                )
        )
    [type] => select
    [sort_order] => 0
    [option_value] => Array
        (
            [0] => Array
                (
                    [option_value_id] => 81
                    [option_value_description] => Array
                        (
                            [1] => Array
                                (
                                    [name] => 7
                                )
                        )
                    [image] => no_image.jpg
                    [sort_order] => 7
                )
            [1] => Array
                (
                    [option_value_id] => 74
                    [option_value_description] => Array
                        (
                            [1] => Array
                                (
                                    [name] => 11
                                )
                        )
                    [image] => no_image.jpg
                    [sort_order] => 15
                )
            [2] => Array
                (
                    [option_value_id] => 73
                    [option_value_description] => Array
                        (
                            [1] => Array
                                (
                                    [name] => 10.5
                                )
                        )
                    [image] => no_image.jpg
                    [sort_order] => 14
                )
        )
)

Создать опцию

// Формируем массив
$option_data = array(
"option_description" => array(
	1 => array("name" => "Размер")
),
"type" => "select",
"sort_order" => 1,
"option_value" => array(),
);

// Получаем данные каким-то образом
$query = "SELECT DISTINCT size FROM catalog_1c_codes ORDER BY size";
$opt_data = $this->db->query($query);

foreach($opt_data->rows as $row){
	$option_data['option_value'][] = array(
			"option_value_description" => array(
				1 => array(
					"name" => $row['size']
				),
				3 => array(
					"name" => $row['size']
				)
			),
			"image" => "no_image.jpg",
			"sort_order" => 0
		);
}

// Подключаем модель и используем ее по назначению
$this->load->model('catalog/option');
$OPTION_ID = 14;
$this->model_catalog_option->editOption($OPTION_ID, $option_data);

Вот такие данные отправляются в Модель ($this->model_sale_customer->addCustomer($this->request->post);) при создании покупателя стандартным контроллером (admin/index.php?route=sale/customer/insert):

Array
(
    [firstname] => Имя, отчество
    [lastname] => Фамиллия
    [email] => email@mail.ru
    [telephone] => телефон
    [fax] => Факс
    [password] => пароль
    [confirm] => пароль
    [newsletter] => 0
    [customer_group_id] => 1
    [status] => 1
    [address] => Array
        (
            [1] => Array
                (
                    [address_id] => 
                    [firstname] => Имя
                    [lastname] => Фамиллия
                    [company] => Компания
                    [company_id] => Регномер компании
                    [tax_id] => инн
                    [address_1] => Адрес
                    [address_2] => Адрес (продолжение):
                    [city] => Город
                    [postcode] => Индекс
                    [country_id] => 10000 //Страна (Россия)
                    [zone_id] => 1028     //Регион
                    [default] => 1
                )
        )
)
/*------------*/
if(isset($data['ctgo'])){
$this->db->query("UPDATE oc_customer SET ip = '".$this->db->escape($data['ip'])."', date_added = '".$this->db->escape($data['date_added'])."' WHERE customer_id = '".$customer_id."'");
return $customer_id;
}

Структура таблицы oc_order_option

  • order_option_idАвтоИнкремент
  • order_idID Заказа (для связи с таблицей oc_order)
  • order_product_idID продукта (для связи с таблицей oc_order_product)
  • product_option_idдля связи с таблицей oc_product_option_value по столбцу product_option_id
  • product_option_value_idдля связи с таблицей oc_product_option_value по столбцу product_option_value_id
  • nameНазвание опции
  • valueЗначение опции
  • typeТип опции

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Пример перевода с помощью Yandex Translate API

Вывести на главную все категории с картинками

Вернуть английский язык, если вы его удалили

Универсальная форма обратной связи — feedBackForm

Вывести модуль напрямую через контроллер

Как поменять версию PHP, используемую в командной строке на Windows

Как контролировать кэш CSS и скриптов

Как поменять язык в Faker

Транслитерация URL в Laravel. Примеры str_slug()

Простое логирование

Что делать если не работает пагинация

Курсы валют с cbr.ru на PHP

Разные фишки, заготовки

Laravel Excel - Базовый экспорт

Получить вложенный массив из плоского

Namespace на примерах - Как понять пространства имен в PHP

Заготовки для автоматического заполнения товарами магазина 1.5.5.1.2

Как сделать middleware в Laravel 6 - простой пример

Как обработать POST данные в PHP

Примеры работы с API

Показывать в категориях

Загрузить файл для постобработки

Получить время выполнения PHP скрипта. Решение в 3 строки кода

Получить курсы валют с cbr.ru на PHP с кэшированием результатов

Экспорт маршрутов из Laravel в JSON файл

Массово изменить адреса картинок у товаров

Фиксированная сортировка массива на основе хэша

Вывести список всех файлов на сервере (и размер файла)

Наш сайт использует куки, нажмите «ОК» если вы не против
OK