Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #25
Отправить деньги
Максим Кузнецов
19 мая 2017, 14:40
1
+2
Да с кастомизацией есть небольшой простой в дополнениях, согласен — отчасти, пожалуй, потому что для менеджеров все-таки лучше отдельную админку пилить.)

Если коротко, решений для кастомизации админки и готовых модулей, по-сути, три:

Настройка форм. Тут все понятно, да и написано об этом уже достаточно — выбираем группу пользователей и прячем/переименовываем поля ресурса.
Основной их минус в том, что многие дополнения Василия Наумкина не поддерживают работу с ними и в целом редактировать можно только форму создания документов.

Плагины, расширяющие/заменяющие те или иные элементы дополнения. Можно как «вклиниваться» в логику работы дополнения (если у него есть такая возможность и нужное событие), так и «скрывать» неугодные элементы через ext.js примерно так:

<?php
	switch ($modx->event->name) {
		case "OnDocFormPrerender":
			$modx->controller->addHtml("
				<script type='text/javascript'>
					//ищем нужную вкладку по айди.

					//Например свойства товаров minishop'a: 
					Ext.ComponentMgr.onAvailable('minishop2-product-tab', function() {					
						this.on('afterrender', function() {
							//При помощи методов ext.js ищем нужный элемент и работаем с ним

							//Например, найдем по лейблу поле "цена" и спрячем ее из отображения
							//В примере ищем по лейблу, т.к. легче найти контейнер-родитель (если искать по айди input'a - то главный контейнер-родитель может находиться на разном отдалении
							Ext.get(Ext.query('label[for=\"modx-resource-price\"]')[0]['parentElement']).setStyle('display', 'none');
						});
					});
				</script>
			");
			
			break;
	}

Таким способом можно прятать определенные поля для менеджеров, которые недоступны для редактирования из Настройки форм.
Нюансы этого способа: пусть и небольшая, но лишняя нагрузка. Также во многих модулях не получится полностью убрать элемент способом .remove(), т.к. на примере тех же «свойств» товаров, при перещелкивании табов, в таком случае формы будут отрисовываться заново.

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

<?php
	if ($modx->event->name != 'OnManagerPageInit') return;
	$modx->regClientCSS('/design/admin.css');

Про виджеты особо рассказывать нечего, разве только о взаимодействии с тем же ext.js..)
Воеводский Михаил
14 мая 2017, 20:42
2
+3
provisioner понятное дело не работает на текущих версиях.
Попробуй этот пакет: yadi.sk/d/y-lau_ll3J8xM3
Когда-то собирал Provisioner под 2.4, это может быть поправленный пакет.
Гриборий
13 мая 2017, 18:40
2
+5
А теперь, когда логика понятна, можно писать и
{$result ?: 'Ничего не найдено'}
Дмитрий
11 мая 2017, 15:59
1
0
Не знаю, насколько хорош код, как код, но работает. Делал пару месяцев назад. Комментарии по качеству кода — приветствуются.
<?php

//set_time_limit(00);
define('MODX_API_MODE', true);
require 'index.php';
$basePath = getcwd();
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(array
    (
    'target' => 'FILE',
    'options' => array
        (
        'filename' => 'gallery.' . strftime('%Y-%m-%dT%H:%M:%S')
        )
    )
);

chdir($basePath . '/assets/images/resources/');
$folders = scandir(getcwd(),0);
foreach ($folders as $folder) {
    if (($folder != '.') && ($folder != '..')) {
        if (is_dir($folder)) {
            $catalog = getcwd() . '/' . $folder;
            chdir($catalog);
            $files = scandir(getcwd(),0);
            foreach ($files as $file) {
                if (is_dir($file) == FALSE) {
                    //для лога выведем все файлы и id ресурсов
                    //echo 'Грузим: ' . getcwd() . '/' . $file . ' ID ресурса: ' . $folder . '
';                    
                    $res = $modx->runProcessor('gallery/upload', array(
                        'file' => getcwd() . '/' . $file,
                        'id' => $folder
                            ), array(
                        'processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/'
                            )
                    );
                    if ($res->isError()) {
                        print_r($res->getAllErrors());
                    } else {
                        print_r($res->getObject());
                    }
                }
            }
            chdir(getcwd() . '/..');
        }
    }
}
Андрей
05 мая 2017, 09:29
1
+1
mFilter тут ни при чем, вам нужен плагин для jQuery UI, например этот.
Сергей Водолагин
03 мая 2017, 18:46
1
0
Решение если кому нужно
1. в терминале
sudo nano /etc/mysql/my.cnf
2. в конце файла дописываем строки
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"
3. сохраняем файл и restart mysql
sudo systemctl restart mysql
Семён Кудрявцев
01 мая 2017, 06:20
3
+4
У miniShop2 есть системная настройка — ms2_cart_max_count (точнее её по-умолчанию нет, но логика её работы предусмотрена) — так вот она делает всё, что Вам нужно. Просто создайте её и укажите значение 1, после этого добавить в корзину можно будет только один товар.
Михаил
24 апреля 2017, 06:42
1
+1
{switch $_modx->resource.template}
{case 1}
....
{case 2}
....
{case default}
....
{/switch}
Игорь Игамов
19 апреля 2017, 17:03
1
+2
Вот так получить можно содержимое корзины.
P.S/ смотрите в журнале ошибок
$tmp = $cart->get();
$modx->log(1, print_r($tmp, 1));