Владислав

Владислав

С нами с 11 августа 2015; Место в рейтинге пользователей: #1008
алексей
11 июля 2018, 13:21
2
+1
Вау-я програмистттттт
отвечу сам, нашел в инете
<?php
/*Активируем почтовый сервис MODX*/
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));

/*Адрес получателя нашего письма*/
$modx->mail->address('to', 'komu@demen.ru');

/*Заголовок сообщения*/
$modx->mail->set(modMail::MAIL_SUBJECT, 'На сайте зарегистрирован новый пользователь');

/*Подставляем чанк с телом письма (предварительно его нужно создать)*/

/*$modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('myEmailTemplate'));*/

$message = '<strong>Здрасти</strong>, 
<p>У нас новый пользователь с логином : '.$hook->getValue('username')
. ' </p>и почтой email: '.$hook->getValue('email').'.';
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);

/*Отправляем*/
$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);
}
$modx->mail->reset();
Олег
17 марта 2018, 03:43
1
-1
Язык админки можно настроить индивидуально для каждого пользователя (менеджера) стандартными средствами MODX, переопределив системную настройку «manager_language» в разделе Пользователи -> Настройки. Тоже самое и для контекстов. Или с этим какието проблемы? А дизайн страницы входа в админку переопределяется в папке /manager/templates/TEMPLATE_NAME/security/login.tpl — там и логотип можно любой поставить, и свой дизайн сделать за 5 минут.
Володя
13 ноября 2017, 15:00
2
+2
выполнить
$modx->removeExtensionPackage('hybridauth');
например в компоненте консоль.
Сергей Кепкин
02 ноября 2017, 14:58
3
0
ну поискал бы тут на форуме!!! почему предлагаю это — я уже псыкал разжеванный ответ!!!
еще раз, ок))):
1. создаешь сниппет под названием yaSuperProger
<?php
//умолчальная сортировка по убыванию id
$DetectGetBy = 'id';
$DetectGetDir = 'desc';
//подсветка активного пункта
$DetectGetHL = 'default';
$DetectGetText = 'сначала новинки';

if (!empty($_GET['sort'])) {
	if ($_GET["sort"] == "price_up") { //сортировка по возрастанию цены
		$DetectGetBy = 'Data.price';
		$DetectGetDir = 'asc';
		$DetectGetHL = 'price_up';
		$DetectGetText = 'сначала подешевле';
	}
	if ($_GET["sort"] == "price_down") { //сортировка по убыванию цены
		$DetectGetBy = 'Data.price';
		$DetectGetDir = 'desc';
		$DetectGetHL = 'price_down';
		$DetectGetText = 'сначала подороже';
	}
}

$modx->setPlaceholder('DetectGetBy', $DetectGetBy);
$modx->setPlaceholder('DetectGetDir', $DetectGetDir);
$modx->setPlaceholder('DetectGetHL', $DetectGetHL);
$modx->setPlaceholder('DetectGetText', $DetectGetText);
2. в шаблон страницы категории вставляешь вызов этого сниппета и чанк с кнопками, или упрощенно без чанка так:
[[!yaSuperProger]]
<div class="row box-filter">
<div class="col-sm-12">
	<div class="btn-group">
		<button type="button" class="btn btn-default dropdown-toggle sort" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
							[[+DetectGetText]] <span class="caret"></span>
		</button>
		<ul class="dropdown-menu [[+DetectGetHL]]">
			<li class="first"><a class="sort_default" href="[[~[[*id]]]]">сначала новинки</a></li>
			<li><a  class="sort_price_up"href="[[~[[*id]]]]?sort=price_up">сначала подешевле</a></li>
			<li class="last"><a class="sort_price_down" href="[[~[[*id]]]]?sort=price_down">сначала подороже</a></li>
		</ul>
	</div>
</div>
</div>
[[!pdoPage?
	&element=`msProducts`
	&limit=`12`
	&depth=`0`
	&sortby=`[[+DetectGetBy]]` &sortdir=`[[+DetectGetDir]]`
	&ajaxMode=`default`
]]
Роман Ильин
12 сентября 2017, 23:09
13
+2
Сниппет для удаления старых версий:

<?php
/**
 * versionCleanX
 *
 * @author Scott Pronych, September 27, 2013
 *
 * DESCRIPTION
 *
 * For use with VersionX to delete old content
 *
 * PROPERTIES:
 *
 * &contentType - can be resource, chunk, plugin, snippet, template, or templatevar
 * &maxVersions - integer value for max number of versions you would like to keep
 *
 * USAGE:
 *
 * [[!versionCleanX? &contentType=`resource` &maxVersions=`10`]]
 *
 */
 
