Models_Product

Описание

Модель: Product


Класс Models_Product реализует логику взаимодействия с товарами магазина.
- Добавляет товар в базу данных;
- Изменяет данные о товаре;
- Удаляет товар из базы данных;
- Получает информацию о запрашиваемом товаре;
- Получает продукт по его URL;
- Получает цену запрашиваемого товара по его id.

Методы со знаком * содержат хуки

Методы класса

int|bool addProduct() * Добавляет товар в базу данных.
$array = array(
    
'title' => 'title', // название товара
    
'url' => 'link', // последняя часть ссылки на товар
    
'code' => 'CN230', // артикул товара
    
'price' => 100, // цена товара
    
'old_price' => 200, // старая цена товара
    
'image_url' => 1434653074061713.jpg, // последняя часть ссылки на изображение товара
    
'image_title' => '', // title изображения товара
    
'image_alt' => '', // alt изображения товара
    
'count' => 77, // остаток товара
    
'weight' => 5, // вес товара
    
'cat_id' => 4, // ID основной категории товара
    
'inside_cat' => '1,2', // дополнительные категории товаров
    
'description' => 'descr', // описание товара
    
'short_description' => 'short descr', // краткое описание товара
    
'meta_title' => 'title', // seo название товара
    
'meta_keywords' => 'title купить, CN230, title', // seo ключевые слова
    
'meta_desc' => 'meta descr', // seo описание товара
    
'currency_iso' => 'RUR', // код валюты товара
    
'recommend' => 0, // выводить товар в блоке рекомендуемых
    
'activity' => 1, // выводить товар
    
'unit' => 'шт.', // единица измерения товара (если null, то используется единица измерения основной категории товара)
    
'new' => 0, // выводить товар в блоке новинок
    
'userProperty' => Array, // массив с характеристиками товара
    
'related' => 'В-500-1', // артикулы связанных товаров
    
'variants' => Array, // массив с вариантами товаров
    
'related_cat' => null, // ID связанных категорий
    
'lang' => 'default', // язык для сохранения
    
'landingTemplate' => 'noLandingTemplate', // шаблон для лэндинга товара
    
'ytp' => '', // строка с торговым предложением для лэндинга
    
'landingImage' => 'no-img.jpg', // изображение для лэндинга
    
'storage' => 'all' // склад товара
);
$model = new Models_Product();
$id = $model->addProduct($product);
echo 
$id;
bool updateProduct() * Изменяет данные о товаре.
$array = array(
    
'id' => 23, // ID товара
    
'title' => 'title', // название товара
    
'url' => 'link', // последняя часть ссылки на товар
    
'code' => 'CN230', // артикул товара
    
'price' => 100, // цена товара
    
'old_price' => 200, // старая цена товара
    
'image_url' => 1434653074061713.jpg, // последняя часть ссылки на изображение товара
    
'image_title' => '', // title изображения товара
    
'image_alt' => '', // alt изображения товара
    
'count' => 77, // остаток товара
    
'weight' => 5, // вес товара
    
'cat_id' => 4, // ID основной категории товара
    
'inside_cat' => '1,2', // дополнительные категории товаров
    
'description' => 'descr', // описание товара
    
'short_description' => 'short descr', // краткое описание товара
    
'meta_title' => 'title', // seo название товара
    
'meta_keywords' => 'title купить, CN230, title', // seo ключевые слова
    
'meta_desc' => 'meta descr', // seo описание товара
    
'currency_iso' => 'RUR', // код валюты товара
    
'recommend' => 0, // выводить товар в блоке рекомендуемых
    
'activity' => 1, // выводить товар
    
'unit' => 'шт.', // единица измерения товара (если null, то используется единица измерения основной категории товара)
    
'new' => 0, // выводить товар в блоке новинок
    
'userProperty' => Array, // массив с характеристиками товара
    
'related' => 'В-500-1', // артикулы связанных товаров
    
'variants' => Array, // массив с вариантами товаров
    
'related_cat' => null, // ID связанных категорий
    
'lang' => 'default', // язык для сохранения
    
'landingTemplate' => 'noLandingTemplate', // шаблон для лэндинга товара
    
'ytp' => '', // строка с торговым предложением для лэндинга
    
'landingImage' => 'no-img.jpg', // изображение для лэндинга
    
'storage' => 'all' // склад товара
);
$model = new Models_Product();
$model->updateProduct($array);
bool fastUpdateProductVariant() Обновляет поле в варианте и синхронизирует привязку первого варианта с продуктом.
$array = array(
    
'price' => 200, // цена
    
'count' => 50 // количество
);
$model = new Models_Product();
$model->fastUpdateProductVariant(5, $array, 2);
bool importUpdateProductVariant() Аналогичная fastUpdateProductVariant функция, но с поправками для
процесса импорта вариантов.
$model = new Models_Product();
$model->importUpdateProductVariant(5, $array, 2);
bool fastUpdateProduct() * Обновление заданного поля продукта.
$array = array(
    
'price' => 200, // цена
    
'sort' => 5, // номер сортировки
    
'count' => 50 // количество
);
$model = new Models_Product();
$model->fastUpdateProduct(5, $array);
bool saveVariants() Сохраняет варианты товара.
$variants = Array(
    
0 => Array(
        
'color' => 19, // id цвета варианта
        
'size' => 11, // id размера варианта
        
'title_variant' => '22 Голубой', // название
        
'code' => 'SKU241', // артикул
        
'price' => 2599, // цена
        
'old_price' => 3000, // старая цена
        
'weight' => 1, // вес
        
'count' => 50, // количество
        
'activity' => 1, // активность
        
'id' => 1249, // id варианта
        
'currency_iso' => 'RUR', // код валюты
        
'image' => '13140250299.jpg' // название картинки варианта
    
)
);
$model = new Models_Product();
$model->saveVariants($variants, 51);
array cloneProduct() * Клонирует товар.
$productId = 25;
$model = new Models_Product;
$model->cloneProduct($productId);
bool cloneImagesProduct() Клонирует изображения продукта.
$imagesArray = array(
    
'40Untitled-1.jpg',
    
'41Untitled-1.jpg',
    
'42Untitled-1.jpg'
);
$oldId = 40;
$newId = 130;
$model = new Models_Product;
$model->deleteProduct($imagesArray, $oldId, $newId);
bool deleteProduct() * Удаляет товар, его свойства, варианты, локализации, оптовые цены из базы данных.
$productId = 25;
$model = new Models_Product;
$model->deleteProduct($productId);
void deleteImagesFolder() Удаляет папки из структуры папок изображений относящиеся к заданному продукту.
$productId = 25;
$model = new Models_Product;
$model->deleteImagesFolder($productId);
void deleteImagesProduct() Удаляет все картинки привязанные к продукту.
$array = array(
    
'product/100/105/120.jpg',
    
'product/100/105/122.jpg',
    
'product/100/105/121.jpg'
);
$model = new Models_Product();
$model->deleteImagesProduct($array);
array getProductByUserFilter() Получает информацию о запрашиваемом товаре.
$where = '`cat_id` IN (5,6)';
$model = new Models_Product;
$result = $model->deleteImagesFolder($where);
viewData($result);
array getProduct() * Получает информацию о запрашиваемом товаре по его ID.
$productId = 25;
$model = new Models_Product;
$product = $model->getProduct($productId);
viewData($product);
array imagesConctruction() * Создает массивы данных для картинок товара, возвращает три массива со ссылками, заголовками и альт, текстами.
$model = new Models_Product();
$imageUrl = '120.jpg|121.jpg';
$imageTitle = 'Каритинка товара';
$imageAlt = 'Альтернативная подпись картинки';
$res = $model->imagesConctruction($imageUrl, $imageTitle, $imageAlt);
viewData($res);
void increaseCountProduct() Обновляет остатки продукта, увеличивая их на заданное количество.
Models_Product::increaseCountProduct(37, 'SKU348', 2);
void decreaseCountProduct() Обновляет остатки продукта, уменьшая их количество,
при смене статуса заказа с "отменен" на любой другой.
Models_Product::decreaseCountProduct(37, 'SKU348', 2);
int getProductsCount() Возвращает общее количество продуктов каталога.
$result = Models_Product::getProductsCount();
viewData($result);
array getProductByUrl() * Получает продукт по его URL.
$url = 'nike-air-versitile_102';
$result = Models_Product::getProductByUrl($url);
viewData($result);
bool|float getProductPrice() Получает цену запрашиваемого товара по его id.
$result = Models_Product::getProductPrice(5);
viewData($result);
string createPropertyForm() * Создает форму пользовательских характеристик для товара.
В качестве входящего параметра получает массив:
$param = array(
    
'id' => null, // id товара.
    
'maxCount' => null, // максимальное количество товара на складе.
    
'productUserFields' => null, // массив пользовательских полей для данного продукта.
    
'action' => "/catalog", // ссылка для метода формы.
    
'method' => "POST", // тип отправки данных на сервер.
    
'ajax' => true, // использовать ajax для пересчета стоимости товаров.
    
'blockedProp' => array(), // массив из ID свойств, которые не нужно выводить в форме.
    
'noneAmount' => false, // не выводить  input для количества.
    
'titleBtn' => "В корзину", // название кнопки.
    
'blockVariants' => '', // блок вариантов.
    
'classForButton' => 'addToCart buy-product buy', // классы для кнопки.
    
'noneButton' => false, // не выводить кнопку отправки.
    
'addHtml' => '' // добавить HTML в содержимое формы.
    
'currency_iso' => '', // обозначение валюты в которой сохранен товар
    
'printStrProp' => 'true', // выводить строковые характеристики
    
'printCompareButton' => 'true', // выводить кнопку сравнения
    
'buyButton' => 'true', // показывать кнопку 'купить' в миникарточках (если false - показывается кнопка 'подробнее')
    
'productData' => 'Array', // массив с данными о товаре
    
'showCount' => 'true' // показывать блок с количеством
);
$model = new Models_Product;
$result = $model->getProduct($param);
echo 
$result;
string|array getBlockVariants() Формирует блок вариантов товара.
$model = new Models_Product;
$result = $model->getBlockVariants(5);
echo 
$result;
string|array getBlocksVariantsToCatalog() Формирует массив блоков вариантов товаров на странице каталога.
Метод создан для сокращения количества запросов к БД.
$model = new Models_Product;
$result = $model->getBlocksVariantsToCatalog(array(2,3,4));
echo 
$result;
string addMarginToProp() Формирует добавочную строку к названию характеристики,
в зависимости от наличия наценки и стоимости.
$model = new Models_Product;
$result = $model->addMarginToProp(250);
echo 
$result;
array parseMarginToProp() Отделяет название характеристики от цены название_пункта#стоимость#.
Пример входящей строки: "Красный#300#"
$model = new Models_Product;
$result = $model->parseMarginToProp('Красный#300#');
echo 
$result;
void calcPrice() Обновление состояния корзины.
Используеться для пересчета корзины и обновления цены в карточке товара ajax'ом
$model = new Models_Product;
$model->calcPrice();
void getVariantImages() Возвращает оригинал и все варианты миниатюр изображений варианта
Используется Ajax'ом при изменении варианта в карточке и миникарточке товара
array getVariants() * Возвращает набор вариантов товара.
$productId = 25;
$model = new Models_Product;
$variants = $model->getVariants($productId);
viewData($variants);
array noPrintProperty() Возвращает массив id характеристик товара, которые не нужно выводить в карточке.
$result = Models_Product::noPrintProperty($productId);
viewData($result);
string createRelatedForm() * Возвращает HTML блок связанных товаров.
$args = array(
    
'product' => 'CN182,В-500-1', // артикулы связанных товаров
    
'category' => '2,4' // ID связанных категорий
);
$model = new Models_Product;
$result = $model->createRelatedForm($args);
echo 
$result;
void convertToIso() Конвертирование стоимости товаров по заданному курсу.
$model = new Models_Product;
$model->convertToIso('USD', array(2, 3, 4));
void updatePriceCourse() Обновления цены товаров в соответствии с курсом валюты.
$model = new Models_Product;
$model->updatePriceCourse('USD', array(2, 3, 4));
bool deleteImagesVariant() Удаляет картинки вариантов товара.
$model = new Models_Product;
$model->deleteImagesVariant(4);
array prepareImageName() Подготавливает названия изображений товара.
$model = new Models_Product;
$res = $model->prepareImageName($product);
viewData($res);
void setZeroStock() Обнуляет остатки товара и всех его вариантов по всем складам.

