Загрузка картинки в тикет

Тикет имеет TV параметр image
По этой методике ничего не получилось.
Как можно загрузить картинку с формы создания тикета пользователю? Подскажите пожалуйста.
Дмитрий Чумак
05 июля 2013, 21:34
modx.pro
1 497
0

Комментарии: 2

Василий Наумкин
06 июля 2013, 07:07
0
Должно получиться по той методике.

Другой нет.
    Дмитрий Чумак
    06 июля 2013, 09:01
    0
    Может что то не так делаю?
    <div class="form-block">
    <form class="well" method="post" action="[[~[[*id]]]]" id="ticketForm">
    <form method="post" enctype="multipart/form-data" action="[[~[[*id]]]]">
    <div id="ticket-preview-placeholder"></div>
    <div class="row">
    <label for="parent">Выберите категорию тикета:<span>*</span></label>
    <div class="sel">
    <select name="parent">[[+sections]]</select>
    </div>
    <div class="ic-bug">
    <div class="ic-bug-l">
    [[+error.parent]]
    </div></div></div>
    
    <div class="row">
    <label for="pagetitle">Введите заголовок<span>*</span></label>
    <div class="inp">
    <div class="inp-ins">
    <input type="text" placeholder="[[%ticket_pagetitle]]" name="pagetitle" value="[[+pagetitle]]" maxlength="50"/>
    </div>
    </div>
    <div class="ic-bug">
    <div class="ic-bug-l">[[+error.pagetitle]]</div></div></div>
    
    <div class="row">
    <label for="pagetitle">Загрузите картинку<span>*</span></label>
    <div>
    <div>
    <input type="file" name="image">
    </div>
    </div>
    </div>
    
    <div class="row">
    <label for="content">Текст<span>*</span></label>
    
    <span class="contact-left">
    <textarea placeholder="[[%ticket_content]]" name="content" id="ticket-editor" cols="50" rows="5" >[[+content]]</textarea>
    </span>
    <div class="ic-bug">
    <div class="ic-bug-l">
    [[+error.content]]
    </div></div></div>
    <div class="row-hint">
    Звездочкой (*) отмечены поля, обязательные для заполнения.
    </div>
    <input type="hidden" name="action" value="saveTicket" />
    <input type="button" class="wrap-btn w94" value="[[%ticket_preview]]" onclick="Tickets.ticket.preview(this.form, this);return false;"/>
    <input type="submit" class="wrap-btn w94" value="[[%ticket_save]]" />  
    <label class="checkbox"><input type="checkbox" name="published" value="1" [[+published:is=`1`:then=`checked`]] /> [[%ticket_publish]]</label>
    </form><div class="ic-bug">
    [[+error:notempty=`<div class="ic-bug-l">[[+error]]</div>`]]</div></div>
    Такая Форма создания тикета
    В плагине Tickets добавляем либо так —
    <?php
    switch($modx->event->name) {
    	case 'OnManagerPageInit':
    		$cssFile = $modx->getOption('tickets.assets_url',null,$modx->getOption('assets_url').'components/tickets/').'css/mgr/tickets.css';
    		$modx->regClientCSS($cssFile);
    	break;
    
    	case 'OnSiteRefresh':
    		if ($modx->cacheManager->refresh(array('default/tickets' => array()))) {
    			$modx->log(modX::LOG_LEVEL_INFO, $modx->lexicon('refresh_default').': Tickets');
    		}
    	break;
    
    	case 'OnDocFormRender':
    		if ($resource->class_key == "TicketsSection") {
    			/* @var TicketsSection $resource */
    			$resource->set('syncsite', 0);
    		}
    	break;
    
    	case 'OnDocFormSave':
          // Указываем путь, пробовал $modx->getOption('assets_url').'path/to/dir/';
          // получается со слэшем вначале: /assets/images/.
          $path = 'assets/images/'; 
          if($mode == 'new'){  // Режим создания документа
            if (!empty($_FILES)) {  // Проверка на пустоту массива $_FILES
              @mkdir($path, 0777, true); // Создаем папку для хранения изображений, с правами 0777, третий аргумент - рекурсивное создание папок.
              foreach($_FILES as $k => $v) {
                $name = $v['name'];
                $size = $v['size'];
                $tmp = $v['tmp_name'];
    
                $ext = pathinfo($name, PATHINFO_EXTENSION); //получаем расширение файла
                $hash = md5(time().$name.$size); // новое название файла
                $uploadfile = $path.$hash.$ext; // объединяем в конечный путь к файлу
    
                if (copy($tmp, $uploadfile)) { // копируем изображения из временной папки в нужное место
                  $resource->set('photo', $uploadfile); 
                  $resource->save(); // Сохраняем объект.
                }
              }
            }
          } else {
            //resource update
          }
    		/* @var Ticket $resource */
    		if ($mode == 'new' && $resource->class_key == "Ticket") {
    			$modx->cacheManager->delete('tickets/latest.tickets');
    		}
    		/* @var TicketsSection $resource */
    		if ($mode == 'upd' && $resource->class_key == 'TicketsSection') {
    			if (method_exists($resource, 'clearCache')) {
    				$resource->clearCache();
    			}
    		}
    	break;
    
    	case 'OnWebPagePrerender':
    		$output = & $modx->resource->_output;
    		$output = str_replace(array('[',']'), array('[',']'), $output);
    	break;
    
    	case 'OnPageNotFound':
    		// It is working only with friendly urls enabled
    		$q = trim($_REQUEST['q']);
    		$matches = explode('/', $q);
    		$count = count($matches);
    		if ($count < 3) {return;}
    
    		$section = $matches[$count - 3];
    		$ticket = $matches[$count - 2];
    
    		// Redirect to requested page, when you moved ticket from one section to another
    		if ($modx->getCount('TicketsSection',array('class_key' => 'TicketsSection', 'alias' => $section, 'deleted' => 0, 'published' => 1))) {
    			if (preg_match('/^\d+$/', $ticket)) {
    				if ($modx->getCount('Ticket',  array('id' => $ticket, 'published' => 1, 'deleted' => 0))) {
    					$url = $modx->makeUrl($ticket, '', '', 'full');
    					$modx->sendRedirect($url);
    				}
    			}
    		}
    	break;
    
    	case 'OnWebPageComplete':
    		$Tickets = $modx->getService('tickets');
    		$Tickets->logView($modx->resource->id);
    	break;
    
    }
    Либо в конце
    <?php
    switch($modx->event->name) {
    	case 'OnManagerPageInit':
    		$cssFile = $modx->getOption('tickets.assets_url',null,$modx->getOption('assets_url').'components/tickets/').'css/mgr/tickets.css';
    		$modx->regClientCSS($cssFile);
    	break;
    
    	case 'OnSiteRefresh':
    		if ($modx->cacheManager->refresh(array('default/tickets' => array()))) {
    			$modx->log(modX::LOG_LEVEL_INFO, $modx->lexicon('refresh_default').': Tickets');
    		}
    	break;
    
    	case 'OnDocFormRender':
    		if ($resource->class_key == "TicketsSection") {
    			/* @var TicketsSection $resource */
    			$resource->set('syncsite', 0);
    		}
    	break;
    
    	case 'OnDocFormSave':
    		/* @var Ticket $resource */
    		if ($mode == 'new' && $resource->class_key == "Ticket") {
    			$modx->cacheManager->delete('tickets/latest.tickets');
    		}
    		/* @var TicketsSection $resource */
    		if ($mode == 'upd' && $resource->class_key == 'TicketsSection') {
    			if (method_exists($resource, 'clearCache')) {
    				$resource->clearCache();
    			}
    		}
    	break;
    
    	case 'OnWebPagePrerender':
    		$output = & $modx->resource->_output;
    		$output = str_replace(array('[',']'), array('[',']'), $output);
    	break;
    
    	case 'OnPageNotFound':
    		// It is working only with friendly urls enabled
    		$q = trim($_REQUEST['q']);
    		$matches = explode('/', $q);
    		$count = count($matches);
    		if ($count < 3) {return;}
    
    		$section = $matches[$count - 3];
    		$ticket = $matches[$count - 2];
    
    		// Redirect to requested page, when you moved ticket from one section to another
    		if ($modx->getCount('TicketsSection',array('class_key' => 'TicketsSection', 'alias' => $section, 'deleted' => 0, 'published' => 1))) {
    			if (preg_match('/^\d+$/', $ticket)) {
    				if ($modx->getCount('Ticket',  array('id' => $ticket, 'published' => 1, 'deleted' => 0))) {
    					$url = $modx->makeUrl($ticket, '', '', 'full');
    					$modx->sendRedirect($url);
    				}
    			}
    		}
    	break;
    
    	case 'OnWebPageComplete':
    		$Tickets = $modx->getService('tickets');
    		$Tickets->logView($modx->resource->id);
    	break;
    
    }
    case 'OnDocFormSave':
          // Указываем путь, пробовал $modx->getOption('assets_url').'path/to/dir/';
          // получается со слэшем вначале: /assets/images/.
          $path = 'assets/images/'; 
          if($mode == 'new'){  // Режим создания документа
            if (!empty($_FILES)) {  // Проверка на пустоту массива $_FILES
              @mkdir($path, 0777, true); // Создаем папку для хранения изображений, с правами 0777, третий аргумент - рекурсивное создание папок.
              foreach($_FILES as $k => $v) {
                $name = $v['name'];
                $size = $v['size'];
                $tmp = $v['tmp_name'];
    
                $ext = pathinfo($name, PATHINFO_EXTENSION); //получаем расширение файла
                $hash = md5(time().$name.$size); // новое название файла
                $uploadfile = $path.$hash.$ext; // объединяем в конечный путь к файлу
    
                if (copy($tmp, $uploadfile)) { // копируем изображения из временной папки в нужное место
                  $resource->set('photo', $uploadfile); 
                  $resource->save(); // Сохраняем объект.
                }
              }
            }
          } else {
            //resource update
          }
    Последнее выдает белый экран по всему сайту.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2