Vladimir

Vladimir

С нами с 25 июня 2021; Место в рейтинге пользователей: #285
Vladimir
01 июня 2023, 17:20
0
Главная вещь что мне нужно это отправить тот самый сгенерированный файл( его ссылку), ответ мне приходит от ajaxform и в ответе есть уже готовый ключ data, но как туда отправить данные, если мой файл генерируется в хуке formit. Судя по исходному коду AJaxForm
core/components/ajaxform/model/ajaxform/ajaxform.class.php
Метод success принимает 3 параметра.


и согласно этому методу, код ниже валиден и должен вернуть данные на фронт ajaxform в триггер af_complete
return $AjaxForm->success(
        'Спасибо! Ваш отзыв отправлен', 
        array(
            'invoice_of_payment' => $generateInvoice
        )
    );
Сообщение просто для теста стоит.
Если я в хуке верну true или просто любое другое, то ajaxform перестаёт работать, когда делаю через
return $AjaxForm->success
то хотя бы всё работает, по этому я пытаюсь результат засунуть туда.

Как я понял мой код будет работать без проблем если я заменю formit на свой снипет, а что если мне нужен именно всё в таком виде, как мне подбросить эти данные из хука формита в ответ ajaxform
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))
);
Но всё равно сообщение не меняется и данные которые отправляю они не поступают на фронт, в доках не нашёл ничего. Данные хочу подставить в хуке, ведь на фронт всё равно приходит ответ, как мне подставит то что нужно мне?
Vladimir
01 июня 2023, 14:31
0
Спасибо огромное, работает, я так и думал что могу поставить значение в хуке, только думал что нужно всё же создать будет тег, и не знал как прикрепить сам
Vladimir
28 мая 2023, 15:04
0
Так
$words = json_decode($res->getTVValue('words'), true);   
$words2 = json_decode($res->getTVValue('words2'), true);

$words3 = json_decode($res->getTVValue('words3'), true);   
$words4 = json_decode($res->getTVValue('words4'), true);   

$wordsToExclude = array_unique(array_merge($words, $words2, $words3, $words4));

$pattern = '/(?:' . join('|', $wordsToExclude) . ')/i';
Vladimir
13 мая 2023, 09:00
0
Я тоже не знаю, в офферах есть товаров допустим 20, и 15 из них с нулевым количеством, и на событие mSyncBeforeProductOffers я получаю количество и снимаю с публикации товар, и из этих 15 товаров с нулевым количеством обрабатывается только 1
Vladimir
12 мая 2023, 12:55
0
Может я чего не вижу? прошёлся по все сущ событиям и не нашёл ничего подходящего как «mSyncBeforeProductOffers», но оно работает только 1 раз буквально, есть такое событие mSyncOnProductImport, почему нет такого же но для торгового предложения?
Vladimir
08 мая 2023, 18:06
+1
А так
'where' => ["Data.price: >=" => "20000", "AND:Data.price: <=" => "11122990"]
Или на дефолте

