Илья

Илья

С нами с 30 сентября 2013; Место в рейтинге пользователей: #163
Антон
11 июня 2016, 15:19
2
+1
Я у себя реализовал вот это решение (случайно нактнулся на просторах интернета):
Система тегов: myitstuff.ru/32-tagging-site-on-modx
Облако тегов: myitstuff.ru/36-modx-tag-cloud
Павел Гвоздь
30 мая 2016, 00:49
3
+1
Итого вот:

В tpl.Tickets.comment.form вызываем форму загрузки файла:
{$_modx->runSnippet('!ufForm', [
    'class' => 'modUser',
    'list' => 'comment-' ~ $thread,
    'tplForm' => 'uf.form',
    'dropzone' => '{
        "maxFilesize": 2,
        "maxFiles": 5,
        "acceptedFiles": ".jpg, .jpeg, .gif, .png",
        "template": "edit"
    }',
])}

Важный момент, который ты почему-то не упомянул:
Чанк uf.form переписываем так, чтобы там не было тега form (заменяем его на div):
<div class="userfiles-form-wrapper">
    <div class="userfiles-form userfiles-dropzone" id="[[+propkey]]" data-clickable=".userfiles-form-clickable-[[+propkey]]" data-sorting="1">
        <div class="dz-message needsclick">[[%userfiles_msg_needsclick]]</div>
    </div>
    <a class="userfiles-form-clickable userfiles-form-clickable-[[+propkey]]">[[%userfiles_msg_select_files]]</a>
</div>
Не знаю, насколько это правильно, но работает. :)

В tpl.Tickets.comment.one.auth и tpl.Tickets.comment.one.guest прописываем вывод файлов комментария:
{$_modx->runSnippet('!pdoResources', [
    'class' => 'UserFile',
    'loadModels' => 'UserFiles',
    'limit' => 10,
    'tpl' => '@INLINE
        <div class="item pull-left">
            <a href="{$url}" rel="fancybox"><img src="{$thumb}" alt=""></a>
        </div>
    ',
    'leftJoin' => '{
        "Thumb": {
            "class": "UserFile",
            "on": "Thumb.parent = UserFile.id AND Thumb.properties LIKE \'%w\":120,\"h\":90%\'"
        }
    }',
    'select' => '{
        "UserFile": "url",
        "Thumb": "Thumb.url as thumb"
    }',
    'where' => '{
        "UserFile.class": "modUser",
        "UserFile.list": "comment-' ~ $id ~ '"
        
    }',
    'sortby' => '{"rank":"ASC"}',
])}

И плагин будет выглядеть так:
switch ($modx->event->name) {
    case 'OnCommentSave':
        if ($mode == 'new' && $modx->user->isAuthenticated($modx->context->key)) {
            $corePath = MODX_CORE_PATH.'components/userfiles/';
            if ($uf = $modx->getService('UserFiles', 'UserFiles', $corePath.'model/userfiles/', array('core_path' => $corePath))) {
                if ($files = $modx->getCollection('UserFile', array('parent' => $modx->user->id, 'list' => 'comment-'.$object->Thread->name))) {
                    foreach ($files as $file) {
                        $file->set('list', 'comment-'.$object->id);
                        $file->save();
                        
                        if ($children = $file->getMany('Children')) {
                            foreach ($children as $child) {
                                $child->remove();
                            }
                            $file->generateThumbnails();
                        }
                    }
                }
            }
        }
        break;
}

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

— Обновлено --

Данная реализация разбивает файлы по группам comment-[[+id]], что позволяет более проще получить к ним доступ в бекенде на странице UserFiles или на вкладке UserFiles страницы редактирования юзера.
Илья Уткин
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/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Konstantin
22 октября 2015, 05:08
1
+1


Павел, пофиксите пожалуйста некоторый недочет из за которого при совпадении двух точек с координатами выводится пустой список слева.

Как это сделать?
1. открыть сниппет yandexMaps
2. найти строку:
$balloonContent = $geoObjectsArray[$i][ $objectsTypesKeyId ][$a][ $fieldForBalloonContent ];
3. ниже под ней добавить строку:
$clusterCaption = $geoObjectsArray[$i][ $objectsTypesKeyId ][$a]["pagetitle"];
4. найти строку:
$objectPropertiesArray['hintContent'] = $hintContent;
5. ниже под ней добавить
$objectPropertiesArray['clusterCaption'] = $clusterCaption;
Наумов Алексей
31 августа 2015, 21:15
1
0
modx.pro/help/6121/

я там код плагина приводил в комментариях
Владимир
30 августа 2015, 22:55
2
+1
BobRay выпустил http://modx.com/extras/package/upgrademodx Пакет для обновления MODX из админки с выбором версий.

Олег Песчанский
11 августа 2015, 09:58
2
0
Если нужна только одна точка на карте, что бы работал zoom, нужно при вызове сниппета указать &checkZoomRange в false и &centerCoords с координатами точки. В документации первого параметра вообще нет.
В общем рабочий вызов карты с одной точкой выглядит так:
[[!yandexMaps?
	&tvCoords=`coords `
	&styleMapBlock=`width:100%;height:400px;`
	&zoom=`16`
	&checkZoomRange=`0`
	&centerCoords=`[[*coords]]`
]]
Это минимальное количество параметров!
Олег Песчанский
11 августа 2015, 09:53
1
0
Спасибо за идею!
Оказалось довольно просто — нужно еще в вызове добавить параметр &centerCoords=`[[*map]]`, где map — TV поле с координатами.
В общем рабочий вызов выглядит так:
[[!yandexMaps?
	&tvCoords=`map`
	&styleMapBlock=`width:100%;height:400px;`
	&zoom=`16`
	&checkZoomRange=`0`
	&centerCoords=`[[*map]]`
]]
Удалять в сниппете ничего не нужно.
Василий Наумкин
21 июля 2015, 12:42
4
+3
<?php
if ($modx->event->name != 'OnDocFormPrerender' || $resource instanceof Ticket || $resource instanceof TicketsSection) {
    return;
}

if ($Tickets = $modx->getService('Tickets')) {
    $modx->controller->addLexiconTopic('tickets:default');
    
    $Tickets->loadManagerFiles($modx->controller, array(
        'config' => true,
		'utils' => true,
		'css' => true,
		'comments' => true,
    ));
    
    $insert = '
		tabs.add({
			title: _("comments"),
			items: [{
				xtype: "tickets-panel-comments",
				hidden: false,
				record: ' . $modx->toJSON($resource->toArray()) . ',
				parents: ' . $resource->id . ',
			}]
		});
	';
	if ($modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
		$modx->controller->addHtml('
		<script type="text/javascript">
			Ext.onReady(function() {
				window.setTimeout(function() {
					var tabs = Ext.getCmp("modx-resource-tabs");
					if (tabs) {
						' . $insert . '
					}
				}, 10);
			});
		</script>', true);
	}
	else {
		$modx->controller->addHtml('
		<script type="text/javascript">
			Ext.ComponentMgr.onAvailable("modx-resource-tabs", function() {
				var tabs = this;
				tabs.on("beforerender", function() {
					' . $insert . '
				});
			});
		</script>', true);
	}
}
Может и включу потом, да. Но пока это твой эксклюзив =)