Разделы

Выбор документов в административной части MODx для отображения (обработки)

Предлагается реализовать вот такую фичу:


И так. Начнем.

Первым делом определим сниппет

DropDownDocs


<?php
/*

   Create TV of kind "DropDown List Menu", feel elements field with string:
   @EVAL return $modx->runSnippet("DropDownTree",array('doc'=>0));
   Here "0" is ID of parent document children of which will be displayed in DropDown menu.
*/
$depth= (isset($depth)) ? $depth : 1;
if(!function_exists("getItems")){
   function getItems($p,$l,$space='') {
      $l=$l-1;
      global $modx,$modx_charset;
      ($modx_charset=='UTF-8') ? $nbsp=chr(0xC2).chr(0xA0) : $nbsp=chr(0xA0);
      $c=$modx->getDocumentChildren($p);
      $out=array();
      foreach($c as $k)  {
         $title=empty($k['pagetitle']) ? $k['longtitle'] : $k['pagetitle'];
         $id=$k['id'];
         $out[]=$space.$title." ($id)==$id";
         if ($l>0) {
            $ret=getItems($k['id'],$l,$space.'---');
            if (count($ret)>0) $out=array_merge($out,$ret);
         }
      }
      return $out;
   }
}

return implode(',||',getItems($doc,$depth));
?>


он был несколько переделан из сниппета DropDown (который реализует аналогичный функционал, только с некоторыми не нужными мне моментами)

Назначение этого сниппета — вывести список всех документов в формате пригодном для админки, а именно таком:
«наименование» == «ID-пункта»,||
«наименование» == «ID-пункта»,||
«наименование» == «ID-пункта»,||
и т.д.

Параметры сниппета следующие:
&doc — документ, корен дерева для обхода
&depth — уровень вложенности, для которого генерируется список (1 — отображаются только дети документа &doc, 2 — отображаются дети и внуки документа &doc)

Теперь определим

TV-параметр



для удобства приведу скриншот:

Нам необходимо выставить свойство Тип ввода: в нужный нам тип (ListBox, DropDown List, Check Box и т.п.) — все зависит от нужных нам возможностей.
И теперь самое главное. Написать выражение:
@EVAL return $modx->runSnippet("DropDownDocs",array('doc'=>2));

в поле возможные значения.
Тем самым при вызове админки будет отрабатывать наш сниппет, и выдавать нужную нам последовательность значений.

В дальнейшем после привязки TV-параметра к определенному шаблону, при редактировании свойств документа мы сможем выбирать требуемые нам документы для отображения.
А отображать их можно скажем так:
[[Ditto? &tpl=`chunk` &documents=`[*skin_for_doors*]` ]]
  • +3
  • 11 декабря 2009, 11:01
  • grinant

Комментарии (16)

RSS свернуть / развернуть
0
Извините, но я немного смысла не уловил.

Чего именно мы добиваемся, используя данный сниппет?
avatar

pitbull

  • 11 декабря 2009, 20:36
0
Картинку прояснит одна мелочь: на картинке редактируется документ с ID=2?

Ааа, ну точно, т.е. мы выбираем что отображать в каталоге?

хм, а зачем отображать не все? Да и можно же играть статусом опубликован/не опубликован у конкретного документа.
avatar

pitbull

  • 11 декабря 2009, 20:39
0
не обязательно отображать. можно обрабатывать…

пример:
отображение различных свойств товара (текстур и т.п.) доступных для данного конкретного товара. Т.е. для одной двери может быть доступен только зеленый оттенок, а для другой зеленый и красный, а для третьей красный и фиолетовый… вот для таких дверей-документов заводится TV-параметр в котором прописывается доступные цвета.

avatar

grinant

  • 12 декабря 2009, 04:16
0
добиваемся динамического отображения пунктов в списке.
avatar

grinant

  • 12 декабря 2009, 04:19
+1
а чем вам не подошла команда @SELECT? я например вбиваю в поле «возможные значения» это:
@SELECT pagetitle, id FROM modx_site_content WHERE parent=2

«SELECT pagetitle, id» как раз формирует пары вида «pagetitle==id»

и еще, мне для таких случаев использовать тип checkbox удобнее (если конечно количество элементов — не несколько сотен)
avatar

antonkuzmin

  • 12 декабря 2009, 23:41
0
@SELECT pagetitle, id FROM modx_site_content WHERE parent=2

скорее это не хороший код, т.к. если нужно будет что-то поменять, то менять придется везде, в сниппете по сути такой запрос скрыт от посторонних глаз, т.е. увеличивается уровень абстракции.

ну а по сути, мой сниппет выводит туда целое поддерево документов, а во-вторых использует дополнительное форматирование, например проставление, (запятой) после ID каждого документа. Это необходимо для формирования полноценного списка: 1,2,3,4…

а с checkbox-ами предложение хорошее :) спасибо
avatar

grinant

  • 13 декабря 2009, 00:35
0
если я вас правильно понял про запятые — то modx в значении tv-параметра их проставляет самостоятельно. по-крайней мере моя конструкция через @SELECT позволяет делать множественный выбор.
ну а если надо вывести поддерево, состоящее из нескольких уровней, тогда конечно это можно сделать только специальным сниппетом.
avatar

antonkuzmin

  • 13 декабря 2009, 08:34
0
в таком случае это вдвойне нехороший код, т.к. неочевидно что MODx проставляется запятые, а если код будет таким:

@SELECT id,pagetitle FROM modx_site_content WHERE parent=2

логика выполнения то испортится.
avatar

grinant

  • 13 декабря 2009, 11:05
+1
Есть для этих нужд такой плагин.
avatar

Andchir

  • 14 декабря 2009, 23:34
0
забавно, т.е. можно выбирать любой документ из дерева? а много документов можно выбрать?
avatar

grinant

  • 15 декабря 2009, 04:02
+1
я думаю Вам как автору можно было бы создать топик, и описать его по русски здесь. С примерами.
avatar

grinant

  • 15 декабря 2009, 04:03
+1
Топик есть. Документов можно выбрать сколько угодно. Только вот названия выбранных документов пока не выводятся, но есть идеи как это сделать.
avatar

Andchir

  • 15 декабря 2009, 09:44
0
в таком случае стоит оформить на него ссылку здесь (есть такой тип топиков)

многие о нем не знают, а вещь хорошая, однако я так понимаю туда можно только добавлять, и никак не удалять.

avatar

grinant

  • 15 декабря 2009, 09:49
0
Удалять тоже можно. Циферку удалите и всё.
avatar

Andchir

  • 15 декабря 2009, 09:55
0
а если не ту циферку удалю? одно дело циферка, другое полное название документа… большая разница.
avatar

grinant

  • 15 декабря 2009, 09:58
0
Я же написал выше, что названия пока не выводятся, но будет сделано. Не нравится — не пользуйтесь :).
avatar

Andchir

  • 15 декабря 2009, 10:03

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.