Алексей

Алексей

Был в сети 30 ноября -0001, 00:00
Заказы не принимаю
О, я такое делал, все просто.

В чанке создания/редактирования тикета заменяем 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);
Осталось разобраться с ExtJs.

В принципе у меня custom tv, и в html код я могу написать любой скрипт.

Перезагрузить страницу я могу так:
MODx.loadPage('index.php?bla-bla-bla);
И это действие должно висеть на событии, возникающем после сохранения ресурса. Это мне сейчас не под силу =) Не писал на extjs ничего.
Совладал вроде:
1. Выпилил из тикетс функционал назначения шаблона (поиск в пакете по слову «default_template»).
2. Плагин ChangeTemplate — в начале идет получение переменной из $_REQUEST['id'] — меняем на $_REQUEST['parent']. Т.к. при создании ресурса в GET строку добавляются переменные и id и parent, а при создании тикета — только parent
1. Угу, чет я попутал.

2. Ну собственно ChangeTemplate — это и есть нужный плагин, срабатывает на OnDocFormRender, выставляя нужный шаблон (кстати, еще ДО сохранения ресурса, что удобно администраторам, т.к. они сразу видят все нужные TV поля). Да вот тикетс видно сбрасывает этот выставленный шаблон.
Только что проверил:
1. Создал товар, написал название
2. Нажал сохранить — плагин переопредилил alias сделав его числом, в админке это отразилось, код плагина:
if ($modx->event->name == 'OnDocFormSave') {
  $template = $resource->get('template');
  if ($template == 3) {
    $resource->set('alias', $id);
    $resource->save();
  }
}
3. Жму в админке «Просмотр» — открывается товар, а в url стоит старый alias (тот, который сгенерировался из названия товара)
4. Сохраняю еще раз, жму просмотр, уже новый alias.
Да, туплю =(
И, кстати, про плагины.
У меня стоит плагин на изменение alias, висит на OnDocFormSave.
Работает с товарами через раз. Я сейчас как товар добавляю: Создал, написал название товара, сохранил, добавил картинку. Открываю на сайте — а alias не поменялся. А вот если перед добавлением картинки еще нажать сохранить — то меняется :) В общем еще не до конца сам разобрался, почему глючит.
Попробуй пойти по другому пути. Почитай community.modx-cms.ru/blog/tips_and_tricks/8733.html и создавай альбомы в дереве ресурсов, а не в компоненте Gallery. Соответственно проблем с навигацией по альбомам не будет, будешь просто производить навигацию по ресурсам.
Прочитал, спасибо за ссылку.

На моем сайте складывается ситуация, что большинство тикетов будет короткими, без использования cut, он там просто не нужен, обрезать нечего по сути. В итоге в списке тикетов только заголовки, а когда открываешь тикет — видишь всего то 1-2 предложения.