&where=`{"Data.price:>=": "37000", "AND:Data.price:<=": "40000"}`
Фулл код на феноме
{'!mFilter2' | snippet : [
  'paginator' => 'pdoPage@catalog_filters',
  'limit' => '12',
  'parents' => '0',
  'resources' => '[[!mSearch2:default=`999999`?returnIds=`1`&limit=`0`]]',
  'class' => 'msProduct',
  'element' => 'msProducts',
  'setMeta' => '1',
  'tplOuter' => 'catalogproducts',
  'tpls' => 'TovarTpl',
  'snippet' => 'msProducts',
  'context' => '[[*context_key]]',
  'cultureKey' => '[[++cultureKey]]',
  'where' => ["Data.price: >=" => "20000", "AND:Data.price: <=" => "11122990"],
  'sort' => '
			id:asc
		',
  'filters' => '
		    ms|price:number,
			msoption|brand:default,
			msoption|tags:default,
			msoption|polotno_type:default,
			ms|stal,
			msoption|filter_material:default,
			msoption|otdelka:default,
			msoption|color:default,
			msoption|glass:default,
			msoption|style:default,
			msoption|available:default
			',
  'aliases' => '
		    msoption|filter_color==color,
		    msoption|style==style,
		    msoption|glass==steklo,
		    msoption|brand==brand,
		    msoption|filter_material==material,
		    msoption|tags==tags,
		    ms|steel==steel,
		 
		',
  'tplFilter.outer.default' => 'myFilterOuter',
  'tplFilter.row.default' => 'myFilterCheckbox2',
  'tplFilter.outer.ms|price' => 'myFilterSlider',
  'tplFilter.row.ms|price' => 'myFilterNumber',
  'suggestionsMaxResults' => '30000',
  'showlog' => '1',
]}
Можешь сам переводить всё на феном, удобный инструмент
Vladimir
01 мая 2023, 11:55
0
Я использую для бэкапа бд этот скрипт github.com/ifsnop/mysqldump-php/blob/master/src/Ifsnop/Mysqldump/Mysqldump.php хорошо работает бэкапил бдшку с 50к товарами, и кучей страниц, конечно же через крон
Vladimir
27 апреля 2023, 14:58
0
Эта ошибка появляется после нажатия на кнопку? нужно смотреть сами ваши файлы, так от сюда не помочь
Vladimir
27 апреля 2023, 11:19
0
Если вы не обновляли, или ничего не делали, что скорей всего проблема в хостинге, возможно отключили одну из опций благодаря которой работает это плагин, на подобии exec. Что у вас за хостинг? обычно при нажатии на кнопку конвертировать, он при ошибки пишет ошибку прям туда.
Vladimir
18 апреля 2023, 06:11
0
Перешёл на ваш сайт, и не нашёл там того что у вас на скрине
Vladimir
17 апреля 2023, 19:25
0
Покажите подробней вашу страницу, затем покажите как она выглядит, покажите как выглядит, в идеале дать ссылку, так как по идеи ваш код рабочий. А вообще лучше сделать вам было так: сделать 1 модальное окно, и потом после выбора пользователем просто брать textContent выбранной цены, и затем эту цену ставить в ваш блок где нужно, и это избавит вас от мусора, и геморроя. Не нужно ничего будет скрывать и раскрывать.
Без полной картины вам тут не помочь, так как ошибка может возникнуть в другом месте в идеале дать ссылку на страницу где у вас проблема.

let productSusbscriptions = document.getElementById('select');
let productSubscriptionModalWindow = document.querySelector('.subscription-window');
let productSubscriptionPrice = document.querySelector('.product-price', productSubscriptionModalWindow);

productSusbscriptions.addEventListener('change', function() {

    productSubscriptionPrice.textContent = productSusbscriptions.value;
    productSubscriptionModalWindow.style.display = "block";

});
Vladimir
16 апреля 2023, 12:41
+1
Простейшая задача
Почитайте разные сайты где описывается феном, просто прочитайте каждый блок, потом будет проще делать всё, вот один из сайтов
{set $productPicturesLength = $files | len}

{if $productPicturesLength > 1}
Тут галерея
{else}
иначе тут просто 1 фото
{/if}
Vladimir
08 апреля 2023, 18:56
1
0
Из того что написано в описании могу дать такой пример.
Будет конкретный пример, распишу по лучше, ниже создаст только 1 ресурс.
<?php

$newResourceParentId = 2;
$newResourceUrl = 'super-product-1337';
$newResourcePageTitle = 'Лучший продукт в своём роде';
$newResourceTemplate = 8;

$createNewResource = $modx->runProcessor('resource/create', array(
    'parent' => $newResourceParentId,
    'pagetitle' => $newResourcePageTitle,
    'alias' => $newResourceUrl,
    'template' => $newResourceTemplate,
    'published' => 1
));

if ($createNewResource->isError()) {
    echo "Не могу создать страницу с таким заголовком='$newResourcePageTitle'
";
    return;
}
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';
		}
	}
}
Vladimir
05 апреля 2023, 13:34
0
При полной настройки должно работать, без самого кода, и настроек, из чата не помочь, если что можете стучаться @invictusmaneobart
Vladimir
31 марта 2023, 18:43
0
Сделал так и заработало prnt.sc/-KzDCk1OgHuX
Сменил «Кодировка подключения:» на «utf8mb4» и заработало, хотя на сервере баззы данных utf8mb3, до этого Сопоставлении стояло как «utf8mb4_general_ci» но сменил на 3, в целом при установке поменял кодировку и всё заработало
Vladimir
31 марта 2023, 18:33
0
в phpmyadmin Сопоставление стоит «utf8mb3_general_ci»
Vladimir
31 марта 2023, 14:57
0
Не подскажите есть аналог fastuploadtv для modx3? тоже хотел сделать сайты, но без fastuploadtv много гемороя для тех кто будет заполнять, да и проще организовать с ним,
Vladimir
28 марта 2023, 10:32
0
В голову пришло попробовать параметр list в доках не совсем понятно что он делает, и что он включает себя, указал два разных названия и работает как мне нужно