$productId = 1;
$model = new Models_Product;
$model->setZeroStock($productId);

void movingProductImage() Копирует изображения товара в новую структуру хранения.
array recalculateStoragesAll() Пересчитывает все остатки по складам по всем товарам и вариантам. Записывает количество в таблицу товаров для оптимизации запросов.
bool recalculateStoragesById() Пересчитывает все остатки по складам для конкретного товара и всех его вариантов. Записывает количество в таблицу товаров для оптимизации запросов.
bool recalculateStorages() Пересчитывает все остатки по складам для всех переданных товаров и их вариантов. Записывает количество в таблицу товаров для оптимизации запросов.
int getProductsTotalCount() Возвращает общее количество всех остатков всех товаров и вариантов по всем складам.

$model = new Models_Product;
$allStocksCount = $model->getProductsTotalCount();

int getProductIdByExternalId() Возвращает идентификатор товара по его внешнему идентификатору (1c_id).

$externalProductId = 'some1cid';
$model = new Models_Product;
$productId = $model->getProductIdByExternalId($externalProductId);

bool updateStorageCount() Устанавливает количество товара или его варианта на конкретном складе. Метод обновляет текущую запись о количестве, если она имеется или добавляет новую.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$updateCountResult = $model->updateStorageCount($productId, $storageId, $newCount, $variantId);

