Vladimir

Vladimir

С нами с 25 июня 2021; Место в рейтинге пользователей: #285
Николай Савин
25 июля 2023, 08:33
1
0
Пройдите в системные настройки. Найдите там настройку extension_packages. Именно она отвечает за инициализацию пакетов. Скорее всего в ней осталась запись о пакете hybridauth. Отсюда и попытки инициировать отсутствующий пакет. Удалите оттуда запись — и будет вам счастье.
ВНИМАНИЕ. Там формат JSON. Удаляйте кусочек про hybridauth аккуратно, чтобы не сломать записи о других пакетах.
Павел Романов
03 июля 2023, 10:15
2
+4
Чтобы убрать атрибуты и заодно удалить слеши у одиночных тегов можно сделать плагин на событие onWebPagePrerender )):

<?php
if($modx->resource->get('content_type') == 1){
    $arr1 = array('type="text/css"', 'type="text/javascript"',' />','/>');
    $arr2 = array('','','>','>');
    $output = &$modx->resource->_output;
    $output = str_replace($arr1,$arr2,$output);    
}
Vladimir
01 июня 2023, 15:06
1
0
Можете пожалуйста подсказать как вернуть какие-нибудь данные во фронт через ajaxForm пытался так:

return $AjaxForm->success('Спасибо! Ваш отзыв отправлен', array(
    'data' => array('invoice_of_payment' => $generateInvoice))
);

Потом так 1

return $AjaxForm->success('Спасибо! Ваш отзыв отправлен', array('invoice_of_payment' => $generateInvoice)
);
Потом так 2

return $AjaxForm->success(array(
    'status' => 1,
    'message' => 'Спасибо! Ваш отзыв отправлен',
    'data' => array('invoice_of_payment' => $generateInvoice))
);
Но всё равно сообщение не меняется и данные которые отправляю они не поступают на фронт, в доках не нашёл ничего. Данные хочу подставить в хуке, ведь на фронт всё равно приходит ответ, как мне подставит то что нужно мне?
Алексей Смирнов
01 июня 2023, 11:13
1
+3
Прикрепляется очень просто. Ответа на поверхнисти нет особо, будет тут.
Для начала создаем сниппет в админке — это будет наш хук. Примерное содеражание его таково на примере xls:
$myfile = array(
    "name" => "Name-of-file.xls",
    "type" => "application/vnd.ms-excel",
    "tmp_name"=> MODX_ASSETS_PATH."path_more/Name-of-file.xls",
    "error"=> 0
    );
$hook->setValue('file', $myfile);
return true;
Тут вам нужно будет указать реальные имена файла в нужных местах и полный путь к файлу в tmp_name. Тут пример с папкой /assets/.
Ну и указать MIME тип присоединяемого файла. (type)

После указываем данный хук в formIT(ajaxForm) и проверяем что все приходит.
У формы на фронте еще должно быть указано enctype=«multipart/form-data» в теге form:
<form method="post" action="/" enctype="multipart/form-data">
Тестируйте, проверяйте.
Удачи.
Николай Савин
18 мая 2023, 10:49
1
+2
Артур ты тоже обрати внимание. Есть шикарный метод
$modx->updateCollection();
Он позволяет быстро без перебора обновить записи в базе по заданным критериям.
Да — нужно знать про него, что он сразу в базу лезет, и не задействует никакие модели, плагины.
Конкретно в этом случае — это норм.
Vladimir
08 апреля 2023, 13:53
2
0
[РЕШЕНО] Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через pdoResources указав класс msCategoryOption

Буду рад кто исправит это код(КОД РАБОЧИЙ), чтобы был чище, так как делался на быструю руку решить задачу, а так же не было знаний для реализации этой задачи.
<?php

function prepareSqlQuery($sqlQuery){
	global $modx;
	return $modx->query($sqlQuery);
}


function extractResultsFromQueryObject($sqlQueryResult, $itemsToRetreive, $multiDimensionRetreive=false){
	global $modx;
	$results = array();

	if (is_object($sqlQueryResult)) {
		while ($row = $sqlQueryResult->fetch(PDO::FETCH_ASSOC)) {
			if($multiDimensionRetreive){
				foreach($itemsToRetreive as $key => $value){
					array_push($results, $row[$key], $row[$value]);
				}	    		
			} else {
				foreach($itemsToRetreive as $itemToRetreive){
					array_push($results, $row[$itemToRetreive]);
				}
			}
		}
	}
	return $results;
}


