Андрей

Андрей

С нами с 28 февраля 2013; Место в рейтинге пользователей: #139
Андрей
24 января 2018, 12:15
5
0
Если там ничего мудреного нету, то подключить в них pdoTools и заменить все вызовы чанков через него:

//подключаем в начале сниппета
$pdo = $modx->getSetvice('pdoFetch');

//далее везде в сниппете заменить
$modx->getChunk

// на обработку через pdoTools
$pdo->getChunk

Так же можно сделать простейший поиск через pdoPage

{'!pdoPage' | snippet : [
  'parents' => 0,
  'includeContent' => 1,
  'context' => $_modx->context.key,

  'where' => [
    [
      'context_key' => $_modx->context.key
    ],
    [
      'AND:pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
    ]
  ] | toJSON,

  'tpl' => ''
]}
Андрей
24 января 2018, 12:07
+1
Попробуйте так
{'!pdoPage' | snippet : [
    'loadModels' => 'gallery',
    'class' => 'galAlbum',
    'select' => [
        'galAlbum' => '*'
    ],
    'sortby' => 'id',
    'tpl' => '@INLINE {$name}'
];
Андрей
22 января 2018, 17:22
2
+2
Написать парсер xml и так же по крону обновлять товары.

Просто в файле подключаете modx api, разбираете xml и из готового массива с данными товаров обновляете цены с помощью процессора modx.

если очень схематично, то так
// API
require_once '/absolute/path/to/modx/config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';
$modx = new modX();
$modx->initialize('mgr');
$modx->getService('error','error.modError', '', '');

//Разбор xml
$xmlData = array(); // данные о товарах

// Обновление товаров
foreach ($xmlData as $item) {

	$id = $item['id'];
	$action = 'create';

	if ($product = $modx->getObject('msProduct', $id)) {
		$data = $product->toArray();
		$data['price'] = $item['price'];

		$response = $modx->runProcessor('resource/'.$action, $data);

		if ($response->isError()) {
			$modx->log(1, $response->getResponse());
		}
	}

}

Если нужно обновлять только одно поле, то можно не через процессор а так
if ($product = $modx->getObject('msProduct', $id)) {
	$product->set('price', $item['price']);
	$product->save();
}
Андрей
22 января 2018, 16:52
+1
Думаю можно с помощью маршрутизации сделать — bezumkin.ru/sections/tips_and_tricks/2918/

Разбирать url, по алиасу находить товар и формировать страницу.
Андрей
18 января 2018, 17:14
+1
MinifyX не стоит случайно? У меня такое бывает иногда когда склеиваешь все стили им.
Андрей
17 января 2018, 09:26
0
По идее так должно работать

'OR:Adr:LIKE' => '%'~ $.get.search | escape ~'%',
'OR:NameReal:LIKE' => '%'~ $.get.search | escape ~'%',
'OR:URL:LIKE' => '%'~ $.get.search | escape ~'%',

Можно добавить параметр showLog => 1 и посмотреть почему не выводится.
Андрей
16 января 2018, 11:41
1
+2
У simpleSearch есть параметр ids, можете вызвать 3 сниппета и указать в нем разные категории.

Можно с помощью pdoPage сделать.

Форма с поиском
<form action="/search/" mathod="get">
	<input name="search" value="{$.get.search | escape}">
	<button>Найти</button>
</form>

Результаты
{set $category1 = '!pdoPage' | snippet : [
	'parents' => 0 //тут нужная категория
	'includeContent' => 1,
	'tpl' => '@INLINE {$pagetitle}',
	'where' => [
		'pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
	] | toJSON
]}

{if $category1?}
	<div>В каткгории 1 найдено:</div>
	{$category1}
{/if}
Андрей
14 января 2018, 13:27
0
При возвращении пользователя на сайт просто смотреть есть ли у него сессия с корзиной и есть ли там товары, если есть, то поменять цены.
Андрей
14 января 2018, 13:11
0
Просто по условию не получается вывести?
[[pdoResources?
	&parents=`0`
	&includeTVs=`тв_с_автором`
	&where=`{"тв_с_автором": "имя_или_id_автора"}`
]]
Андрей
21 декабря 2017, 13:23
1
0
Как-то так, не уверен, что LIKE написал правильно, но суть понятна думаю.

$c = $modx->newQuery('modResource');
$c->leftJoin('modTemplateVarResource', 'TV', 'TV.tmplvarid=4 AND TV.value LIKE %modResource.id%');
$c->where(array(
  'modResource.parent' => 628
));
$c->select(array(
  'modResource.uri as uri',
  'modResource.pagetitle as pagetitle',
  'TV.id as tv_id',
  'TV.value as tv_value'
));

if ($c->prepare() && $c->stmt->execute()) {
  $data = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}

if (!empty($data)) {
  $array = array();

  foreach ($data as $value) {
    // тут формируете нужный массив
  }

  print_r($array);
}
Андрей
20 декабря 2017, 18:13
+4
Как устану на каждом сайте подключать обязательно сделаю дополнение.
Андрей
20 декабря 2017, 17:04
+3
Те кто поддерживает/разрабатывает сайты и без дополнения справятся, а заказчик который ничего не понимает наймет того кто понимает.

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

Можно еще запилить дополнение для подключения jQuery за косарь.
Андрей
20 декабря 2017, 16:56
0
Вам в раздел Работа, там без проблем импортируют. Готового решения вряд ли найдете.
Андрей
20 декабря 2017, 16:52
0
Не проще просто скрипт подключить, как указано на сайте? Даже настраивать ничего не нужно.
Андрей
14 декабря 2017, 20:19
+1
Этот
Андрей
14 декабря 2017, 18:24
+1
Попробуйте в форму добавить скрытое поле (возможно не обязательно)
<input type="hidden" name="pdf_link">

В сниппете SendFilePDF, который отправляет письмо с файлом, будет доступно поле pdf_link
$fields = $hook->getValues();
$file = $fields['pdf_link'];

Т.е. получается, что вы в сниппете pdf генерируете файл и записываете в поле pdf_link, а в сниппете SendFilePDF уже получаете значение со ссылкой.

Либо просто объедините pdf и SendFilePDF в один сниппет.

Попробуйте еще в чанке с письмом вывести [[+pdf_link]]
Андрей
14 декабря 2017, 09:06
0
Можете показать как вы вызываете сниппет и как отправка происходит?

Вообще если в сниппет передан параметр file_name, то должна появиться переменная $file_name.

Можно конечно получить забрать значение из сниппета так:
$file_name = $modx->getOption('file_name', $scriptProperties);

// или так

$file_name = $scriptProperties['file_name'];
Андрей
12 декабря 2017, 20:57
0
Через return тоже работает.
Андрей
06 декабря 2017, 13:40
0
Потом будет вопрос — Как сохранить 1000 ресурсов)
Андрей
06 декабря 2017, 09:48
+1
Там где идет массив с данными, добавьте туда строку просто:

$output .= $modx->getChunk($tpl ,array(
   'idx' => $i,
   'username'  => $post->user->username,
   ...
);