bool setNewStorageCount() Устанавливает количество товара или его варианта на конкретном складе. Метод удаляет все существующие записи для переданного товара, варианта и склада, а затем добавляет новую.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$setNewCountResult = $model->setNewStorageCount($productId, $storageId, $newCount, $variantId);

bool deleteStorageRecordsAll() Метод удаляет все записи о количестве переданного товара и всех его вариантов на переданном складе.

$model = new Models_Product;

$productId = 17;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteAllRecordsResult = $model->deleteStorageRecordsAll($productId, $storageId);

bool deleteStorageRecordsProductOnly() Метод удаляет все записи о количестве переданного товара без учёта его вариантов на переданном складе.

$model = new Models_Product;

$productId = 17;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteProductRecordsOnlyResult = $model->deleteStorageRecordsProductOnly($productId, $storageId);

bool deleteStorageRecordsVariantOnly() Метод удаляет все записи о количестве переданного варианта переданного товара на переданном складе.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteVariantsRecordsOnlyResult = $model->deleteStorageRecordsVariantOnly($productId, $variantId, $storageId);

bool deleteStorageRecordsAllVariants() Метод удаляет все записи о количестве переданного варианта переданного товара на переданном складе.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteVariantRecordsOnlyResult = $model->deleteStorageRecordsVariantOnly($productId, $variantId, $storageId);

bool addStorageRecord() Добавляет новую запись о количестве товара/варианта в таблицу остатков по складам.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$createNewCountRecordResult = $model->addStorageRecord($productId, $storageId, $newCount, $variantId);

bool clearStoragesTable() Полностью очищает таблицу остатков товаров и вариантов по складам (TRUNCATE).

$model = new Models_Product;
$clearStocksTableResult = $model->clearStoragesTable();

bool destroyStorageStocks() Удаляет все записи о количестве товаров и вариантах на определенном складе.

$outdatedStorageId = 'th330305562b6b754a754707361933eo';

$model = new Models_Product;
$clearStocksTableResult = $model->destroyStorageStocks($outdatedStorageId);

int getProductStorageCount() Возвращает количество товара/варианта на определенном складе.

$storageId = 'th330305562b6b754a754707361933eo';
$productId = 3;
$variantId = 1;

$model = new Models_Product;
$variantCount = $model->getProductStorageCount($storageId, $productId, $variantId);

int getVariantIdByCode() Возвращает идентификатор варианта по его артикулу.

$variantVendorCode = 'CN31-2';
$model = new Models_Product;
$variantId = $model->getVariantByCode($variantVendoreCode);

array getProductStorageData() Возвращает данные об остатках для переданного товара и варианта на складах, а так же склад списания остатков в зависимости от настроек списания.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$storagesInfo = $model->getProductStorageData($productId, $variantId);

$stocksOnStorages = $storagesInfo['storageArray'];
$writeOffStorage = $storagesInfo['storage'];

$firstStorageId = $stocksOnStorages[0]['storage'];
$firstStorageCount = $stocksOnStorages[0]['count'];

array getProductStoragesData() Возвращает для переданного товара и варианта остатки по всем складам.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$stocksOnStorages = $model->getProductStoragesData($productId, $variantId);

$firstStorageId = $stocksOnStorages[0]['storage'];
$firstStorageCount = $stocksOnStorages[0]['count'];

int getProductStorageTotalCount() Возвращает сумму остатков по всем складам для переданного товара и варианта.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$totalStocksCount = $model->getProductStorageTotalCount($productId, $variantId);

