Антон

Антон

С нами с 17 ноября 2015; Место в рейтинге пользователей: #527

Уведомление пользователей о новом тикете

Друзья, помогите дописать плагин уведомления администратора сайта о новом тикете/об изменении существующего тикета. Написал следующий вариант:
<?php
switch ($modx->event->name) {
    case 'OnBeforeDocFormSave':
 
        if ($mode == 'new' || $mode == 'upd' && $resource->class_key == "Ticket") {  
            $resource->set('published', 0);                               
            $modx->getService('mail', 'mail.modPHPMailer');
            $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
            $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
            
            $user_vo = $resource->get('createdby');
			$theme_vo = $resource->get('pagetitle');
			$user = $modx->getUser();
			$username = $user->username;
            
            $modx->mail->address('to', 'mail@mail.ru');
            if ($mode == 'new') {
                $modx->mail->set(modMail::MAIL_SUBJECT, 'New resourse on the site');
                $modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('dino__new_ticket.tpl', array('pagetitle'=>$theme_vo, 'createdby' => $user_vo, 'username' => $username)));
                }
            if ($mode == 'upd') {
                $modx->mail->set(modMail::MAIL_SUBJECT, 'User edited resourse');
                $modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('dino__edit_ticket.tpl', array('pagetitle'=>$theme_vo, 'createdby' => $user_vo, 'username' => $username)));
                }
            $modx->mail->setHTML(true);
            if (!$modx->mail->send()) {
                $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send an email: '.$modx->mail->mailer->ErrorInfo);
            }
            $modx->mail->reset();
 
        }
 
        $resource->save();
 
    break;
}
Все хорошо. Админ уведомляется и при новом тикете и при изменении тикета. НО. Когда администратор заходит в тикет из админки и правит его, задает ему время снятия с публикации, уведомление снова приходит админу на почту и тикет приобретает статус 0. После чего время жизни тикета из него уходит.
Как отменить уведомление админа при изменении самим же админом? + при сохранении админом тикета делать ему статус 1? Готов помочь материально за идею.
Антон
05 октября 2020, 21:47
modx.pro
466
0

Отображение превью svg файлов в filemanager

Заметил, что при выборе изображений в файлменеджере превью svg файлов не отображается. Как починить?
Антон
16 июля 2020, 12:15
modx.pro
499
0

base href без слеша в конце

Настроил переадресацию со страниц со слешем на страницы без слэша.
Но как убрать слеш в конце из
<base href="https://site.ru/" />
не пойму. Как с этим бороться?
Антон
05 мая 2020, 14:17
modx.pro
504
0

TV с флагом страны

Кто-нибудь заморачивался с созданием TV, которое выводит выпадающий список с флагами стран непосредственно в админке? Если прописать значение в формате css, к примеру:
<span class="flag-icon flag-icon-gr"></span>
на бэккенде подхватится при условии подключения файла стилей.
Как с этим быть в админке?
Антон
15 апреля 2020, 15:45
modx.pro
390
0

AjaxForm отображение загруженных файлов в адмике

