JotX + аватарку к комментариями не зарегистрированным пользователям

добрый день уважаемые гуру.
Нужно добавить аватарку к комментариями не зарегистрированным пользователям
за основу взял эту тему Тык
но не получается вывести, не подскажите как реализовать? просто не так силен в коде
вот образец чего нужно Тык
Спасибо заранее за помощь

7 комментариев

avatar
Если начали делать «как там», то и выводить надо «как там». Т.е. если создали пользовательское поле foto, куда пишется адрес картинки, то и выводить его надо примерно так
[+comment.custom.foto+]
в нужном месте шаблона
avatar
вот именно, что там не получается(( я логику не понял загрузки фотографий, делаю без ажакса, можете объяснить логику добавления, а то уже битый час пытаюсь реализовать, спасибо заранее :)
avatar
Так вы так и пишите в теме не «но не получается вывести», а не получается загрузить фото :)) Для загрузки фото в указанной вами теме используется спец.скрипт

<script type="text/javascript" src="assets/js/ajaxupload.js"></script>
	 
 <script type="text/javascript">/*<![CDATA[*/
     $(document).ready(function(){
          var button = $('#button1,#efo'), interval;

          new AjaxUpload(button, {
               action: 'upload.php',
               name: 'myfile',
               onSubmit : function(file, ext){
                    button.text('.');
                    this.disable();
                    interval = window.setInterval(function(){
                         var text = button.text();
                         if (text.length < 13){
                              button.text(text + '.');
                         } else {
                              button.text('...');
                         }
                    }, 200);
               },
               onComplete: function(file, response){
                    button.text('Обзор...');

                    window.clearInterval(interval);
                    this.enable();
                    $("input[name=email]").val(file);
               }
          });

     });/*]]>*/</script>


в файле upload.php отосланный файл ловится и сохраняется.
avatar
Вы действительно считаете, что пользователи пишущие отзывы анонимно будут загружать аватарки?)))

Мне кажется проще клиента уговорить отказаться от этого функционала, чем внедрять этот функционал за 1, 2, 3… тысячи рублей.
avatar
ну хозяин барин, я тоже уже твердил им, но он хочет, по дизайну так и т.д. что было красиво и т.д., геморой
avatar
В общем по умолчанию jotx картинки не грузит — поэтому тут может помочь разве что собственный плагин на событие какое-нибудь (вроде onBeforePOSTProcess) с отлавливанием, валидацией летящей картинки, ее записи в папку и отправки назад ее имени для внесения в базу — либо, так наверно даже проще — загрузка самой картинки через какой-нибудь скрипт вроде uploadify или приведенный выше ajaxupload — но при этом все равно придется делать все проверки на форматы, размеры и необходимые обрезки/перемещения/сохранения в базу руками.

Третий путь — поискать, может кто уже делал такое и где-нибудь выложил :))
avatar
1) Создай плагин photo.inc.php по пути /assets/snippets/jot/plugins/. Содержимое ниже
2) Допиши событие в своем конфиге. В моем случае это было
/assets/snippets/jot/configs/tree-ajax-reviews.config.php — за основу взял tree-ajax.config.php
3) Добавь в форму поле там же
<code>
<div class="jot-input-prepend">
    <input tabindex="[+jot.seed:math=`?+2`+]" name="photo" type="file" size="40" value="[+form.field.custom.photo:esc+]" placeholder="Аватар" title="Аватар" />
</div>
</code>
4) Добавь сообщение об ошибке там же и обработку события
<code>

$onBeforePOSTProcess = isset($onBeforePOSTProcess) ? $onBeforePOSTProcess : 'antispam,photo';

[+form.error:select=`
&-3=Вы пытаетесь отправить одно и то же сообщение. Возможно вы нажали кнопку отправки более одного раза.
&-2=Ваше сообщение было отклонено.
&-1=Ваше сообщение сохранено, оно будет опубликовано после просмотра администратором.
&1=Вы пытаетесь отправить одно и то же сообщение. Возможно вы нажали кнопку отправки более одного раза.
&2=Вы ввели неправильный защитный код.
&3=Вы можете отправлять сообщения не чаще [+jot.postdelay+] секунд.
&4=Ваше сообщение было отклонено.
&5=[+form.errormsg:ifempty=`Вы не заполнили все требуемые поля`+]
&6=Фотография слишком большого размера
`+]
</code>
5) Что бы слало файлы по ajax, нужно немного прокачать /assets/snippets/jot/js/ajax.js

<code>
$(document).delegate('#respond-'+id+' .jot-form','submit',function(event) {
			event.preventDefault();
			if($(this).find("[name=photo]").length){

				var $input = $(this).find("[name=photo]");
			    var formdata = new FormData($(this).get(0));

			    formdata.append('photo', $input.prop('files')[0]);
			    
				$.ajax({
			        url: $(this).attr('action'),
			        data: formdata,
			        processData: false,
			        contentType: false,
			        type: 'POST',
			        success: function (data) {
			           setData(data,id);
			        }
			    });

				return false;
			}

			//var parent = $('#comment-parent-'+id).val();
			$.post($(this).attr('action'), $(this).serialize(), function(data) {
				setData(data,id);
				//if (parent && addComment) {addComment.moveForm(id,parent);}
			});
		});
</code>

Cодержимое плагина
<code><?php

	function photo(&$object,$params)
	{
		global $modx;

		switch($object->event) {

			case "onBeforePOSTProcess":
				if(in_array("photo", $object->config["customfields"])){

					if (!empty($_FILES["photo"]) && is_array($_FILES["photo"]) && !empty($_FILES["photo"]["size"])) {

						$infoFile = explode("/", $_FILES["photo"]["type"]);
						$info = getimagesize($_FILES['photo']['tmp_name']);


						if (
						$info === FALSE
						|| ($info[2] !== IMAGETYPE_GIF) && ($info[2] !== IMAGETYPE_JPEG) && ($info[2] !== IMAGETYPE_PNG)
						|| $_FILES["photo"]["size"] > 2000000
						|| $_FILES['photo']['error'] !== UPLOAD_ERR_OK) {
						    $object->form['error'] = 6;
							$object->form['confirm'] = 0;
							return true;
						}


						$name = md5($_FILES['photo']['name'].$_FILES['photo']['size']).".".$infoFile[1];

						$path = $_SERVER['DOCUMENT_ROOT']."/assets/userphotos/";
						$uploadfile = $path.$name;

						if(!file_exists($uploadfile))
							$moved = move_uploaded_file($_FILES['photo']['tmp_name'], $uploadfile);

						

						$photo = $modx->runSnippet('phpthumb',   
							array( 
								'input' =>  "assets/userphotos/".$name,
			                	'options' => 'w=300,h=300,far=C'
		                	)
		                );

		                $uploadfileResize = $path."resize_".$name;

						$moved = rename($_SERVER['DOCUMENT_ROOT']."/".$photo, $uploadfileResize);
						unlink($uploadfile);

						if($moved){
							$_POST["photo"] = "/assets/userphotos/resize_".$name;;
						}


					}

					
				}
				
				break;
		}
	}

?></code>
Вуаля
Комментарий отредактирован 2018-01-10 17:02:10 пользователем ssstelllo
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.