bool decreaseCountProductOnStorage() Метод списывает количество товара со склада. Используется при оформлении заказа. Если в $storage передать 'all', то списание произойдёт со склада, автоматически выбранного согласно настройкам.

$productInfo = [
'id' => 1,
'variantId' => 3,
'count' => 4,
];
$storageId = 'th330305562b6b754a754707361933eo';

$model = new Models_Product;
$decreasingResult = $model->decreaseCountProductOnStorage($productInfo, $storageId);

bool|array orderDecreaseProductStorageCount() Списывает товары со складов в соответствии с их настройками или с переданного склада.
bool resetLastUpdate() Устанавливает новую дату обновления товара или варианта.
bool cloneStorageData() Клонирует остатки по складам с одного товара/варианта на другой, используется при клонировании товаров и вариантов.
array getStoragesCountsByVariantsIds() Возвращает остатки для списка вариантов с переданного или со всех складов.
bool checkStoragesRecalculation() Проверяет, требуется ли перерасчёт остатков товаров по складам.
Описание методов и примеры их использования

Метод

int|bool addProduct (array $array, bool $clone = false)

Параметры

  • $array: массив с данными о товаре.
  • $clone: происходит ли клонирование или обычное добавление товара

Результат работы метода можно изменить хуком: Models_Product_addProduct

Описание

Добавляет товар в базу данных.

$array = array(
    
'title' => 'title', // название товара
    
'url' => 'link', // последняя часть ссылки на товар
    
'code' => 'CN230', // артикул товара
    
'price' => 100, // цена товара
    
'old_price' => 200, // старая цена товара
    
'image_url' => 1434653074061713.jpg, // последняя часть ссылки на изображение товара
    
'image_title' => '', // title изображения товара
    
'image_alt' => '', // alt изображения товара
    
'count' => 77, // остаток товара
    
'weight' => 5, // вес товара
    
'cat_id' => 4, // ID основной категории товара
    
'inside_cat' => '1,2', // дополнительные категории товаров
    
'description' => 'descr', // описание товара
    
'short_description' => 'short descr', // краткое описание товара
    
'meta_title' => 'title', // seo название товара
    
'meta_keywords' => 'title купить, CN230, title', // seo ключевые слова
    
'meta_desc' => 'meta descr', // seo описание товара
    
'currency_iso' => 'RUR', // код валюты товара
    
'recommend' => 0, // выводить товар в блоке рекомендуемых
    
'activity' => 1, // выводить товар
    
'unit' => 'шт.', // единица измерения товара (если null, то используется единица измерения основной категории товара)
    
'new' => 0, // выводить товар в блоке новинок
    
'userProperty' => Array, // массив с характеристиками товара
    
'related' => 'В-500-1', // артикулы связанных товаров
    
'variants' => Array, // массив с вариантами товаров
    
'related_cat' => null, // ID связанных категорий
    
'lang' => 'default', // язык для сохранения
    
'landingTemplate' => 'noLandingTemplate', // шаблон для лэндинга товара
    
'ytp' => '', // строка с торговым предложением для лэндинга
    
'landingImage' => 'no-img.jpg', // изображение для лэндинга
    
'storage' => 'all' // склад товара
);
$model = new Models_Product();
$id = $model->addProduct($product);
echo 
$id;

Метод

bool updateProduct (array $array)

Параметры

  • $array: массив с данными о товаре.

Результат работы метода можно изменить хуком: Models_Product_updateProduct

Описание

Изменяет данные о товаре.

$array = array(
    
'id' => 23, // ID товара
    
'title' => 'title', // название товара
    
'url' => 'link', // последняя часть ссылки на товар
    
'code' => 'CN230', // артикул товара
    
'price' => 100, // цена товара
    
'old_price' => 200, // старая цена товара
    
'image_url' => 1434653074061713.jpg, // последняя часть ссылки на изображение товара
    
'image_title' => '', // title изображения товара
    
'image_alt' => '', // alt изображения товара
    
'count' => 77, // остаток товара
    
'weight' => 5, // вес товара
    
'cat_id' => 4, // ID основной категории товара
    
'inside_cat' => '1,2', // дополнительные категории товаров
    
'description' => 'descr', // описание товара
    
'short_description' => 'short descr', // краткое описание товара
    
'meta_title' => 'title', // seo название товара
    
'meta_keywords' => 'title купить, CN230, title', // seo ключевые слова
    
'meta_desc' => 'meta descr', // seo описание товара
    
'currency_iso' => 'RUR', // код валюты товара
    
'recommend' => 0, // выводить товар в блоке рекомендуемых
    
'activity' => 1, // выводить товар
    
'unit' => 'шт.', // единица измерения товара (если null, то используется единица измерения основной категории товара)
    
'new' => 0, // выводить товар в блоке новинок
    
'userProperty' => Array, // массив с характеристиками товара
    
'related' => 'В-500-1', // артикулы связанных товаров
    
'variants' => Array, // массив с вариантами товаров
    
'related_cat' => null, // ID связанных категорий
    
'lang' => 'default', // язык для сохранения
    
'landingTemplate' => 'noLandingTemplate', // шаблон для лэндинга товара
    
'ytp' => '', // строка с торговым предложением для лэндинга
    
'landingImage' => 'no-img.jpg', // изображение для лэндинга
    
'storage' => 'all' // склад товара
);
$model = new Models_Product();
$model->updateProduct($array);

Метод

bool fastUpdateProductVariant (int $id, array $array, int $product_id)

Параметры

  • $id: варианта.
  • $array: ассоциативный массив поле=>значение.
  • $product_id: id продукта.

Описание

Обновляет поле в варианте и синхронизирует привязку первого варианта с продуктом.

