<optiongroup> в секциях Tickets

Приветствую.
Подскажите как сделать чтобы все секции делились на разделы с помощью тегов в форме добавления тикетов.
В админке выглядит примерно так:
Ресурс (категория)
Раздел с тикетами (подкатегория)
Раздел с тикетами (подкатегория)
Раздел с тикетами (подкатегория)
Ресурс (категория)
Раздел с тикетами (подкатегория)
Раздел с тикетами (подкатегория)
Раздел с тикетами (подкатегория)
Соответственно категории должны быть обернуты в в селекте разделов в форме добавления тикетов.
Николай Загумённов
06 сентября 2014, 20:10
modx.pro
1
2 173
0
Поблагодарить автора Отправить деньги

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

Николай Загумённов
07 сентября 2014, 10:13
0
Извиняюсь, глупый вопрос был, ведь можно в ручную забить все в чанке создания тикета.
    Николай Загумённов
    12 сентября 2014, 13:24
    0
    Хотя нет, вопрос все еще актуален. Не получается сделать так чтобы при изменении тикета рездел тикетов сохранялся.
      Борис И
      04 ноября 2014, 21:53
      0
      Здравствуйте. Если я вас правильно понял, то вот костыли.
      1. форму для публикации тиккета выводим так (понятно, что используемые и необходимые поля у каждого свои )

      [!TicketForm? &requiredFields=`longtitle,introtext` &allowedFields=`longtitle,fullname,introtext` &redirectUnpublished=`ваш id` &parents=`[[!get?]]` &tplFormCreate=`tpl.Tickets.form.create1` ]]
      2. сниппет [!get?]]
      <?php
      return $_GET[parentcat];
      3. часть шаблона tpl.Tickets.form.create1 отвечающая за выбор категории (рекомендую изначально сделать копию оригинального шаблона (например тот же tpl.Tickets.form.create1) и уже туда добавлять код)
      <script>
          window.onload = function() 
          {$("#parentcat [value='[[!get?]]']").attr("selected", "selected");}
      </script> 
      <form  action="" id="ticketFormcat" method="get" >
              <div class="form-group">
      	    	<label  for="ticket-sections">Ваше название</label>
                      <select name="parentcat" class="form-control" id="parentcat" onchange="if (this.selectedIndex) this.form.submit ()">
                              <option value="" ></option>
                              [[pdoMenu?
                              &parents=`0`
                              &level=`1`
                              &firstClass=``
                              &lastClass=``
                              &hereClass=``
                              &outerClass=``
                              &tplOuter=`@INLINE [[+wrapper]]`
                              &tpl=`@INLINE <option value="[[+id]]">[[+menutitle]]</option>`
                          ]]
                  </select>
              </div>
          </form>
      Принцип работы
      У сниппета TicketForm есть возможность выбора родителя откуда выводить: &parents Вот туда мы будем подставлять значение из выбранного селекта (категории). Мы выбираем селект (категории — выводимый с помощью pdoMenu), форма отправляется по выбору селекта (onchange=«if (this.selectedIndex) this.form.submit ()»). Сниппет [[!get?]] ловит отправленное значение (id) формы (id категории), по выбранному нами селекту (категории) и подставляет его в TicketForm &parents=`[[!get?]]`. Так, как после автоматической отправки формы, по выбору селекта страница перезагружается и он сбрасывается, то скриптом $("#parentcat [value='[[!get?]]']").attr(«selected», «selected»); устанавливаем выбранное значение, чтобы не путать пользователя.
      Как следует, не потестил, но пока вроде работает.

      К сожалению это всего лишь костыли и решение достаточно кривое, но как сделать более красиво я не знаю. Нужно просить у Василия, и если он сочтет нужным и выкроит время, то будет счастье и появится такая возможность из коробки.

      Приветствуются любые правки, переделки и оптимизация.
        Николай Загумённов
        28 декабря 2014, 12:26
        0
        Спасибо. Я решил немного другим способом.
        Секции вызываю как у вас, через pdomenu:
        <select name="parent" class="form-control" id="ticket-sections">
        		    [[!pdoMenu?
                        &parents=`3`
                        &level=`3`
                        &firstClass=``
                        &lastClass=``
                        &hereClass=``
                        &outerClass=``
                        &tplOuter=`@INLINE [[+wrapper]]`
                        &tpl=`@INLINE <optgroup label="[[+menutitle]]">[[+wrapper]]</optgroup>`
                        &tplInner=`@INLINE [[+wrapper]]`
                        &tplInnerRow=`Sections`
                    ]]
        		</select>
        Чанк Sections:
        <option [[+id:is=`[[UltimateParent? id=`[[#GET.tid]]` &topLevel=`4`]]`:then=`selected`]] value="[[+id]]">[[+menutitle]]</option>
        Структура выглядит так:

        При этом при редактировании ресурса показывается selected.
        При этом использовался сниппет UltimateParent
        Максим Кузнецов
        05 ноября 2014, 08:05
        0
        Подскажите пожалуйста ответ на вопрос по поводу значений из селектов для TicketForm:

        Есть html-кусок в чанке создания тикета для TicketForm:
        <select class="roundInput" name="news.Category">
        	[[!getTv? &tvName=`news.Category`]] 
        </select>

        И сниппет getTv, который подцепляет возможные значения tv-поля:
        <?php
        	$getCategory = $modx->getObject('modTemplateVar',array('name'=>$tvName));
        	$getCategory = $getCategory->get('elements');
        	$getCategory = explode('||',$getCategory);
        
        	if (!isset($defaultText)) {$defaultText = 'Выберите категорию';}
        	
        	if (in_array($current, $getCategory)) {
        		echo '<option disabled="disabled" value="">'.$defaultText.'</option>';
        	}
        	else {
        		echo '<option disabled="disabled" selected="selected" value="">'.$defaultText.'</option>';
        	}
        	
        	foreach($getCategory as $key => $value) {
        	 	$row = explode('==',$value);
        	 	if ($current == $row[1]) {
        	 		echo '<option selected="selected" value="' . $row[1] . '">' . $row[0] . '</option>';
        	 	}
        		else {
        			echo '<option value="' . $row[1] . '">' . $row[0] . '</option>';	
        		}
        	 }

        — который формиует option поля. Но TicketForm не воспринимает выбранное значение при добавление тикета и просит заполнить соответствующее поле. Подскажите, пожалуйста, в чем может быть причина?
          Борис И
          06 ноября 2014, 14:05
          0
          Здравствуйте. Ответить точно я не могу, но могу привести свой пример.
          У меня в форме есть доп. поля (tv, например поле model ) которые пользователь заполняет сам, я их не подцепляю.
          Вот пример вызова, обратите внимание на &allowedFields=`longtitle,fullname,model,introtext,avtor`
          [[!TicketForm? &requiredFields=`longtitle,model,introtext` &allowedFields=`longtitle,fullname,model,introtext,avtor` &redirectUnpublished=`63` &parents=`[[!get?]]` &tplFormCreate=`tpl.Tickets.form.create1` ]]
          В шаблоне формы tpl.Tickets.form.create1 участок отвечающий за model. Сделал, абсолютно также как остальные стандартные поля.
          <div class="form-group">
          		<label for="ticket-model">[[%ticket_model]]</label>
          		<input type="text" class="form-control" placeholder="[[%ticket_model]]" name="model" value="" maxlength="50" id="ticket-model"/>
          		<span class="error"></span>
          	</div>
          Ну и добавил подпись в словарь.
          Все работает и введенные поля (tv) успешно отправляет.

          И еще, если не получается решить простым способом, попробуйте сделать ваш select необязательным полем, создайте скрытый input и подставляйте выбранное значение из select яваскриптом в этот input, а его уже и отправляйте. Сам не пробовал, но должно получится. В данном случае, какая разница, заполнил поле пользователь или скрипт.

            Максим Кузнецов
            06 ноября 2014, 15:25
            0
            По поводу скрипта — да, работать будет, но это — костыль.

            По поводу вашего кода — в том то и соль, что select — не input и, видимо, обрабатывается иначе.
              Борис И
              06 ноября 2014, 16:05
              0
              Полностью с вами согласен, решение кривое, но решение. Если найдете правильное решение, напишите пожалуйста, может пригодиться многим.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8