Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
MODX Revo | MiniShop2 > Перенос значений из одной опции в другую
<?php
// Перенос значений из одной опции в другую 0_о
// Параметры
$option_from = 'option_from_name'; # Из опции
$option_to = 'option_to_name'; # В опцию
// изсключаем из выборки значения опций которые не трогать
$sQuery = "SELECT product_id FROM `". $modx->getOption('table_prefix') ."ms2_product_options` WHERE `key` = '" . $option_to . "'";
$strProdNoId = ''; # Исключаем из выборки
foreach ($modx->query($sQuery) as $row)
$strProdNoId .= ', ' . $row['product_id'];
$strProdNoId = substr($strProdNoId, 2);
// Берём значения из опции которые нужно перетянуть
$sQuery = "SELECT * FROM `". $modx->getOption('table_prefix') ."ms2_product_options` WHERE `key` = '" . $option_from ."' AND `product_id` NOT IN (".$strProdNoId.")";
foreach ($modx->query($sQuery) as $row){
// Чистим значение
$value = $row['value'];
// $value = trim($value); # Если числа с плавающей точкой, приводим к одному виду
// $value = str_replace(',', '.', $value); # Если числа с плавающей точкой, приводим к одному виду
// $value = preg_replace("/\([^)]+\)/","",$value); # Убираем значения в скобках
// $pos = strripos($value, '–'); # Среднее значение если дефис
// if ( !$pos === false ) {
// $arrValues = explode('–', $value);
// $value = ( $arrValues[0] + $arrValues[1] ) / 2;
// }
// $value = preg_replace("/[^0-9]\./", '', $value); # Оставляем только цифры и точку
// Расчёты
// $value = $value * 10; # для расчёта площади помещения
// Добавление если не нуль
if ($value) {
$sQueryAdd = "INSERT INTO `". $modx->getOption('table_prefix') ."ms2_product_options` (`product_id`, `key`, `value`) VALUES(".$row['product_id'].", '" . $option_to . "', ".$value.")";
$result = $modx->query($sQueryAdd); # Добавление
echo $sQueryAdd . '<br/>';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.