$array = array(
    
'price' => 200, // цена
    
'count' => 50 // количество
);
$model = new Models_Product();
$model->fastUpdateProductVariant(5, $array, 2);

Метод

bool importUpdateProductVariant (int $id, array $array, int $product_id)

Параметры

  • $id: варианта.
  • $array: массив поле = значение.
  • $product_id: id продукта.

Описание

Аналогичная fastUpdateProductVariant функция, но с поправками для
процесса импорта вариантов.

$model = new Models_Product();
$model->importUpdateProductVariant(5, $array, 2);

Метод

bool fastUpdateProduct (int $id, array $array)

Параметры

  • $id: - продукта.
  • $array: - параметры для обновления.

Результат работы метода можно изменить хуком: Models_Product_fastUpdateProduct

Описание

Обновление заданного поля продукта.

$array = array(
    
'price' => 200, // цена
    
'sort' => 5, // номер сортировки
    
'count' => 50 // количество
);
$model = new Models_Product();
$model->fastUpdateProduct(5, $array);

Метод

bool saveVariants (array $variants, int $id)

Параметры

  • $variants: набор вариантов
  • $id: товара

Описание

Сохраняет варианты товара.

$variants = Array(
    
0 => Array(
        
'color' => 19, // id цвета варианта
        
'size' => 11, // id размера варианта
        
'title_variant' => '22 Голубой', // название
        
'code' => 'SKU241', // артикул
        
'price' => 2599, // цена
        
'old_price' => 3000, // старая цена
        
'weight' => 1, // вес
        
'count' => 50, // количество
        
'activity' => 1, // активность
        
'id' => 1249, // id варианта
        
'currency_iso' => 'RUR', // код валюты
        
'image' => '13140250299.jpg' // название картинки варианта
    
)
);
$model = new Models_Product();
$model->saveVariants($variants, 51);

Метод

array cloneProduct (int $id)

Параметры

  • $id: клонируемого товара.

Результат работы метода можно изменить хуком: Models_Product_cloneProduct

Описание

Клонирует товар.

$productId = 25;
$model = new Models_Product;
$model->cloneProduct($productId);

Метод

bool cloneImagesProduct (array $imagesArray, int $oldId, int $newId)

Параметры

  • $imagesArray: массив url изображений, которые надо клонировать.
  • $oldId: старый ID товара.
  • $newId: новый ID товара.

Описание

Клонирует изображения продукта.

$imagesArray = array(
    
'40Untitled-1.jpg',
    
'41Untitled-1.jpg',
    
'42Untitled-1.jpg'
);
$oldId = 40;
$newId = 130;
$model = new Models_Product;
$model->deleteProduct($imagesArray, $oldId, $newId);

Метод

bool deleteProduct (int $id)

Параметры

  • $id: удаляемого товара

Результат работы метода можно изменить хуком: Models_Product_deleteProduct

Описание

Удаляет товар, его свойства, варианты, локализации, оптовые цены из базы данных.

$productId = 25;
$model = new Models_Product;
$model->deleteProduct($productId);

Метод

deleteImagesFolder (int $id)

Параметры

  • $id: товара.

Описание

Удаляет папки из структуры папок изображений относящиеся к заданному продукту.

$productId = 25;
$model = new Models_Product;
$model->deleteImagesFolder($productId);

Метод

deleteImagesProduct (array $arrayImages, int $productId = false)

Параметры

  • $arrayImages: массив с названиями картинок
  • $productId: ID товара

Описание

Удаляет все картинки привязанные к продукту.

$array = array(
    
'product/100/105/120.jpg',
    
'product/100/105/122.jpg',
    
'product/100/105/121.jpg'
);
$model = new Models_Product();
$model->deleteImagesProduct($array);

Метод

array getProductByUserFilter (string $where, $joinVariant = false)

Параметры

  • $where: необязательный параметр, формирующий условия поиска, например: id = 1

Описание

Получает информацию о запрашиваемом товаре.

$where = '`cat_id` IN (5,6)';
$model = new Models_Product;
$result = $model->deleteImagesFolder($where);
viewData($result);

Метод

array getProduct (int $id, bool $getProps = true, bool $disableCashe = false)

Параметры

  • $id: запрашиваемого товара.
  • $getProps: возвращать ли характеристики.
  • $disableCashe: отключить ли кэш.

Результат работы метода можно изменить хуком: Models_Product_getProduct

Описание

Получает информацию о запрашиваемом товаре по его ID.

$productId = 25;
$model = new Models_Product;
$product = $model->getProduct($productId);
viewData($product);

Метод

array imagesConctruction (string $imageUrl, string $imageTitle, string $imageAlt, string $id)

Параметры

  • $imageUrl: строка с разделителями | между ссылок.
  • $imageTitle: строка с разделителями | между заголовков.
  • $imageAlt: строка с разделителями | между тестов.
  • $id: ID товара.

Результат работы метода можно изменить хуком: Models_Product_imagesConctruction

Описание

Создает массивы данных для картинок товара, возвращает три массива со ссылками, заголовками и альт, текстами.

$model = new Models_Product();
$imageUrl = '120.jpg|121.jpg';
$imageTitle = 'Каритинка товара';
$imageAlt = 'Альтернативная подпись картинки';
$res = $model->imagesConctruction($imageUrl, $imageTitle, $imageAlt);
viewData($res);

Метод

increaseCountProduct (int $id, string $code, int $count)

Параметры

  • $id: номер продукта.
  • $code: артикул.
  • $count: прибавляемое значение к остатку.

Описание

Обновляет остатки продукта, увеличивая их на заданное количество.

Models_Product::increaseCountProduct(37, 'SKU348', 2);

Метод

decreaseCountProduct (int $id, string $code, int $count)

Параметры

  • $id: ID продукта.
  • $code: Артикул.
  • $count: Прибавляемое значение к остатку.

Описание

