Александр

Александр

С нами с 27 октября 2014; Место в рейтинге пользователей: #1256
Ivan
06 июня 2022, 14:50
1
0
В общем решение не самое красивое, но рабочее.
1) Копируем файл
/assets/components/msearch2/js/web/default.js
и называем его
/assets/components/msearch2/js/web/custom.js
.
2) В этом файле везде
mse2Config['actionUrl']
заменяем на
'/assets/components/msearch2/actionCustom.php'
3) Копируем файл
/assets/components/msearch2/action.php
и называем его
/assets/components/msearch2/actionCustom.php
4) В html коде сортировки указываем
<a href="#" data-sort="ms|price" data-dir="[[+mse2_sort:is=`ms|price:desc`:then=`desc`]]" data-default="desc" class="sort">По цене <span></span></a>
5) В файле
actionCustom.php
на 76 строчке меняем
$paginatorProperties['sortby'] = !empty($sort)
            ? $mSearch2->getSortFields($sort)
            : '';
на
$sorting = '';
            if (!empty($sort)) {
            $sorting = $mSearch2->getSortFields($sort);
            if ($sorting == '`Data`.`price` desc') {
                $sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` desc';
            } elseif ($sorting == '`Data`.`price` asc') {
                $sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` asc';
            }
        }
        $paginatorProperties['sortby'] = $sorting;
Радуемся
Kirill A. Rusanov
04 августа 2020, 08:50
3
+2
Цель, я так понимаю, упорядочить цену по возрастанию, при этом товары с нулевой ценой показывать в конце.
Запрос должен выглядеть так:
SELECT * FROM `modx_ms2_products` ORDER BY FIELD(price, 0), `modx_ms2_products`.`price` ASC
Вызов msProducts примерно такой:
{'!msProducts' | snippet : [
    'sortby' => 'FIELD(Data.price, 0), Data.price',
    'sortdir' => 'ACS',
    'showLog' => 1,
]}
Александр
22 июня 2020, 20:13
1
0
Пожалуйста подскажите
Импортирую изображения с другого сайта
У изображений нету расширения
ссылка типа
site.com//resizer?imageKeys=26968238~SID~B746~S0~I5~RW2592~H1944~TH0&width=845&height=633
в логе пишет
[2020-06-22 19:56:42] (ERROR @ /www/core/components/msimportexport/model/msimportexport/msie.class.php: 4241) Ошибка загрузки "/www/assets/components/msimportexport/upload/resizer":
Array
(
    [0] => Не могу сохранить файл не был сохранён (см. системный журнал).: Array
(
    [path] => file_err_ext_not_allowed
)

)
подскажите, как решить этот вопрос?
спасибо
Александр
22 июня 2020, 20:01
1
0
Пожалуйста подскажите
Импортирую изображения с другого сайта
У изображений нету расширения
ссылка типа
site.com//resizer?imageKeys=26968238~SID~B746~S0~I5~RW2592~H1944~TH0&width=845&height=633
в логе пишет
[2020-06-22 19:56:42] (ERROR @ /www/core/components/msimportexport/model/msimportexport/msie.class.php: 4241) Ошибка загрузки "/www/assets/components/msimportexport/upload/resizer":
Array
(
    [0] => Не могу сохранить файл не был сохранён (см. системный журнал).: Array
(
    [path] => file_err_ext_not_allowed
)

)
подскажите, как решить этот вопрос?
спасибо
Ilya Gureshidze
22 августа 2019, 12:07
2
+1
Как обычно: сам задал вопрос — сам отвечаю.
1. Добавил поля id_1C и id_parent_1C в modx_site_content
2. В плагине на OnMODXInit (у меня там куча полей для расширения разных классов)
написал
$modx->map['modResource']['fields']['id_1C'] = '';
    	$modx->map['modResource']['fields']['id_parent_1C'] = '';
    	$modx->map['modResource']['fieldMeta']['id_1C'] = array(
		'dbtype' => 'varchar',
		'precision' => 50,
		'phptype' => 'string',
		'null' => false,
		'default' => ''
	);
	$modx->map['modResource']['fieldMeta']['id_parent_1C'] = array(
		'dbtype' => 'varchar',
		'precision' => 50,
		'phptype' => 'string',
		'null' => false,
		'default' => ''
	);
3. В плагине на OnDocFormSave и onDocFormPrerender
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        $id_1C = '';
        $id_parent_1C = '';
        
        if (isset($scriptProperties['resource'])) {
            if (is_object($resource)) {
                $id_1C = $resource->get('id_1C');
                $id_parent_1C = $resource->get('id_parent_1C');
            }
        }
