Константин Ильин

Константин Ильин

С нами с 10 февраля 2014; Место в рейтинге пользователей: #149
Константин Ильин
14 ноября 2016, 11:47
0
Hello Mark! Lest you orde all an interpreter can let Vasili Naumkin(bezumkin) and Nicholas Lanets will be a bridge between you and the Russian-speaking community for better communication? That is to say officials modx in the Russian-speaking community and be part of your team.
Константин Ильин
10 ноября 2016, 12:27
0
Василий, обрати пожалуйста свой взор на эту небольшую проблему)
Константин Ильин
09 ноября 2016, 21:16
0
Василий подскажи пожалуйста в чем проблема, точнее она схожа с вышеописанной:
выдает ошибку ms2_gallery_err_no_product и на первом товаре сбрасывается.

1. В цикле создаю товары, класс указан msProduct
2. Закачиваю на сервер картинку
3. Закачиваю картинку через процессор.

если убрать запуск процессора gallery, то товары создаются нормально.

id и image точно передаются.

foreach($TVR_hm as $tvr){
    echo '--- Создан <b>Товар</b> '.$tvr['pagetitle']. '
';
    $newTVR = creatRes($tvr['pagetitle'],$newPodCat['id'],8);

    $img = $hmURL.$tvr['image'];
				
	$file_name = str_replace("/","",substr( $img, strripos( $img,'/')));
	$origFileName = $_SERVER["DOCUMENT_ROOT"].'/'.$tmp.$file_name; 
	
	$image = str_replace('//', '/', MODX_BASE_PATH . $tmp . $file_name);

	//загрузка файла на сервер
	upload($img,$origFileName);
	
	//загрузки файла для товара
	$params = array('id' => $newTVR['id'], 'name' => $file_name, 'file' => $image);
	$response = $modx->runProcessor('gallery/upload',$params, array('processors_path' =>                                                   MODX_CORE_PATH.'components/minishop2/processors/mgr/'));
	if ($response->isError()) {
		echo "Error on upload \"$image\": \n". print_r($response->getAllErrors(), 1);
	}

	unlink($image);
}

function creatRes($pagetitle,$parent,$template,$class = 0){
    
    global $modx;
    $classR = 'msProduct';
    if($class == 1){
        $classR = 'msCategory';
    }
    $data['class_key']      = $classR;
    $data['context_key']    = 'web';
    $data['template']       = $template;
    $data['published']      = 1;
    $data['parent']         = $parent;
    $data['pagetitle']      = $pagetitle;
    
    $new_res = $modx->runProcessor('resource/create', $data);
    
    return $new_res->getObject();
}
Пробовал (нашел где-то), $modx->error->reset(); в цикл пихать, проходит первую категорию, товары создаются с картинками. Помимо того, что долго он еще и вешается, мол массив пустой, хотя он не пустой, в общем это костыль какой-то.
Подскажите пожалуйста
Константин Ильин
08 ноября 2016, 12:44
+1
п… — другого слова нет. О какой такой нашей безопасности может идти речь если они себя не состоянии обезопасить.
Константин Ильин
08 ноября 2016, 12:13
0
Ну вот я поэтому имел ввиду не один человек, а группу экспертов модх.
Константин Ильин
08 ноября 2016, 11:37
+2
С каждым заходом в эту тему, так становится печальнее… Где-то писали про любовь к модх — она постепенно угасает (скоро будет: «прошла любовь, завяли помидоры»).
Дабы этого не произошло со всеми и со мной надо найти какое-то решение, потому что здесь оставляем комментарии и дыр выявляется много, а там в кабинетах модх скорее всего ничего не меняется. Где-то месяц назад или более Василий выкладывал новость о создание команды на будущее развитие модх (вроде так было, поправьте если путаю), так вот я предлагаю собрать похожую «команду»,«совет»,«консорциум», просто группа, которая напишет большой БагРепорт и будет в будущем писать о дырах модх, а также если есть решение.