Обновляет остатки продукта, уменьшая их количество,
при смене статуса заказа с "отменен" на любой другой.

Models_Product::decreaseCountProduct(37, 'SKU348', 2);

Метод

int getProductsCount ($where)

Описание

Возвращает общее количество продуктов каталога.

$result = Models_Product::getProductsCount();
viewData($result);

Метод

array getProductByUrl (string $url, int $catId = false)

Параметры

  • $url: запрашиваемого товара.
  • $catId: id-категории, т.к. в разных категориях могут быть одинаковые url.

Результат работы метода можно изменить хуком: Models_Product_getProductByUrl

Описание

Получает продукт по его URL.

$url = 'nike-air-versitile_102';
$result = Models_Product::getProductByUrl($url);
viewData($result);

Метод

bool|float getProductPrice (int $id)

Параметры

  • $id: изменяемого товара.

Описание

Получает цену запрашиваемого товара по его id.

$result = Models_Product::getProductPrice(5);
viewData($result);

Метод

string createPropertyForm (array $param = Array, string $adminOrder = nope, $returnArray = false)

Параметры

  • $param: массив параметров.
  • $adminOrder: заказ для админки или нет (по умолчанию - нет).

Результат работы метода можно изменить хуком: Models_Product_createPropertyForm

Описание

Создает форму пользовательских характеристик для товара.
В качестве входящего параметра получает массив:

$param = array(
    
'id' => null, // id товара.
    
'maxCount' => null, // максимальное количество товара на складе.
    
'productUserFields' => null, // массив пользовательских полей для данного продукта.
    
'action' => "/catalog", // ссылка для метода формы.
    
'method' => "POST", // тип отправки данных на сервер.
    
'ajax' => true, // использовать ajax для пересчета стоимости товаров.
    
'blockedProp' => array(), // массив из ID свойств, которые не нужно выводить в форме.
    
'noneAmount' => false, // не выводить  input для количества.
    
'titleBtn' => "В корзину", // название кнопки.
    
'blockVariants' => '', // блок вариантов.
    
'classForButton' => 'addToCart buy-product buy', // классы для кнопки.
    
'noneButton' => false, // не выводить кнопку отправки.
    
'addHtml' => '' // добавить HTML в содержимое формы.
    
'currency_iso' => '', // обозначение валюты в которой сохранен товар
    
'printStrProp' => 'true', // выводить строковые характеристики
    
'printCompareButton' => 'true', // выводить кнопку сравнения
    
'buyButton' => 'true', // показывать кнопку 'купить' в миникарточках (если false - показывается кнопка 'подробнее')
    
'productData' => 'Array', // массив с данными о товаре
    
'showCount' => 'true' // показывать блок с количеством
);
$model = new Models_Product;
$result = $model->getProduct($param);
echo 
$result;

Метод

string|array getBlockVariants (int $id, int $cat_id, string $returnArray = false)

Параметры

  • $id: товара
  • $cat_id: id категории
  • $returnArray: вернуть массив (по умолчанию - нет)

Описание

Формирует блок вариантов товара.

$model = new Models_Product;
$result = $model->getBlockVariants(5);
echo 
$result;

Метод

string|array getBlocksVariantsToCatalog (int $array, array $returnArray = false, bool $mgadmin = false)

Параметры

  • $array: массив id товаров
  • $returnArray: если true то вернет просто массив без html блоков
  • $mgadmin: если true то вернет данные для админки

Описание

Формирует массив блоков вариантов товаров на странице каталога.
Метод создан для сокращения количества запросов к БД.

$model = new Models_Product;
$result = $model->getBlocksVariantsToCatalog(array(2,3,4));
echo 
$result;

Метод

string addMarginToProp (float $margin, float $rate = 1, string $currency = false, string $productCurr)

Параметры

  • $margin: наценка
  • $rate: множитель цены
  • $currency: валюта
  • $productCurr: валюта товара

Описание

Формирует добавочную строку к названию характеристики,
в зависимости от наличия наценки и стоимости.

$model = new Models_Product;
$result = $model->addMarginToProp(250);
echo 
$result;

Метод

array parseMarginToProp (string $value)

Параметры

  • $value: строка, которую надо распарсить

Описание

Отделяет название характеристики от цены название_пункта#стоимость#.
Пример входящей строки: "Красный#300#"

$model = new Models_Product;
$result = $model->parseMarginToProp('Красный#300#');
echo 
$result;

Метод

calcPrice ()

Описание

Обновление состояния корзины.
Используеться для пересчета корзины и обновления цены в карточке товара ajax'ом

$model = new Models_Product;
$model->calcPrice();

Метод

getVariantImages ()

Описание

Возвращает оригинал и все варианты миниатюр изображений варианта
Используется Ajax'ом при изменении варианта в карточке и миникарточке товара

Метод

array getVariants (int $id, string|bool $title_variants = false, bool $sort = false, $forceNullVariants = false, $ignoreCatRate = false)

Параметры

  • $id: продукта для поиска его вариантов
  • $title_variants: название варианта продукта для поиска его вариантов
  • $sort: использовать ли сортировку результатов (из настройки 'filterSortVariant')

Результат работы метода можно изменить хуком: Models_Product_getVariants

Описание

Возвращает набор вариантов товара.

$productId = 25;
$model = new Models_Product;
$variants = $model->getVariants($productId);
viewData($variants);

Метод

array noPrintProperty ()

Описание

Возвращает массив id характеристик товара, которые не нужно выводить в карточке.

$result = Models_Product::noPrintProperty($productId);
viewData($result);

Метод

string createRelatedForm (array $args, string $title = С этим товаром покупают, string $layout = layout_related)

Параметры

  • $args: массив с данными о товарах
  • $title: заголовок блока
  • $layout: используемый лэйаут

Результат работы метода можно изменить хуком: Models_Product_createRelatedForm

