Andrey

Andrey

С нами с 08 августа 2016; Место в рейтинге пользователей: #213
Максим Кузнецов
06 июня 2016, 14:40
2
+2
Скорее всего, придется расширять функцию saveComment в
core/components/tickets/model/tickets/tickets.class.php

Если использовать феном, то можно обойтись и без сниппета:
{foreach $thumbs | split as $thumb}
	<!--Получаем основное изображение из превью 120х120, к примеру -->
	
	<a href='{$thumb | replace : ".w120.h120" : ""}'>
		<img src='{$thumb}' width='120' height='120' />
	</a>
{/foreach}
Николай Загумённов
06 июня 2016, 14:14
2
+1
Попробывал сделать так:
{$_modx->runSnippet('!TicketComments', [
    'showLog' => 1,
	'class' => 'TicketComment',
    	'loadModels' => 'UserFiles',
    	'leftJoin' => '{
        "Thumbs": {
            	"class": "UserFile",
            	"on": "Thumbs.list = TicketComment.id AND Thumbs.properties LIKE \'%w\":120,\"h\":90%\'"
        	}
    	}',
    	'select' => '{
        	"TicketComment": "*",
	        "Thumbs": "GROUP_CONCAT(Thumbs.url) as thumbs"
    	}',
    	'groupby' => 'TicketComment.id',
])}
В плейсхолдере thumbs получаю строку с картикками через запятую. Теперь осталось только сделать сниппет который будет обрабатывать эту строку.
Когда оставляю коментарий картинки не подгружаются сразу, надо обновить страницу, чтобы пути появились под комментом.
Как можно сделать чтобы они подгружались сразу?
P.S. Спасибо за GROUP_CONCAT()
Павел Гвоздь
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 страницы редактирования юзера.
Володя
09 августа 2015, 13:21
1
+2
создаете обработчик в VP:
  • тип — динамический ресурс
  • содержимое — [[$images]]
создаете маршрут в VP:
/images/{res:[0-9]+}/{thumb}/{rank:[0-9]+}
создаете чанк images:
содержимое
[[!images?
&tpl=`@INLINE <img src="[[+url]]">`
]]
создаете снгиппет images:
содержимое
<?php
if (!isset($_REQUEST['fastrouter'])) {return '';}
$ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
if (!$modx->loadClass('pdoTools', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {
	return false;
}
$pdoTools = new pdoTools($modx, $scriptProperties);
$f = $_REQUEST['fastrouter'];
if (!$File = $modx->getObject('msResourceFile', array(
    'resource_id' => $f['res'],
    'path' => $f['res']. '/' . $f['thumb'] . '/',
    'rank' => $f['rank']
    ))) {
    $modx->sendErrorPage();
}
$row = $File->toArray();
$scriptProperties['tpl'] = !empty($tplRow) ? $tplRow : '';
$pdoTools->setConfig(array_merge($default, $scriptProperties));
$output = empty($tpl)
	? '<pre>' . $pdoTools->getChunk('', $row) . '</pre>'
	: $pdoTools->getChunk($tpl, $row, $pdoTools->config['fastMode']);
if (!empty($toPlaceholder)) {
	$modx->setPlaceholder($toPlaceholder, $output);
}
else {
	return $output;
}
и все… радуетесь.
but1head
25 февраля 2015, 10:40
1
+1
$(document).on('af_complete', function(event,res) {
	if(res.success) $('.close-reveal-modal').click();
});
вы я надеюсь это в <script пихаете? (или .js)
but1head
26 мая 2014, 10:39
2
0
<?php
$end = $scriptProperties['end'];
$curday = strtotime(date('d.m.Y'));
$remaining_days = floor(($end-$curday)/(60*60*24));


if (!function_exists('numberEnd')) {
    function numberEnd($number, $titles) {
		$cases = array (2, 0, 1, 1, 1, 2);
    	return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
	}
}


$number = $remaining_days; 


return $number.' д'. numberEnd($number, array('ень', 'ня', 'ней'));
Использование:
[[!timeleft? &end=`[[+unpub_date:strtotime`]]`]]
Василий Наумкин
02 апреля 2014, 13:16
3
+1
if ($modx->event->name == 'OnLoadWebDocument') {
	$section_root = 15;
	
	if ($modx->resource instanceof Ticket) {
		if ($category = $modx->resource->getOne('Section')) {
			if ($category->get('parent') == $section_root) {
				if (!$modx->user->isMember(array('Group1','Group2'))
					&& $modx->resource->get('createdby') != $modx->user->id
					&& $category->get('createdby') != $modx->user->id
				) {
					$modx->sendUnauthorizedPage();
				}
			}
		}
	}
	elseif ($modx->resource instanceof TicketsSection && $modx->resource->get('parent') == $section_root) {
		if (!$modx->user->isMember(array('Group1','Group2')) && $modx->resource->get('createdby') != $modx->user->id) {
			$modx->sendUnauthorizedPage();
		}
	}
}
Загуменнов Николай
08 октября 2013, 16:50
1
0
<select name="unpub_date" class="input-xxlarge" id="ticket-srok" style="width:100%;">
   <option value="1381495662">3 дня</option><option value="1381841262">7 дней</option><option value="1382446062">14 дней</option><option value="1383828462">1 месяц</option><option value="1389012462">3 месяца</option>
  </select>
Василий Наумкин
13 сентября 2012, 06:47
1
0
Безопаснее настроить сервер по этой заметке — bezumkin.ru/blog/2012/06/18/13/

Запускать все сайты от одного юзера, или ставить 777 — одинаково небезопасно.
В любом случае это обозначает, что получив доступ к одному сайту, злоумышленник может накуралесить и на остальных.

Правильнее система: один сайт — один юзер, причем не www-data и не root. И права 755, 644. И отдельный доступ для этих юзеров через sftp, для работы с файлами.