$cx_type = $modx->getOption('contentType', $scriptProperties, 'resource');
$cx_max = (int) $modx->getOption('maxVersions', $scriptProperties, 5);
 
$GLOBALS['count'] = 1;
$GLOBALS['total'] = 0;
$GLOBALS['deleted'] = 0;
$GLOBALS['page_total'] = 0;
$GLOBALS['page_deleted'] = 0;
$GLOBALS['page_name'] = '';
$GLOBALS['prev_content_id'] = 0;
$GLOBALS['prev_version_id'] = 0;
 
switch ($cx_type) {
    case 'chunk':
        $name = 'name';
        break;
    case 'plugin':
        $name = 'name';
        break;
    case 'snippet':
        $name = 'name';
        break;
    case 'template':
        $name = 'templatename';
        break;
    case 'templatevar':
        $name = 'name';
        break;
    default:
        $name = 'title';
        $cx_type = 'resource';
}
 
$GLOBALS['db_name'] = 'modx_versionx_' . $cx_type;
 
function delete_row ($id) {
    global $modx;
    $query = "DELETE FROM `" . $GLOBALS['db_name'] . "` WHERE version_id = '" . $id . "'";
    $result = $modx->query($query);
    if (!is_object($result)) return false;
    else {
        $GLOBALS['deleted']++;
        $GLOBALS['page_deleted']++;
        $GLOBALS['page_total']++;
        $GLOBALS['total']++;
        $GLOBALS['count']++;
        return true;
    }
}
 
function log_row () {
    $GLOBALS['data'] .= '<tr><td>' . $GLOBALS['page_name'] . '</td><td>' . $GLOBALS['page_total'] . '</td><td>' . $GLOBALS['page_deleted'] . "</td></tr>\n";
    $GLOBALS['page_deleted'] = 0;
    $GLOBALS['page_total'] = 1;
    $GLOBALS['count'] = 1;
}
 
$query = "SELECT version_id, content_id, " . $name . " AS page_title FROM `" . $GLOBALS['db_name'] . "` ORDER BY content_id ASC, version_id DESC";
 
$GLOBALS['data'] = '';
$output = 'An error occurred: ';
$versionx = $modx->query($query);
if (!is_object($versionx)) {
   return $output . 'query error ' . print_r($modx->errorInfo(), true);
}
else {
 
while($row = $versionx->fetch(PDO::FETCH_ASSOC)) {
    // New content_id so reset
    if ($prev_content_id == 0) {
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
        $GLOBALS['total']++;
        $GLOBALS['page_total']++;
        $GLOBALS['count']++;
        $GLOBALS['page_name'] = $row['page_title'];
    }
    elseif ($prev_content_id != $row['content_id']) {
        if ($GLOBALS['count'] > $cx_max) {
            if (!delete_row($prev_version_id)) return $output .  'deleting row for ' . $GLOBALS['page_name'] . ' Row: ' . $prev_content_id . ' ' . print_r($modx->errorInfo(), true);
            $GLOBALS['page_total']--;
 
        }
        else {
            $GLOBALS['total']++;
            $GLOBALS['count']++;
        }
        log_row();
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
        $GLOBALS['page_name'] = $row['page_title'];
    }
    // Content count is over the max so delete previous row
    elseif ($GLOBALS['count'] > $cx_max) {
            delete_row($prev_version_id);
            $prev_content_id = $row['content_id'];
            $prev_version_id = $row['version_id'];
    }
    else {
        $GLOBALS['count']++;
        $GLOBALS['page_total']++;
        $GLOBALS['total']++;
        $prev_content_id = $row['content_id'];
        $prev_version_id = $row['version_id'];
    }
}
log_row();
 
if ($GLOBALS['data'] != '') {
$output = '<h3>VersionX Cleanup for ' . $GLOBALS['db_name'] . '</h3>
<p>Total records: <strong>' . $GLOBALS['total'] . '</strong>
Total deleted: <strong>' . $GLOBALS['deleted'] . '</strong></p>
<table class="table table-striped">
<thead>
<tr>
<th>Page name</th>
<th>Total found</th>
<th>Deleted</th>
</tr>
</thead>
<tbody>
' . $GLOBALS['data'] .  '</tbody></table>
';
}
else $output = 'Error: no data found.';
}
 