Описание

Возвращает HTML блок связанных товаров.

$args = array(
    
'product' => 'CN182,В-500-1', // артикулы связанных товаров
    
'category' => '2,4' // ID связанных категорий
);
$model = new Models_Product;
$result = $model->createRelatedForm($args);
echo 
$result;

Метод

convertToIso (string $iso, array $productsId)

Параметры

  • $iso: валюта в которую будет производиться конвертация.
  • $productsId: массив с id продуктов.

Описание

Конвертирование стоимости товаров по заданному курсу.

$model = new Models_Product;
$model->convertToIso('USD', array(2, 3, 4));

Метод

updatePriceCourse (string $iso, array $listId)

Параметры

  • $iso: валюта в которую будет производиться конвертация.
  • $listId: массив с id продуктов.

Описание

Обновления цены товаров в соответствии с курсом валюты.

$model = new Models_Product;
$model->updatePriceCourse('USD', array(2, 3, 4));

Метод

bool deleteImagesVariant (int $productId)

Параметры

  • $productId: ID товара

Описание

Удаляет картинки вариантов товара.

$model = new Models_Product;
$model->deleteImagesVariant(4);

Метод

array prepareImageName (array $product)

Параметры

  • $product: массив с товаром

Описание

Подготавливает названия изображений товара.

$model = new Models_Product;
$res = $model->prepareImageName($product);
viewData($res);

Метод

void setZeroStock (int $productId)

Параметры

  • $productId: - id товара

Описание

Обнуляет остатки товара и всех его вариантов по всем складам.

$productId = 1;
$model = new Models_Product;
$model->setZeroStock($productId);

Метод

void movingProductImage (array $images, int $productId, string $path = uploads, bool $removeOld = true)

Параметры

  • $images: - массив изображений
  • $productId: - id товара
  • $path: - папка в которой лежат исходные изображения
  • $removeOld: - флаг удаления изображений из папки

Описание

Копирует изображения товара в новую структуру хранения.

Метод

array recalculateStoragesAll (int $offset, $noTimeLimit = false)

Параметры

  • $offset: - смещение выборки товаров (с какой позиции начинать).

Описание

Пересчитывает все остатки по складам по всем товарам и вариантам. Записывает количество в таблицу товаров для оптимизации запросов.

Метод

bool recalculateStoragesById (int $productId)

Параметры

  • $productId: - id товара

Описание

Пересчитывает все остатки по складам для конкретного товара и всех его вариантов. Записывает количество в таблицу товаров для оптимизации запросов.

Метод

bool recalculateStorages (array $allProductsIds)

Параметры

  • $allProductsIds: - массив идентификаторов товаров.

Описание

Пересчитывает все остатки по складам для всех переданных товаров и их вариантов. Записывает количество в таблицу товаров для оптимизации запросов.

Метод

int getProductsTotalCount ()

Описание

Возвращает общее количество всех остатков всех товаров и вариантов по всем складам.

$model = new Models_Product;
$allStocksCount = $model->getProductsTotalCount();

Метод

int getProductIdByExternalId (string $externalId)

Параметры

  • $externalId: - внешний идентификатор товара

Описание

Возвращает идентификатор товара по его внешнему идентификатору (1c_id).

$externalProductId = 'some1cid';
$model = new Models_Product;
$productId = $model->getProductIdByExternalId($externalProductId);

Метод

bool updateStorageCount (int $productId, string $storageId, float $count, int $variantId)

Параметры

  • $productId: - идентификатор товара
  • $storageId: - идентификатор склада
  • $count: = количество
  • $variantId: - идентификатор варианта

Описание

Устанавливает количество товара или его варианта на конкретном складе. Метод обновляет текущую запись о количестве, если она имеется или добавляет новую.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$updateCountResult = $model->updateStorageCount($productId, $storageId, $newCount, $variantId);

Метод

bool setNewStorageCount (int $productId, string $storageId, float $count, int $variantId)

Параметры

  • $productId: - идентификатор товара
  • $storageId: - идентификатор склада
  • $count: = количество
  • $variantId: - идентификатор варианта

Описание

Устанавливает количество товара или его варианта на конкретном складе. Метод удаляет все существующие записи для переданного товара, варианта и склада, а затем добавляет новую.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$setNewCountResult = $model->setNewStorageCount($productId, $storageId, $newCount, $variantId);

Метод

bool deleteStorageRecordsAll (int $productId, string $storageId)

Параметры

  • $productId: - идентификатор товара
  • $storageId: - идентификатор склада

Описание

Метод удаляет все записи о количестве переданного товара и всех его вариантов на переданном складе.

$model = new Models_Product;

$productId = 17;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteAllRecordsResult = $model->deleteStorageRecordsAll($productId, $storageId);

Метод

bool deleteStorageRecordsProductOnly (int $productId, string $storageId)

Параметры

  • $productId: - идентификатор товара
  • $storageId: - идентификатор склада

Описание

Метод удаляет все записи о количестве переданного товара без учёта его вариантов на переданном складе.

$model = new Models_Product;

$productId = 17;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteProductRecordsOnlyResult = $model->deleteStorageRecordsProductOnly($productId, $storageId);

Метод

bool deleteStorageRecordsVariantOnly (int $productId, int $variantId, string $storageId)

Параметры

  • $productId: - идентификатор товара
  • $variantId: - идентификатор варианта товара
  • $storageId: - идентификатор склада

Описание

Метод удаляет все записи о количестве переданного варианта переданного товара на переданном складе.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteVariantsRecordsOnlyResult = $model->deleteStorageRecordsVariantOnly($productId, $variantId, $storageId);

Метод

bool deleteStorageRecordsAllVariants (int $productId, int $variantId, string $storageId)

Параметры

  • $productId: - идентификатор товара
  • $variantId: - идентификатор варианта товара
  • $storageId: - идентификатор склада

