Евгений Webinmd

Евгений Webinmd

С нами с 07 января 2013; Место в рейтинге пользователей: #23
Николай
22 марта 2019, 12:34
4
+5
Я вот таким вариантом пользуюсь:

<?php

if( in_array($modx->event->name, ['OnManagerPageInit','OnBeforeManagerLogin']) ) {
    $logpath = MODX_CORE_PATH . 'cache/logs/error.log';
    
    if( file_exists($logpath) ) {
        if(filesize($logpath) > 5000000) {
            $logcontent = file_get_contents($logpath);
            $filename = 'error-'. date("Y-m-d_H:i:s");
            
            $zip = new ZipArchive();
            $zip->open(MODX_CORE_PATH . 'cache/logs/'. $filename . '.zip', ZipArchive::CREATE);
            $zip->addFromString($filename . '.txt', $logcontent);
            $zip->close();        
            
            $modx->runProcessor('system/errorlog/clear');
        }
    }
}

Денис
11 декабря 2018, 19:19
5
+5
Судя по исходникам просто так не выйдет.
Создайте плагин и повесьте на событие OnManagerPageBeforeRender
После вставьте следующий код:
<?php
switch ($modx->event->name) {
	case 'OnManagerPageBeforeRender':
        if($controller->config['controller'] == "mgr/orders") {
            if ($miniShop2 = $modx->getService('miniShop2')) {
                $modx->controller->addHtml('<style>.x-grid3-col-order-product-image img {width:40px;display:block;}</style>');
                $modx->controller->addHtml('
                    <script>
                        Ext.onReady(function(){
                            var originalGetColumns = miniShop2.grid.OrderProducts.prototype.getColumns;
                            miniShop2.config["default_thumb"] = miniShop2.config["defaultThumb"];
                            Ext.override(miniShop2.grid.OrderProducts,{
                                getColumns: function () {
                                	var imgFields = [ "product_thumb", "product_image" ];
                                    var columns = originalGetColumns.apply(this);
                                    for(var i=0; i<columns.length; i++){
                                    	if(imgFields.indexOf(columns[i]["dataIndex"]) != -1){
                                    		columns[i]["renderer"] = miniShop2.utils.renderImage;
                                    		columns[i]["id"] = "order-product-image";
                                    	}
                                    }
                                    return columns;
                                }
                            });
                        });
                    </script>
                ');
            }
        }
    break;
}

Если в системной настройке ms2_order_product_fields указан product_thumb или product_image, то вы увидите уже не ссылку, а картинку.
Владимир
11 октября 2018, 23:08
1
+2
Привожу код, как это можно реализовать через процессор возможно кому-то пригодится

Код кнопки/ссылки:
{
                        xtype: 'button',
                        scope: this,
                        enableToggle: true,
                        iconCls : 'icon icon-xls',
                        handler: orders.utils.renderXLS,
                    }

Код обработчика(здесь важно чтобы в поля id был установлен параметр id):
orders.utils.renderXLS = function() {
    var orderID = Ext.getCmp('id');
    var _params = {
        action: 'mgr/item/xls',
        orderID: orderID.getValue(),
        HTTP_MODAUTH: MODx.siteId
    };
    link = orders.config.connector_url + '?' + Ext.urlEncode(_params);
    var win = window.open(link, '_blank');
    win.focus();
};

Код процессора:
<?php

class ordersItemXlsGetListProcessor extends modObjectGetListProcessor
{

    public $objectType = 'ordersItem';
    public $classKey = 'ordersItem';
    public $defaultSortField = 'id';
    public $defaultSortDirection = 'ASC';
    public $languageTopics = ['orders:default'];

    public function prepareQueryBeforeCount(xPDOQuery $c) {
        $c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));

        $orderID = $this->getProperty('orderID');
        if($orderID){
            $c->where([
                'id' => $orderID,
            ]);
        }

        return $c;
    }


    public function process() {

        $beforeQuery = $this->beforeQuery();
        if ($beforeQuery !== true) {
            return $this->failure($beforeQuery);
        }

        $data = $this->getData();

        $this->createExcel($data);

        return '';
    }

    public function createExcel(array $data) {
        foreach ($data['results'] as $object) {
            if ($this->checkListPermission && $object instanceof modAccessibleObject && !$object->checkPolicy('list')) {
                continue;
            }
            $orderArr = $this->prepareRow($object);
            break;
        }

       //код формирования Excel файла

       return '';

    }

}
return 'ordersItemXlsGetListProcessor';
Володя
01 сентября 2017, 09:53
4
+3
Тема очень обширна и возможны разные варианты. Можно использовать различные сборщики, например тут Василий описал детально сборку с помощью gulp. Кто то использует minifyx.

Могу поделиться своим решением на основе html-compressor.

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

Способ не идеален, так как требует обработки страницы на стадии рендера и это конечно минус, но задержки не так велики. Пакет находится в стадии тестирования, но результаты примерно такие



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