$prepareSqlQueryOfRetreiveCategories = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msCategory"');
$categoriesIds = extractResultsFromQueryObject($prepareSqlQueryOfRetreiveCategories, array('id'));

if(count($categoriesIds) > 0){

	foreach($categoriesIds as $categoryId){

		$productsQueryObject = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msProduct" AND modx_site_content.parent = "'.$categoryId.'"');
		$productsIds = extractResultsFromQueryObject($productsQueryObject, array('id'));

		if(count($productsIds) > 0){
			$productsIds = implode(",", $productsIds);

			$distinctProductOptionsSqlQuery = prepareSqlQuery('SELECT DISTINCT modx_ms2_product_options.key FROM `modx_ms2_product_options` WHERE modx_ms2_product_options.product_id IN ('.$productsIds.")");
			$distinctProductOptions = extractResultsFromQueryObject($distinctProductOptionsSqlQuery, array('key'));

			$uniqueOptions = "";
			$uniqueOptionsLength = count($distinctProductOptions);
			foreach ($distinctProductOptions as $idx => $value) {
				if($idx >= $uniqueOptionsLength - 1){
					$uniqueOptions .= "'$value'";
				} else{
					$uniqueOptions .= "'$value',";
				}
			}


			$uniqueOptionsIdsSqlQuery = prepareSqlQuery('SELECT modx_ms2_options.id,modx_ms2_options.key FROM `modx_ms2_options` WHERE modx_ms2_options.key IN ('.$uniqueOptions.')');
			$uniqueOptionsIds = extractResultsFromQueryObject($uniqueOptionsIdsSqlQuery, array('id'));


			/* #################################### ##################################### */
			foreach($uniqueOptionsIds as $idx => $uniqueOptionId){
				if (!$cop = $modx->getObject('msCategoryOption', array('option_id' => $uniqueOptionId, 'category_id' => $categoryId))) {
					$table = $modx->getTableName('msCategoryOption');
					$sql = "INSERT INTO {$table} (`option_id`,`category_id`,`active`) VALUES ({$uniqueOptionId}, {$categoryId}, 1);";
					$stmt = $modx->prepare($sql);
					$stmt->execute();
				} else {
					$q = $modx->newQuery('msCategoryOption');
					$q->command('UPDATE');
					$q->where(array('option_id' => $uniqueOptionId, 'category_id' => $categoryId));
					$q->set(array('active' => 1));
					$q->prepare();
					$q->stmt->execute();
				}            
				
			}
			/* #################################### ##################################### */
			echo 'Done';
		}
	}
}
Андрей Шевяков
31 марта 2023, 15:00
1
+3
У дополнения mixedImage в описании написано что есть поддержка MODX3. Дополнение аналог FastUploadTV.
Артур Шевченко
10 февраля 2023, 20:18
1
+2
Как-то у тебя всё сложно.
Вот так добавить в очередь
$registry = $modx->getService('registry', 'registry.modRegistry');
$QM = $registry->getRegister('sendToPlatforms', 'registry.modDbRegister');
$branch = '/default/';
$QM->subscribe($branch);
$QM->send($branch, $data); // $data может быть стройкой или массивом.
А вот так прочитать
$registry = $modx->getService('registry', 'registry.modRegistry');
$QM = $registry->getRegister('sendToPlatforms', 'registry.modDbRegister');
$branch = '/default/';
$QM->subscribe($this->branch);
$items = $QM->read([
            'poll_limit' => 1,
            'msg_limit' => 1000,
            'include_keys' => true,
            'remove_read' => true
        ]);
А ещё про очереди в modx хорош написано тут.
Виталий Киреев
17 января 2023, 16:50
1
+1
В первом варианте вы не подключили сервис
$mSync = $modx->getService('msync', 'mSync', $modx->getOption('msync_core_path', null, $modx->getOption('core_path') . 'components/msync/') . 'model/msync/', array());
И дальше должен работать код.