$query = "OPTIMIZE TABLE `" . $GLOBALS['db_name'] . "`";
$versionx = $modx->query($query);
if (!is_object($versionx)) {
   $output = 'Optimize error ' . print_r($modx->errorInfo(), true) . $output;
}
 
return $output;


Вызывать так:
[[!versionCleanX? &contentType=`resource` &maxVersions=`10`]]
Alexey Medvedev
11 августа 2017, 16:56
6
0
Знаю, что прошло три года, но может кому пригодится. Это кусок моего плагина. (там ещё RTE подключается для определенные категорий ресуров)

создаем плагин, событие на «OnDocFormRender» с кодом:
$script = '';
$resource = ($resource instanceof modResource) 
            ? 
            $modx->getObject('modResource',$resource->get('id')) 
            : $modx->getObject('modResource',(int)$resource);

// ACE
// Настройка под определенный тв-параметр в шаблоне
$templates_enable = array( // [id-шаблона] => array('tv[id-тв]')
    '3' => array('tv14'),
    '4' =>  array('tv14')
);

if ( $resource instanceof modResource && array_key_exists($resource->get('template'), $templates_enable) ) {
    $script .= 'if (MODx.ux.Ace.replaceTextAreas) {';
    foreach ($templates_enable[$resource->get('template')] as $tv) {
        $script .= 'MODx.ux.Ace.replaceTextAreas(Ext.query("textarea#' . $tv . '"));';
    }
    $script .= '}';
}
$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function(){' . $script . '})</script>');
id шаблонов и тв-параметров находятся в скобках в дереве элементов.

Короткий вариант для всех блоков «Текстовая область»:
$resource = ($resource instanceof modResource) 
            ? 
            $modx->getObject('modResource',$resource->get('id')) 
            : $modx->getObject('modResource',(int)$resource);
if ( $resource instanceof modResource ) {
	$modx->regClientStartupHTMLBlock('
		<script>Ext.onReady(function(){
			if (MODx.ux.Ace.replaceTextAreas) {
				MODx.ux.Ace.replaceTextAreas(Ext.query(".x-form-textarea"));
			}
	');
}
Павел Романов
05 августа 2017, 20:16
2
+1
Делайте просто ссылками, а не select-ом:

<div class="sorting__cat sorting__cat-top" id="mse2_sort">
	<div class="selectheader">По умолчанию</div>
	<div class="selectbody" style="display:none;">
		<a href="#" data-sort="resource|menuindex" data-default="asc" class="sort" >По умолчанию</a>
		<a href="#" data-sort="resource|pagetitle" data-default="asc" class="sort" >Название (А - Я)</a>
		<a href="#" data-sort="resource|pagetitle" data-default="desc" class="sort" >Название (Я - А)</a>
		<a href="#" data-sort="ms|price" data-default="asc" class="sort" >Цена (по возрастанию)</a>
		<a href="#" data-sort="ms|price" data-default="desc" class="sort" >Цена (по убыванию)</a>
	</div>
</div>

selectbody выводите по клику или наведению на selectheader.
В сам selectheader помещайте текст через JS на основании .sort.active.

Ну или попробуйте переопределить свойство sort_link, добавив в вызов mFilter2 параметр:
&filterOptions=`{"sort_link:": "#mse2_sort option"}`
Володя
30 июня 2017, 21:25
4
+2
как недавно выяснилось есть волшебный параметр ra
добавь его, а фон убери, вот так
"catalog":{"w":215,"h":245,"q":65,"zc":"0","bg":"","ra":1}
Алексей Ерохин
30 мая 2017, 13:45
1
+1
&leftJoin=`{
            "size_h":{
                "class":"msProductOption",
                "on":"size_h.product_id = msProduct.id AND size_h.key = 'size_h'"
            }
        }`
      &select=`{
            "size_h":"COALESCE(size_h.value, 0) as size_h"
        }`,
&sortby=`size_h`
примерно так
Илья Катасонов
17 февраля 2017, 12:09
1
0
Как вариант, но это не самый лучший способ, так как стандартный resize работает постоянно, и может дико просадить работу браузера. Лучше использовать window.resize, скрещенный с timeout. Проще говоря — smartresize какой-нибудь (https://github.com/louisremi/jquery-smartresize — например)

Ну и, вкупе с device.js, конечно, modernizr не бывает лишним, на крупных проектах, требующих хорошей поддержки