Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #70
Сергей Шлоков
15 декабря 2015, 17:40
3
0
Вот уже было.
&where = `["date_event >= now()"]`
Василий Наумкин
24 ноября 2015, 19:43
3
+3
Уже можно обновляться =)

{if $_modx->isMember('Users')}
	Для юзеров
{else}
	Для всех остальных
{/if}
Василий Столейков
23 ноября 2015, 22:27
1
+1
Да нет, вызываю сниппет на той же странице что и форма, а форму посылаю на саму себя через POST. А сниппет уже редиректит на ту страницу, которая указана в скрытом поле pageId у формы:
<form class="form-horizontal col-xs-12" action="[[~[[*id]]]]" method="post">
    <input type="hidden" value="35" name="pageId">

Сниппет:
<?php
if(isset($_POST['pageId'])) {
    $pageId = $_POST['pageId'];

    // тут нужно перечисляем все нужные нам GET параметры
    $parametrs = array();
    if(isset($_POST['country']) && !empty($_POST['country'])) {$parametrs[country'] = $_POST['country'];}
    
    // создаём из них ссылку
    if (!empty($parametrs)){
    	foreach($parametrs as $key => $value){
    		if ($firstItemExist == 1) {
    			$urlParametrs .= "&" . $key . "=" . $value;
    		}
    		else {
    			$urlParametrs = "?" . $key . "=" . $value;
    			$firstItemExist = 1;
    		}	
    	}
    }
    
    $url = $modx->makeUrl($pageId, '', '', 'full');
    $redirectLink = $url.$urlParametrs;

    header('Location: '.$redirectLink);
    die();
    
}
else {return;}
Максим
07 октября 2015, 13:52
8
+2
Может быть кому-то пригодится простенький сниппет для вызова mFilter2, который дописывает в параметр filters имена назначенных для категории опций — эти опции выводятся в фильтре чекбоксами:
<?php
$catid = $modx->resource->id;
$q = $modx->newQuery('msCategoryOption');
$q->select(array(
    'msCategoryOption.category_id',
    'msCategoryOption.option_id',
    'mso.key'
    ));
$q->where(array(
    'msCategoryOption.category_id' => $catid
    )
    );
$q->leftJoin('msOption','mso','msCategoryOption.option_id = mso.id');
$q->prepare();
$q->stmt->execute();
$options = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$_options = array();
foreach ($options as $option) {
    $_options[] = 'msoption|'.$option['key'];
}
$_options = implode(',',$_options);
$scriptProperties['filters'] = implode(',',array($scriptProperties['filters'],$_options));
return $modx->runSnippet('mFilter2',$scriptProperties);
Василий Наумкин
31 августа 2015, 05:54
4
0
Условия в виде массива в msProducts не принимаются, потому что он ожидает их всегда в виде JSON. Придётся так и указывать:
{$_modx->runSnippet('!msProducts', [
    'parents' => 3,
    'sortby' => '{
        "Data.new": "desc",
        "msProduct.editedon": "desc"
    }',
    'includeThumbs' => '150x150',
    'where' => '{
	"Data.price:>=": 0
    
    }',
    'limit' => 4,
    'showLog' => true,
    'tpl' => '@INLINE
		bla-bla-bla
	'
])}
У pdoResources такой проблемы нет.

Кстати, если очень хочется использовать именно массивы — то можно воспользоваться тем, что json_encode в Fenom является разрешённой PHP функцией:
{$_modx->runSnippet('!msProducts', [
    'parents' => 3,
    'sortby' => json_encode([
        "Data.new" => "desc",
        "msProduct.editedon" => "desc"
    ]),
    'includeThumbs' => '150x150',
    'where' => json_encode([
	    "Data.price:>=" => 0
    ]),
    'limit' => 4,
    'showLog' => true,
    'tpl' => '@INLINE
		bla-bla-bla
	'
])}
Илья Уткин
25 августа 2015, 13:52
3
+1
Нашел я, в чем проблемка. На Shared-хостингах распространена практика использования связки NGINX и Apache. В этом случае вся статика (картинки и текстовые файлы) обрабатывается NGINX'ом, а php-файлы обрабатывает Apache.

Таким образом, файл /core/docs/changelog.txt будет доступен независимо от того, что указано в .htaccess, а MODX проверяет доступность именно этого файла.

Выход один. Сначала проверить, что у вас не открывается в браузере файл /core/cache/logs/error.log, а потом просто удалить файл changelog.txt

Тогда ошибка исчезнет.
Пётр Молчанов
22 июля 2015, 10:52
1
+2
как отправить письмо:
$message = $modx->getChunk('ваш_чанк', массив_переменных); // либо можно без чанка тело просто оформить
                $modx->getService('mail', 'mail.modPHPMailer');
                $modx->mail->set(modMail::MAIL_BODY,$message);
                $modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender'));
                $modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SUBJECT,'тема письма');
                $modx->mail->address('to',$email); // тут мыло кому отправляете
                $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                $modx->mail->setHTML(true);
                
                if (!$modx->mail->send()) {
                  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
                  return false;
                }
                $modx->mail->reset();
событие OnUserSave rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/onusersave
я использую такой вариант:
if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
так получаем мыло
$profile = $user->getOne('Profile');
$email = $profile->get('email');
тут ваш код, либо мой, который выше
}
Максим Кузнецов
30 июня 2015, 14:19
2
+1
Да, конечно:
&leftJoin=`{
		"Image": {
			"class": "msResourceFile",
			"on": "modResource.id = Image.resource_id AND Image.parent = 0"
		},
		"Thumb": {
			"class": "msResourceFile",
			"on": "Image.id = Thumb.parent AND Thumb.path LIKE '%120x90%'"
		}
	}`

Вот тут более подробная информация и заодно ответ на ваш первый вопрос.
Максим Кузнецов
29 июня 2015, 18:05
2
+1
Ок, я поставил minishop2 и mSearch2. Прикладываю рабочие параметры Join'a:
&class=`modResource`
	&leftJoin=`{
		"Thumb": {
			"class": "msProductData",
			"on": "modResource.id = Thumb.id"
		 }
	}`
	&select=`{
		"modResource": "*",
		"Thumb": "Thumb.thumb as preview"
	}`
— вызывать как [[+preview]]. Все дело было в классе — msProductData вместо msProductFile…

Ненавижу LeftJoin..)
Максим Кузнецов
26 июня 2015, 14:36
1
0
mSearch вызывает результаты через pdoResources, а значит:

а) можно вывести thumbs через leftJoin вот так (данный пример для вывода превьюшек msGallery2, а для msGallery minishop'a, соответственно, нужно прописать его данные с бд):
&leftJoin=`{
	"75x75": {"class":"msResourceFile","alias":"75x75", "on": "75x75.resource_id = modResource.id AND 75x75.path LIKE '%/75x75/' AND 75x75.rank=0"}
}`
&select=`{
	"modResource":"*"
	,"75x75":"75x75.url as 75x75"
}`
б) можно применить параметры &class=`msProduct` &element=`msProducts` &includeThumbs=`75x75`

— ну и 75х75 заменить на желаемый размер превьюшек