modClassVar + TicketForm


Как подцепить modClassVar к TicketForm?
Можно вот так…

создаем плагин
На событие pdoToolsOnFenomInit
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
    if (!$fenom = $modx->getOption('fenom', $scriptProperties)) {
        return;
    }
    if (!$mcv = $modx->getService('modClassVar')) {
        return false;
    }
    $fenom->mcv = $mcv;
    $fenom->addAccessorSmart("mcv", "mcv", Fenom::ACCESSOR_PROPERTY);
    break;
}

Теперь в чанках и шаблонах мы сможем обращаться к modClassVar как
{var $values = $.mcv->getValues($id)}

фрагмент чанка формы тикета
{var $values = $.mcv->getValues($id)}
	
<div class="form-group">
	<label for="tick-modclassvar.tags">Лейбл</label>
	<input type="text" class="form-control" placeholder="Подпись лейбла" name="modclassvar_tags" value="{$values.tags|join}" maxlength="50" id="tick-modclassvar.tags"/>
	<span class="error"></span>
</div>
	
<div class="form-group">
	<label for="tick-modclassvar.tags2">Лейбл2</label>
	<input type="text" class="form-control" placeholder="Подпись лейбла2" name="modclassvar_tags2" value="{$values.tags2|join}" maxlength="50" id="tick-modclassvar.tags2"/>
	<span class="error"></span>
</div>

создаем плагин
На событие OnDocFormSave
<?php
if ($modx->event->name == 'OnDocFormSave') {
    if ($modx->context->key == 'mgr') {
        return;
    }
    if (!$mcv = $modx->getService('modClassVar')) {
        return false;
    }
    
    $array = $resource->toArray();
    $prefix = $mcv->getOption('prefix_key', null, 'modclassvar_', true);
    $data = $mcv->getValues($resource->get('id'));
    foreach($array as $k => $v) {
        if (strpos($k, $prefix) !== 0) {
            continue;
        }
        
        $key = str_replace($prefix, '', $k);
        switch ($key) {
            
            case 'tags':
            case 'tags2':
                $v = $mcv->explodeAndClean($v);
                break;
            default:
                break;
        }
        
        $data[$key] = $v;
        $resource->set($k, null);
    }
    $resource->set(trim($prefix,'_'), $data);  
}
Получаем значения полей tags, tags2 и превращаем в массив.

вызов сниппета
Необходимо добавить поля в список разрешенных
[[!TicketForm? 
&allowedFields=`modclassvar_tags,modclassvar_tags2`
]]
Все!)
31 july 2016, 20:40    Володя   G+  
6    533 +1

Comments (2)

  1. Hiddenski 31 july 2016, 20:49 # +1
    Свершилось! Теперь можно человеческие теги в Tickets сделать (по личному мнению).
    Спасибо :3
    1. Володя 31 july 2016, 20:51 # +3
      пожалуйста!)
    You need to login to create comments.