Модификация формы создания тикета
Всем привет.
Есть такой вопрос по Тикетам. В форме создания тикета есть выпадающее меню с выбором раздела с тикетами. Вот так этот фрагмент выглядит в чанке 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 раза подряд запускать его не нужно.
Спасибо за замечания, на коленке писал, торопясь, надо у себя поправить.
А насчет проверки — мне она не была нужна, поэтому даж чето и не думал об этом.
А насчет проверки — мне она не была нужна, поэтому даж чето и не думал об этом.
на коленке писал, торопясь, надо у себя поправить.Скажите, Алексей, нашлось время поправить?
Нет, я больше ничего не делал в этом направлении!
Спасибо, работает, как родное)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.