Bluetenstadt

Bluetenstadt

Был в сети 30 мая 2018, 11:59
Заказы не принимаю
Василий Наумкин
Василий Наумкин
Потому что сниппет нужно вызывать как
[[!test?id=`[[+id]]`]]
то есть, передавать данные уже выбранного ресурса внутрь сниппета.
И тогда вот эта строка не нужна совсем
$id = $modx->resource->get('id');

Только дальнейший код убьёт всю производительность, достигнутую pdoResources.
$res = $modx->getObject('modResource',$id);
Ты выбрал 10 нужных ресурсов за один запрос, а потом еще за 10 дополнительных запросов выбираешь каждый из них отдельно.

Это при том, что данные уже выбранных ресурсов и так доступны у тебя в чане, в которым ты вызываешь свой сниппет. В моём примере передаётся только id, но так можно передать и другие свойства.

Да и лишний вызов сниппета test 10 раз из чанка — тоже дополнительные тормоза.

В общем, лучше напиши, чего ты хочешь добиться, может чего поумнее подскажут.
Николай Загумённов
Николай Загумённов
Выяснил, что можно использовать для этих целей UserFiles.
Надо только добавить плагин, который буде срабатывать после сохранения комментария (событие — OnCommentSave). Вообще очень много открыл для себя с этими плагинами =) В таблице компонента меняю поле parent на id созданного комментария.
<?php
// TicketCommentSave
switch ($modx->event->name) {
    case 'OnCommentSave':
        // $modx->log(1, print_r(array_keys($scriptProperties), 1));
        if ($mode == 'new') {
        	// >> Подключаем UserFiles
			$corePath = $modx->getOption('userfiles_core_path', null, $modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/userfiles/');
			$UserFiles = $modx->getService('UserFiles', 'UserFiles', $corePath . 'model/userfiles/', array('core_path' => $corePath));
			// << Подключаем UserFiles
			
			$user_id = $modx->user->id; // id Авторизованного пользователя
			
			$files = $modx->getCollection('UserFile', array('parent' => $user_id));
			foreach ($files as $file) {
				$file->set('parent', $id);
				$file->save();
				if ($children = $file->getMany('Children')) {
					foreach ($children as $child) {
						$child->remove();
					}
					$file->generateThumbnails();
				}
			}
        }
    break;
}
В чанке формы добавления комментария надо добавить сам сниппет ufForm:
[[!ufForm?
	&class=`modUser`
	&list=`comment`
	&dropzone=`{"maxFilesize":2,"maxFiles":5,"acceptedFiles":".jpg, .jpeg, .gif, .png","template":"edit"}`
]]
В чанке одного комментария(tpl.Tickets.comment.one.auth) добавить:
Должна быть включена поддержка fenom в настройках pdotools.
{$_modx->runSnippet('!pdoResources', [
	'limit' 			=> 10,
	'showLog'			=> 1,
	'class' 			=> 'UserFile',
	'loadModels' 		=> 'UserFiles',
	'sortby' 			=> '{"rank":"ASC"}',
	'tpl' 				=> '@INLINE <div class="item pull-left>
						        <a href="{$url}" rel="fancybox"><img src="{$thumb}" alt=""></a>
						    </div>',
	'where' 			=> '{
						        "UserFile.parent": ' ~ $id ~ ',
						        "UserFile.createdby": '~ $createdby ~'
						        
						    }',
	'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"
						    }',
])}
Будет работать только для авторизованных пользователей, так как их id мы заполняем в parent таблицы компонента UserFiles.
brioni
brioni
Пётр Молчанов
Пётр Молчанов
isMember — самый нормальный вариант
$user = $modx->getObject('modUser',array('active' => true, 'id' => $userid )); // подставляй айди пользователя
if($user == null)
        return "Пользователь не найден!";
if($user->isMember('Гость')) {

} elseif($user->isMember('Копирайтер')) {

}
и т.д.
если нужно для каждой что-то выводить, то убери else из условий, проверяй только if'ом