Описание

Метод удаляет все записи о количестве переданного варианта переданного товара на переданном складе.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$storageId = 'th330305562b6b754a754707361933eo';

$deleteVariantRecordsOnlyResult = $model->deleteStorageRecordsVariantOnly($productId, $variantId, $storageId);

Метод

bool addStorageRecord (int $productId, string $storageId, float $count, int $variantId)

Параметры

  • $productId: - идентификатор товара
  • $storageId: - идентификатор склада
  • $count: = количество
  • $variantId: - идентификатор варианта

Описание

Добавляет новую запись о количестве товара/варианта в таблицу остатков по складам.

$model = new Models_Product;

$productId = 17;
$variantId = 2;
$newCount = 71;
$storageId = 'th330305562b6b754a754707361933eo';

$createNewCountRecordResult = $model->addStorageRecord($productId, $storageId, $newCount, $variantId);

Метод

bool clearStoragesTable ()

Описание

Полностью очищает таблицу остатков товаров и вариантов по складам (TRUNCATE).

$model = new Models_Product;
$clearStocksTableResult = $model->clearStoragesTable();

Метод

bool destroyStorageStocks (string $storage)

Параметры

  • $storage: - идентификатор склада

Описание

Удаляет все записи о количестве товаров и вариантах на определенном складе.

$outdatedStorageId = 'th330305562b6b754a754707361933eo';

$model = new Models_Product;
$clearStocksTableResult = $model->destroyStorageStocks($outdatedStorageId);

Метод

int getProductStorageCount (string $storageId, int $productId, int $variantId)

Параметры

  • $storageId: - идентификатор склада
  • $productId: - идентификтаор товара
  • $variantId: - идентификатор варианта

Описание

Возвращает количество товара/варианта на определенном складе.

$storageId = 'th330305562b6b754a754707361933eo';
$productId = 3;
$variantId = 1;

$model = new Models_Product;
$variantCount = $model->getProductStorageCount($storageId, $productId, $variantId);

Метод

int getVariantIdByCode (string $code)

Параметры

  • $code: - артикул варианта

Описание

Возвращает идентификатор варианта по его артикулу.

$variantVendorCode = 'CN31-2';
$model = new Models_Product;
$variantId = $model->getVariantByCode($variantVendoreCode);

Метод

array getProductStorageData (int $productId, int $variantId)

Параметры

  • $productId: - идентификтаор товара
  • $variantId: - идентификатор варианта

Описание

Возвращает данные об остатках для переданного товара и варианта на складах, а так же склад списания остатков в зависимости от настроек списания.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$storagesInfo = $model->getProductStorageData($productId, $variantId);

$stocksOnStorages = $storagesInfo['storageArray'];
$writeOffStorage = $storagesInfo['storage'];

$firstStorageId = $stocksOnStorages[0]['storage'];
$firstStorageCount = $stocksOnStorages[0]['count'];

Метод

array getProductStoragesData (int $productId, int $variantId)

Параметры

  • $productId: - идентификтаор товара
  • $variantId: - идентификатор варианта

Описание

Возвращает для переданного товара и варианта остатки по всем складам.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$stocksOnStorages = $model->getProductStoragesData($productId, $variantId);

$firstStorageId = $stocksOnStorages[0]['storage'];
$firstStorageCount = $stocksOnStorages[0]['count'];

Метод

int getProductStorageTotalCount (int $productId, int $variantId)

Параметры

  • $productId: - идентификтаор товара
  • $variantId: - идентификатор варианта

Описание

Возвращает сумму остатков по всем складам для переданного товара и варианта.

$productId = 1;
$variantId = 7;

$model = new Models_Product;
$totalStocksCount = $model->getProductStorageTotalCount($productId, $variantId);

Метод

bool decreaseCountProductOnStorage (array $product, int $storage = all)

Параметры

  • $product: - информация о товаре
  • $storage: - идентификатор склада или "all" для автоматического выбора

Описание

Метод списывает количество товара со склада. Используется при оформлении заказа. Если в $storage передать 'all', то списание произойдёт со склада, автоматически выбранного согласно настройкам.

$productInfo = [
'id' => 1,
'variantId' => 3,
'count' => 4,
];
$storageId = 'th330305562b6b754a754707361933eo';

$model = new Models_Product;
$decreasingResult = $model->decreaseCountProductOnStorage($productInfo, $storageId);

Метод

bool|array orderDecreaseProductStorageCount (string $storage, array $cartItems)

Параметры

  • $storage: - склад, с которого необходимо произвести списание. Можно не передавать или передать 'all', если списывать нужно согласно настройкам.
  • $cartItems: - корзина товаров, если не передана, будет использована корзина из сессии

Описание

Списывает товары со складов в соответствии с их настройками или с переданного склада.

Метод

bool resetLastUpdate (array $product)

Параметры

  • $product: - данные товара

Описание

Устанавливает новую дату обновления товара или варианта.

Метод

bool cloneStorageData (int $oldId, int $newId, int $newVariantId)

Параметры

  • $oldId: - идентификатор клонируемого товара/варианта
  • $newId: - идентификатор нового товара
  • $newVariantId: - идентификатор нового варианта

Описание

Клонирует остатки по складам с одного товара/варианта на другой, используется при клонировании товаров и вариантов.

Метод

array getStoragesCountsByVariantsIds (array $variantsIds, string $storaeg, $storage)

Параметры

  • $variantsIds: - массив идентификаторов вариантов
  • $storaeg: - идентификатор склада, если не передавать, то будет возвращены остатки по всем складам

Описание

Возвращает остатки для списка вариантов с переданного или со всех складов.

Метод

bool checkStoragesRecalculation ()

Описание

Проверяет, требуется ли перерасчёт остатков товаров по складам.