Например: Василий, Николай и Евгений Борисов, они ребята «авторитетные» и о них в модх знают, проще говоря к ним прислушаются. Написали в модх, что вот там то дыра, поправить можно так-то, в модх увидят, что письмо от этой команды и рассмотрят его и отнесутся с серьезностью, а не просто забьют. Так сказать нужно подсказывать разработчикам («подпинывать») модх, но тем самым сделать очень большое дело!!!
Глядишь и команда Simple Dream тоже подключится или кто то другой. Даже, хотя бы исходя из финансовой точки зрения, из-за дыр не будет пользователей модх и никто не будет покупать в магазине дополнения и много разных вытекающих последствий…

Ведь это любовь к модх, а за любовь надо бороться.
Константин Ильин
06 ноября 2016, 11:20
+3
Префикс (не зря же его придумали), как и соль в паролях, создан для защиты от злоумышленников и не зря при установке есть возможность указать его.
Плохо то, что в modx можно сделать sql-инъекцию.
Константин Ильин
06 ноября 2016, 10:43
0
Понял))
Допустим если не идти легким путем, т.е. не менять префикс, а решать проблему в корне, я так понимаю в ядре копаться?
А ты им предложил в корне проблему решать(может даже решение дал) или они завтра напишут срочно все меняйте префиксы?))
Константин Ильин
06 ноября 2016, 10:27
0
Николай, первое это конечно огромное большое спасибо за «защиту» наших сайтов!
Печально конечно, я до недавнего времени думал, что modx лучшая из лучших, считал гарантом и людям говорил зачем тебе битрикс за 20 тысяч в год если есть modx с большими возможностями и безопасностью. А оказывается дыр полно. Префикс старался менять на сайтах, но все же он не был супер сложным.

Практически все эти проблемы решаются сменой префиксов таблиц и сокрытием папки коннекторов.
Есть еще проблемы и как они решаются? т.е. я так понимаю их много и от этого становится еще печальней.

Парни из modx что-то ответили? или надо их сайт взломать, чтоб они поняли…
Константин Ильин
04 ноября 2016, 19:46
0
Ребят подскажите, как правильно работать с подключение к сторонней бд

// Соединяемся с базой данных:
$dsn = "mysql:host=$host;dbname=$databasename;port=$port;charset=$charset";
$config_options = array(xPDO::OPT_TABLE_PREFIX => 'modx_');
$xpdoH = new xPDO($dsn, $username, $password,$config_options,[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]);

// Проверяем успешность подключения:
if($xpdoH->connect())
{
    echo '<div class="alert alert-success">Подключение к БД  - <strong>Успешно</strong></div>';
}else{
    echo '<div class="alert alert-danger">Подключение к БД  - <strong>НЕ Удалось</strong></div>';
    return;
}
Данный код обрабатывает норм, подключение успешно.

Далее, делаю такой код:
$h = $xpdoH->query("SELECT * FROM modx_site_content WHERE parent = 2");
$res_hl = $h->fetchAll(PDO::FETCH_ASSOC);
Выводит все норм.

Но хотелось бы работать с обьектами, т.е. так:
$hr = $xpdoH->newQuery('modResource');
$hr->select(array('modResource.*'));
$hr->prepare();
$hr->stmt->execute();
$res_hr = $hr->stmt->fetchAll(PDO::FETCH_ASSOC);
Но этот код выдает пустой массив…

Запрос распечатываю вижу такие строчки:
[sql] => SELECT modResource.* FROM  AS `modResource`
Т.е. после FROM не указана таблица

Подскажите пожалуйста, что надо сделать?
Константин Ильин
26 октября 2016, 15:35
0
Приветствую! Подскажите пожалуйста:
1. Не могу понять как получить массив $data в событии, не выводится ничего
Еще в этом событии есть массив $data — дополнительные параметры, присланные юзером при добавлении товара в корзину. Там может быть цвет, размер и вообще, что угодно.
И как в него что-то передать? Пробовал просто input
<input type="hidden" name="newPrice" value="123123">
//или так
<input type="hidden" name="data[newPrice]" value="qweqweqwe">
в плагине пытаюсь получить его, ничего не выводит, даже array( ) не выводит
$modx->log(modX::LOG_LEVEL_ERROR, print_r($data,true));