Подскажите пжта, как реализовать возможность просмотра файлов, прикрепленных к форме, непосредственно в Formit? Сейчас в Formit отображается только наименование файла. Файлы успешно сохраняются на сервере, но открыть их через Formit не получается.
Сам вызов формы:
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.template`
&hooks=`formit2file,FormItSaveForm,email`
&customValidators=`formit2checkfile`
&emailTpl=`tpl.email`
&formName=`JOB FROM SITE` &formFields=`name,age,message,upload_1`
&fieldNames=`name==Name,age==Age,message==About me,upload==Photo №1`
&validationErrorMessage=`The form contains errors!`
&successMessage=`Message sent successfully!`
&closeMessage=`Close message`
&errTpl=`[[+error]]`
]]
Загрузка файлов посредством сниппета formit2file:
<?php
// initialize output;
$output = true;
  
// valid extensions
$ext_array = array('jpg', 'jpeg', 'png');
  
// create unique path for this form submission
//$uploadpath = 'assets/uploads/';
  
// you can create some logic to automatically
// generate some type of folder structure here.
// the path that you specify will automatically
// be created by the script if it doesn't already
// exist.
  
// EXAMPLE:
// this would put all file uploads into a new,
// unique folder every day.
$uploadpath = 'assets/uploads/'.date('Y-m-d').'/';
  
// get full path to unique folder
$target_path = $modx->config['base_path'] . $uploadpath;
  
// get uploaded file names:
$submittedfiles = array_keys($_FILES);
  
// loop through files
foreach ($submittedfiles as $sf) {
  
    // Get Filename and make sure its good.
    $filename = basename( $_FILES[$sf]['name'] );
  
    // Get file's extension
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $ext = mb_strtolower($ext); // case insensitive
  
    // is the file name empty (no file uploaded)
    if($filename != '') {
          
        // is this the right type of file?
        if(in_array($ext, $ext_array)) {
      
            // clean up file name and make unique
            $filename = mb_strtolower($filename); // to lowercase
            $filename = str_replace(' ', '_', $filename); // spaces to underscores
            //$filename = date("Y-m-d_G-i-s_") . $filename; // add date & time
              
            // full path to new file
            $myTarget = $target_path . $filename;
              
            // create directory to move file into if it doesn't exist
            if(!is_dir($target_path)) {
                mkdir($target_path, 0755, true);
                } else {
                $modx->log(modX::LOG_LEVEL_ERROR, 'dossier existe' );    
                }
              
            // is the file moved to the proper folder successfully?
            if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) {
                // set a new placeholder with the new full path (if you need it in subsequent hooks)
                $modx->setPlaceholder('fi.'.$sf.'_new', $myTarget);
                // set the permissions on the file
                if (!chmod($myTarget, 0644)) { /*some debug function*/ }
                  
            } else {
                // File not uploaded
                $errorMsg = 'There was a problem uploading the file.';
                $hook->addError($sf, $errorMsg);
                $output = false; // generate submission error
            }
          
        } else {
            // File type not allowed
            $errorMsg = 'Type of file not allowed.';
            $hook->addError($sf, $errorMsg);
            $output = false; // generate submission error
        }
      
    // if no file, don't error, but return blank
    } else {
        $hook->setValue($sf, '');
    }
  
}
  
return $output;
Антон
05 апреля 2020, 19:00
modx.pro
594
0

Не передаются значения TV при фильтрации

Почти что победил TagManager2 — фильтры отображаются, все фильтруется. Но когда фильтруешь товары, исчезают значения TV из отображения карточки товара. Жмешь Enter в адресной строке браузера по сформированной TM2 ссылке и значения TV появляются. Подскажите, в чем может быть проблема?
Чанк товара:
<div class="col-xl-4" style="padding-left: 5px; padding-right: 5px; float: left;">						
<div class="post-02 post-02__style-02 js-post-effect">
<div class="post-02__media">
<a href="[[~[[+id]]]]">
[[getImageList?
&tvname=`slider`
&docid=`[[+id]]`
&limit=`1`
&tpl=`@CODE:<img src="[[+slide]]" alt="[[+alt]]" />`
]]
</a></div>
<div class="post-02__body">
<h2 class="post-02__title"><a href="[[~[[+id]]]]">[[!pdoField? &id=`[[+id]]` &field=`name`]]</a></h2>
<div class="post-02__department">[[!pdoField? &id=`[[+id]]` &field=`seo_tag`]]</div>
<div class="post-02__content">
<div class="post-02__description">
[[pdoField:ellipsis=`200`? &id=`[[+id]]` &field=`specification`]]
<ul>
<li><span class="primary-color">Age</span>[[!pdoField? &id=`[[+id]]` &field=`age`]]</li>
<li><span class="primary-color">Height</span>[[!pdoField? &id=`[[+id]]` &field=`height`]] cm</li>
<li><span class="primary-color">Weight</span>[[!pdoField? &id=`[[+id]]` &field=`weight`]] kg</li>
</ul>
</div>
<a class="post-02__link" href="[[~[[+id]]]]">View detail</a>
</div>
</div>
</div>
</div>
Вывод TMFilters:
<div id="filters">
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&jsScript=`0`
&toPlaceholder=`filters`
]]
<form action="[[~[[*id]]]]" method="get">
<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
[[+filters]]
<button class="btn btn-info" type="button" onclick="tmFilters.resetFilters(); return false;">Сбросить фильтр</button>
</form>
</div>
Антон
02 апреля 2020, 19:32
modx.pro
479
0

Обрезка текста в pdoField

Настраиваю на сайте TagManager2.
Сделал внутри чанка вывод TV с помощью
[[!pdoField? &id=`[[+id]]` &field=`age`]]
Как обрезать количество выводимых символов в age? Ранее все решалось путем
[[+specification:ellipsis=`200`]]
но последний вывод отказался работать
Антон
01 апреля 2020, 17:55
modx.pro
383
0

Jevix и тэги php

Друзья, как правильно прописать правило для Jevix, по которому он будет вырезать комментарии, содержащие php код в Comments?
Антон
31 марта 2020, 18:08
modx.pro
260
0

Фильтрация по TV полям

Требуется подсказка. На сайте порядка 50 однотипных документов, в которых в каждом документе находится порядка 5 TV полей (возраст, вес, рост и т. п.). Помимо числовых TV полей имеется текстовые TV поля.
1. Как быстро, просто сделать множественный фильтр этих 50 документов по всем TV полям, причем числовые поля фильтровать двухсторонними ползунками (например как здесь), а текстовые поля фильтровать чекбоксами?
2. Можно ли выполнить эту фильтрацию в совокувности по всем значениям?
3. Можно ли осуществить фильтрацию без вывода отдельной страницы с результатами филтра? Результат подгружать прямо на странице без ее перезагрузки?
Укажите пжта путь…
Антон
27 февраля 2020, 17:08
modx.pro
403
0

Сложные дополнительные поля

Изучаю возможность создания сайта рецептов на ModX. Для добавления информации в панели контент-менеджера, контент-менеджер должен иметь возможность добавить в карточку документа столько TV-полей, сколько ему нужно.
К примеру, рецепт состоит из восьми шагов, имеющих текстовое описание и изображение. Контент-менеджер при добавлении рецепта, добавляет шаг 1, шаг 2… шаг N. Может ли подобное админка ModX или копать в сторону других CMS?
Антон
19 августа 2019, 20:53
modx.pro
432
0