$modx->controller->addHtml(<<<HTML
<script>
    Ext.ComponentMgr.onAvailable('modx-resource-main-left', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'id_1C'
                ,value: '{$id_1C}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'ID 1C'
            });
            page.insert(3,{
                xtype: 'textfield'
                ,name: 'id_parent_1C'
                ,value: '{$id_parent_1C}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'ID родителя 1C'
            });
        })
    });
</script>
HTML
);
        break;
        
    case 'OnDocFormSave':
        $resource->set('id_1C', $_POST['id_1C']);
        $resource->set('id_parent_1C', $_POST['id_parent_1C']);
        break;
}
return;
Все заработало.
DOM
DOM
12 июля 2017, 15:11
3
0
Для вообще ленивых :), авторизация Login по ajax:
Вызов:
[[!Login? &loginTpl=`lgnLoginTpl` &logoutTpl=`lgnLogoutTpl` &errTpl=`lgnErrTpl` &loginResourceId=`52` &logoutResourceId=`[[*id]]`]]

Форма:
<div class="loginForm">
    <div class="loginLogin">
        <div class="loginMessage">[[!+errors]]</div>
        <form class="loginLoginForm auth" action="[[~[[*id]]]]" method="post">
            <fieldset class="loginLoginFieldset">
                <label class="loginUsernameLabel" for="login">[[%login.username]]</label>
                <input class="loginUsername put-focus" type="text" name="username" id="login">
                <span class="error error-login"></span>
                
                <label class="loginPasswordLabel" for="pass">[[%login.password]]</label>
                <input class="loginPassword" type="password" name="password" id="pass">
                <span class="error error-password"></span>
                    
                <input class="loginRememberme" type="checkbox" name="rememberme" id="checkbox-1" checked>
                <label class="loginRemembermeLabel new-check" for="checkbox-1">Запомнить меня</label>
                
                <input class="loginLoginValue" type="hidden" name="service" value="login">
                <input type="submit" name="Login" value="[[+actionMsg]]">
                 
                <input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]">
            </fieldset>
            <div class="text-center">
                <a class="forgot-login" href="[[~45]]">Забыли логин или пароль?</a>
            </div>
        </form>
    </div>
</div>

Скрипт:
<script>
        $(document).ready(function(){
            $(".auth").bind("submit", function() {
                $("span.error, .loginMessage").text("");
                $("input.error, textarea.error").removeClass('error');
                
                if ($(".loginUsername").val().length < 1 && $(".loginPassword").val().length < 1) {
                    $(".error-login").text("Для входа введите Ваш логин");
                    $(".error-password").text("Для входа введите Ваш пароль");
                    $('.loginUsername, .loginPassword').addClass('error');
                    return false;
                }
                
                if ($(".loginUsername").val().length < 1) {
                    $(".error-login").text("Для входа введите Ваш логин");
                    $('.loginUsername').addClass('error');
                    return false;
                }
                
                if ($(".loginPassword").val().length < 1) {
                    $(".error-password").text("Для входа введите Ваш пароль");
                    $('.loginPassword').addClass('error');
                    return false;
                }
                
                $.ajax({
                        type    : "POST",
                        cache   : false,
                        url     : "[[~[[*id]]]]",
                        data    : $(this).serializeArray(),
                        success: function(data) {
                            var errMessage = $(data).find(".loginMessage").text();
                            if(errMessage == ""){
                                window.location = "[[~[[*id]]]]";
                            }else{
                                $(".error-login").text('Неправильный логин или пароль');
                                $('.loginUsername, .loginPassword').addClass('error');
                            }
                        }
                });
        
                return false;
        	});
        });
    </script>
Виталий Серый
03 марта 2017, 22:43
3
+1
Все тоже самое, только тв запрашивать у требуемого ресурса.
{set $rows = json_decode(15 | resource : 'migx_tv', true)}
{foreach $rows as $row}
    {$row.image}
{/foreach}
Павел Романов
01 февраля 2017, 12:48
3
+2
Нужно создать в core/components директорию в соответствии с Вашим namespace.
В ней директорию lexicon и в ней уже папки по языкам.
То есть, если пространство называется langs, то так:
core
  components
    langs
      lexicon
        ru
        en
        ...

В каждой языковой папке создайте файл default.inc.php и пропишите туда Ваши переменные:
<?php
$_lang['link_home'] = 'На главную';
$_lang['feedback'] = 'Обратная связь';
$_lang['sitemap'] = 'Карта сайта';
...

После этого все записи появятся в словарях, их можно будет править и т. д.
Выводить надежнее так:
[[%link_home? &namespace=`langs`]]