2. Как из options удалить Опцию, т.е. чтоб она в корзине не отображалась?

Вот весь код плагина:
switch ($modx->event->name) {

    case 'msOnBeforeAddToCart': 
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($options,true));
        $modx->log(modX::LOG_LEVEL_ERROR, print_r($data,true));

        $product->set('price', $options['newPrice']);
        unset($options['newPrice']);
    break;
Константин Ильин
22 октября 2016, 14:34
0
Володя, скажи пожалуйста смогу ли я такое реализовать при помощи msOptionsPrice2:
Есть Опция(общая) размеры sizes (тоже множественный выбор, но не стандартная size), сделал так чтобы были уже готовые значения и можно было просто выбирать.

так вот:
Есть несколько размеров, допустим 10, 30, 50. Они общие, т.е. эта опция для групп ресурсов одинаковая. Соответственно на каждую группу ресурсов своя цена на размеры. Допустим так:
- Категория 1
	10 цена 1000р
	30 цена 1200р
	50 цена 1400р
- Категория 2
	10 цена 1100р
	30 цена 1300р
	50 цена 1500р
В каждом товаре выбираю только размер товара, из предложенных. К примеру:
Товар 1 - размеры 10, 30
Товар 2 - размеры 50
Товар 3 - размеры 10,50
Соответственно нужно выводить опции-цены только которые выбраны для товара.

Можно ли чтобы не вбивать в каждый товар размер и его цену(создавать модификации), а назначить глобально как-то, т.е. для Категории как в коде выше?

Вопрос не к компоненту, лучше наверно использовать существующее поле size, но как там связать это все и чтоб были значения(т.е. размеры 10, 30, 50 уже вбиты и можно было только выбирать)?
Константин Ильин
21 октября 2016, 16:15
0
от блин, как все просто оказалось)) Спасибо)
Константин Ильин
21 октября 2016, 09:44
0
Вопрос «новичковый», как приводить массив, который отдает newQuery, в массив без префикса
Array
(
    [0] => Array
        (
            [msProduct_id] => 1
            [msProduct_type] => document
	    ........
	)
)
Чтобы был такого вида:
Array
(
    [0] => Array
        (
            [id] => 1
            [type] => document
	    ........
	)
)
Константин Ильин
20 октября 2016, 14:21
0
Да это так. Я это понимал, но я не понимал почему открыв страницу home запускался сниппет другого ресурса т.е. test 1.
Константин Ильин
20 октября 2016, 14:19
+1
Обновился, все решилось.
ато я 2-а дня мучился(даже вывело из себя немного:) и не понимал где собака зарыта, только вчера нашел проблему.
Спасибо Василий! и за оперативность конечно огромное спасибо!
Константин Ильин
20 октября 2016, 14:13
0
На разных хостингах и сайтах пробовал, всегда 1 не обрабатывается. Версия конечно была свежая, до обновления от Василия :)
Константин Ильин
20 октября 2016, 07:31
0
Как написал Александр, массив должен быть одномерным, т.е.
/*array { 
	["value"]=> "Название параметра" 
	["count"]=> "3" 
}*/
array { 
	["Название параметра"]=> "3" 
}

/*array { 
	["value"]=> "Название параметра 2" 
	["count"]=> "3" 
}*/
array { 
	["Название параметра 2"]=> "3" 
}
Если несколько массивов, то лучше их объединить и передать в toPlaceholders
$arrOne = array ( 
	"placeholderOne" => "3" 
);
$arrTwo = array (
	"placeholderTwo" => "5" 
);
$array = array_merge($arrOne,$arrTwo);
$modx->toPlaceholders($array);

//также можно указать любой префикс
$modx->toPlaceholders($array, 'my.');
Константин Ильин
20 октября 2016, 07:19
+2
Это бесплатный компонент, не нравится, не используй, или дай объявление в раздел объявлений о работе.
Как-то Вы не правильно судите, я пытаюсь разобраться в баге(если конечно он таковой) не только для себя ведь, а Вы говорите бросай и принимай как есть. Странный Вы человек.