ps. кстати данный пакет подключен и тут s6200.h3.modhost.pro/6/12010.html
но там нет оптимизации картинок потому результат не 100…

Володя
04 июля 2017, 16:51
4
+2
примерно так
Ext.override(miniShop2.grid.Orders , {
    getMenu: function (grid, rowIndex) {
        var ids = this._getSelectedIds();
        var row = grid.getStore().getAt(rowIndex);
        var menu = miniShop2.utils.getMenu(row.data['actions'], this, ids);
        menu.push({
          text: 'Печать'
          ,handler: function () {
                window.open('http://www.example.com?ReportID=1', '_blank');
            }
        });
        this.addContextMenuItem(menu);
    }
});
but1head
11 марта 2016, 16:48
1
0
Третий результат в гугле…
$input = $doc->getTVValue('myMigx');
$res = $modx->fromJSON($input);
$count = count($res);
 
$new = array(
    'MIGX_id'       => $count + 1,
    'name'          => $scriptProperties['fields']['name'],
    'message'       => $scriptProperties['fields']['message'],
    'email'         => $scriptProperties['fields']['email'],
    'date'          => $scriptProperties['fields']['date'],
);
$res[] = $new;
 
if (!$doc->setTVValue('myMigx', $modx->toJson($res))) {
  $modx->log(modX::LOG_LEVEL_ERROR,'There was a problem saving your data!');
  return false;
}
  
return true;
Илья Уткин
15 февраля 2016, 13:51
10
+12
Вот такой файлик проще
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Максим Кузнецов
31 января 2015, 21:35
5
+3
Помогу с решением.

Вызываем сниппет Login:
[[!Login? &loginTpl=`fastLoginTpl` &errTpl=`fastLoginError`]]

Чанк формы для авторизации fastLoginTpl:
<div style="display: none;" id="authErrors">[[+errors]]</div>
<form class="loginForm" id="iWannaLogin" action="[[~[[*id]]]]" method="post">
	<div class="login">
		<input id="loginForm" name="username" class="roundInput" type="text" placeholder="Логин" title="Ваш логин">
	</div>
	<div class="password">
		<input id="passwordForm" name="password" class="roundInput" type="password" placeholder="Пароль" title="Ваш пароль">
	</div>
	
	<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
	<input class="loginLoginValue" type="hidden" name="service" value="login" />
	
	<div class="submit">
		<a rel="nofollow" href="[[~17]]">Я - тупой, забыл пароль..</a>
		<input id="ajaxLoginButton" type="submit" name="Login" value="Войти" />
	</div>
</form>

Чанк для вывода ошибки fastLoginError:
[[+msg]]

Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
<script type="text/javascript">
	$(document).ready(function(){
		$("#iWannaLogin").bind("submit", function() {

			$("#authErrors").text("");
		
			//здесь можно допилить подсветку полей с ошибкой
			if ($("#loginForm").val().length < 1 && $("#passwordForm").val().length < 1) {
				$.jGrowl("Введите логин и пароль", {group: "m-Error"});
				return false;
			}
			if ($("#loginForm").val().length < 1) {
				$.jGrowl("Введите логин", {group: "m-Error"});
				return false;
			}
			if ($("#passwordForm").val().length < 1) {
				$.jGrowl("Введите пароль", {group: "m-Error"});
				return false;
			}

			$.ajax({
				type: "POST",
				cache: false,
					url: "[[~[[*id]]]]",
				data: $(this).serializeArray(),
				beforeSend: function(){
					$("#ajaxAuth .closeBlock").css("display", "none");
					$("#ajaxAuth .ajaxLoad").css("display", "block");
					
					$("#ajaxLoginButton").prop("disabled", true);
				},

				success: function(data) {
					$("#ajaxAuth .closeBlock").css("display", "block");
					$("#ajaxAuth .ajaxLoad").css("display", "none");
			
					var errMessage = $(data).find("#authErrors").text();
				
					if(errMessage == ""){
						window.location = "адрес для переадресации при успешной авторизации";
					}
					else{
						$("#authErrors").text(errMessage);
						$.jGrowl($("#authErrors").text(), {group: "m-Error"});
					}
				},
				
				complete: function(){
					$("#ajaxLoginButton").prop("disabled", false);
				}
			});
			return false;
	
		});
	});
</script>

— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
$("#authErrors").text("текст ошибки").css("display", "block");

#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.
Evgeny Epifanov
23 сентября 2014, 22:05
8
+1
Чанк tpl.msEmail.new.manager
[[+address.receiver]] — Покупатель
[[+address.phone]] — Телефон
[[+user.email]] — Почта
[[+address.index]] — Индекс
[[+address.region]] — Область
[[+address.city]] — Город
[[+address.street]] — Улица
[[+address.building]] — Дом
[[+address.room]] — Квартира
[[+delivery.name]] — Способ доставки
[[+payment.name]] — Тип оплаты
[[+address.comment]] — Комментрарий

Это то, что я знаю. А вообще где-то это уже обсуждалось.