Модификация формы создания тикета
        Всем привет.
Есть такой вопрос по Тикетам. В форме создания тикета есть выпадающее меню с выбором раздела с тикетами. Вот так этот фрагмент выглядит в чанке tpl.Tickets.form.create
Где формируется этот выпадающий список и как лучше всего это воплотить?
    
    
                                                                                
            Есть такой вопрос по Тикетам. В форме создания тикета есть выпадающее меню с выбором раздела с тикетами. Вот так этот фрагмент выглядит в чанке tpl.Tickets.form.create
<select name="parent" class="input-xxlarge">[[+sections]]</select>А вот так он выглядит на странице<select name="parent" class="input-xxlarge">
<option value="76" >Тикет 1</option>
<option value="72" >Тикет 2</option>
</select>Задача в следующем. Необходимо, чтобы в этом выпадающем списке Тикеты делились по родителям, оборачиваясь в тег . Примерно вот так<select name="parent" class="input-xxlarge">
<optgroup label="Родитель 1">
<option value="76" >Тикет 1</option>
<option value="72" >Тикет 2</option>
</optgroup>
<optgroup label="Родитель 2">
<option value="76" >Тикет 3</option>
<option value="72" >Тикет 4</option>
</optgroup>
</select>Родителя нельзя выбрать в этом выпадающем списке, это обычный документ-контейнер, в списке он будет служить для удобного отображения большого списка разделов с тикетами.Где формируется этот выпадающий список и как лучше всего это воплотить?
Комментарии: 7
                Формируется вот здесь, воплолить только изменением исходников.            
                    
                О, я такое делал, все просто.
В чанке создания/редактирования тикета заменяем select на другой:
                    В чанке создания/редактирования тикета заменяем select на другой:
<select name="parent" >[[!getSectionsList]]</select>И создаем сниппет getSectionsList с примерно такм кодом (только на 16 строке необходимо поменять условие, там задан родитель «0» и в моем случае template):<?php
$tpl = '<option value="[[+id]]" [[+selected]]>[[+title]]</option>';
$current = 0;
if(isset($_REQUEST['parent'])){
    $current = intval($_REQUEST['parent']);
}
else if(isset($_REQUEST['tid'])){
    $post = $modx->getObject('modResource', intval($_REQUEST['tid']));
    if($post != null){
        $current = $post->get('parent');
    }
}
$q = $modx->newQuery('modResource');
$q->where(array('parent' => 0, 'template' => 16, 'published' => 1, 'deleted' => 0));
$q->sortby('menuindex', 'ASC');
$parents = $modx->getCollection('modResource', $q);
$parentsIds = array();
foreach($parents as $parent){
    $parentsIds[] = $parent->get('id');
}
$q = $modx->newQuery('modResource');
$q->where(array('parent:IN' => $parentsIds, 'template' => 14, 'published' => 1, 'deleted' => 0));
$q->sortby('menuindex', 'ASC');
$blogs = $modx->getCollection('modResource', $q);
$output = array();
foreach($parents as $parent){
    $output[] = '<optgroup label="'.$parent->get('pagetitle').'">';
    $pid = $parent->get('id');
    foreach($blogs as $blog){
        if($blog->get('parent') == $pid){
            $selected = $current == $blog->get('id') ? 'selected="selected"' : '';
            $option = str_replace('[[+title]]', $blog->get('pagetitle'), $tpl);
            $option = str_replace('[[+id]]', $blog->get('id'), $option);
            $option = str_replace('[[+selected]]', $selected, $option);
            $output[] = $option;
        }
    }
    $output[] = '</optgroup>';
}
return implode("\n", $output);            
                Толково! Я и не подумал про сниппет.
Несколько замечаний:
— при такой выборке не будет проверки разрешения юзера на публикацию тикета в секцию.
— сниппет можно сократить раза в 2, если добавить джоинов и в условии сразу указать class_key = TicketsSection.
— str_replace принимает для замены массивы, 3 раза подряд запускать его не нужно.
            
                    Несколько замечаний:
— при такой выборке не будет проверки разрешения юзера на публикацию тикета в секцию.
— сниппет можно сократить раза в 2, если добавить джоинов и в условии сразу указать class_key = TicketsSection.
— str_replace принимает для замены массивы, 3 раза подряд запускать его не нужно.
                Спасибо за замечания, на коленке писал, торопясь, надо у себя поправить.
А насчет проверки — мне она не была нужна, поэтому даж чето и не думал об этом.
                    А насчет проверки — мне она не была нужна, поэтому даж чето и не думал об этом.
на коленке писал, торопясь, надо у себя поправить.Скажите, Алексей, нашлось время поправить?
                Нет, я больше ничего не делал в этом направлении!            
                    
                Спасибо, работает, как родное)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.