• avatar Voker
  • 0
сниппет Utmdata:

if((isset($_GET['utm_source']) && $_GET['utm_source']=='yandex' && isset($_GET['utm_medium']) && $_GET['utm_medium']=='cpc' && isset($_GET['utm_campaign']) && $_GET['utm_campaign']=='solid') || ($_SESSION['utm_source']=='yandex') || ($_GET['utm_campaign'] == 'polyplast_ural_dobavki' || $_GET['utm_campaign'] == 'polyplast_ural_klei' || $_GET['utm_campaign'] == 'polyplast_ural_briketi') ){
                 $_SESSION['utm_source']='yandex';
                 return 1;
        }else{
                return 0;
        }


вывзывал в условии:

[!if? &is=`[!Utmdata!]:=:0` &then=`одно` &else=`второе`!]
Собираюсь попробовать его вместо CfgTV, чтобы понять — есть ли смысл в замене.

А автора здесь давным-давно нету, похоже, забросил он Эво.
Тут еще недавно про какую-то mgallery запрос был, я даже не слыхал о такой )
Если не трудно, опубликуйте рабочий вариант, может пригодиться и сэкономит время, чтоб не писать.
Да, можно и так, но тогда — прощай, будущее ))
В зависимости от версии PHP, можно использовать два либо три различных PHP API для доступа к базе данных MySQL. В PHP 5 доступны следующие расширения: устаревшее mysql, mysqli и PDO_MySQL. В PHP 7, устаревшее расширение mysql не доступно и оставлены только два последних.
php.net/manual/ru/mysql.php
Можете попробовать в файле config.inc.php
$database_type = 'mysqli';
заменить на
$database_type = 'mysql';
но лучше переписать запросы к БД, как вам советовали выше.
А вообще, лучше выкиньте mgallery и поменяйте на SimpleGallery.
В логах написано, что используется PHP-функция прямого запроса к БД mysql_fetch_array.

Эту и подобные ей функции нужно заменить на запросы к БД через DBAPI MODx.

Конкретно mysql_fetch_array нужно поменять на $modx->db->getRow
натупил сам с кодом в сниппете, стыдно. все работает
Спасибо за наводку, все дело в кеше. Дело в том что если я вызываю сниппеты некешируемые метки не сохраняются контент заменяется только на первой страничке. Пробовал по разному вызывать сниппеты

[[if? &is=`[!Utmdata!]:=:0` &then=`одно` &else=`второе`]]
[!if? &is=`[!Utmdata!]:=:0` &then=`одно` &else=`второе`!]
[!if? &is=`[[Utmdata]]:=:0` &then=`одно` &else=`второе`!]

результаты либо сниппет кешировал и потом весь контент заменялся даже когда приходил обычный пользователь или заменялся только на первой страничке захода. Как сделать кеширование сниппета только для текущей сессии?
И если это сниппет, то подключение api не нужно
Возможно вы кешируете сниппет? Вызывайте вот так [!snippet!]
  • avatar Voker
  • 0
как вообще в ево правильно работать с сессиями?
Не проверял, но пока никаких проблем не возникало.
  • avatar Dreamer
  • 0
Я на этапе подготовки письма к отправке вызываю prepare-сниппет, в котором вызываю phpthumb с нужными параметрамии. Это в случае с FormLister.

В случае с eForm — опять-таки вызываю phpthumb в функции eFormOnBeforeMailSent($fields), сохранив результаты работы сниппета в $fields.

Можно также сделать так — заготовить чанк для заказанного товара, где будет прописан вызов phpThumb. А перед отправкой письма для заказанных товаров таблицу с заказанными товарами построить с помощью того же DocLister или своего сниппета, передав ему id товаров и этот чанк, сохранить сгенерированный html в плейсхолдер, а в шаблоне письма просто вывести этот плейсхолдер.
  • avatar Dreamer
  • 0
Они ведь сгенерируются в папке cache? А если ее вычистить, что будет?
  • avatar tiptop
  • 0
Тогда замените "[+current_image+]" на "[+needed_thumb+]" в чанке который выводится в письме для товара.
А tv needed_thumb генерируйте как я писал выше. Вот пример:
$e=&$modx->Event;
if($e->name=='OnDocFormSave'){
	$id=$e->params['id'];
	$table=$modx->getFullTableName('site_tmplvar_contentvalues');
	$tv_image_id=6;
	$tv_thumb_id=10;
	//--------------------------
	$res=$modx->db->select('value',$table,"tmplvarid=".$tv_image_id." AND contentid=".$id);
	if($res and $modx->db->getRecordCount($res)>0){//есть изображение
		$tv_image=$modx->db->getValue($res);
		$res=$modx->db->select('value',$table,"tmplvarid=".$tv_thumb_id." AND contentid=".$id);
		if($res and $modx->db->getRecordCount($res)<=0){//нет превьюшки
			$options='w=570,h=570,zc=1';
			$params=array(
				'input'=>$tv_image,
				'bg'=>'FFFFFF',
				'options'=>$options
			);
			$tv_thumb=$modx->runSnippet('phpthumb',$params);
			//записываем
			$fields=array(
				'tmplvarid'=>$tv_thumb_id, 
				'value'=>$tv_thumb,
				'contentid'=>$id
			);
			$modx->db->insert($fields,$table);
		}
	}
}

По идее $tv_image_id, $tv_thumb_id и $options можно сделать параметрами плагина.
  • avatar MrSpike
  • 0
Да, все верно.
Сейчас изображения в письме отображаются, но не тех размеров, так?