Поддержать Проект

Обратная связь

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
      • Параметры
      • Шаблоны
      • Параметры пагинации
      • Параметры summary
      • Параметры dateFilter
      • Параметры tagging
      • Параметры request
      • Параметры glossaryFilter
      • Параметры search
      • Параметры tvFilter
      • Плейсхолдеры
      • Примеры
      • Экстендеры
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Ditto

Ditto: Экстендеры

  • Дополнения
  • Ditto
  • Экстендеры
7001

Ditto: Экстендеры

Экстендеры - это дополнительные расширения, которые позволяют решать дополнительные задачи. Все экстендеры Ditto лежат в папке assets/snippets/ditto/extenders/.

dateFilter

Описание: Предназначен для фильтрации документов по дате, может использоваться месте со сниппетом Reflect.

Параметры: &dateFilterSource, &dateFilterDefault, &month, &year, &day

Плейсхолдеры: [+year+], [+month+], [+day+], [+month_numeric+]

Пример:

Экстендеры

Автор: от 19.03.2015
Экстендеры сниппета Ditto это дополнительные расширения которые позволяют решать дополнительные задачи.

Примеры

Автор: от 19.03.2015
Примеры вызова сниппета Ditto.

Плейсхолдеры

Автор: от 19.03.2015
У Дитто есть свои собственные пдэйсхолдеры плюс он поддерживает переменные (поля) используемые в каждом документе.

Параметры tvFilter

Автор: от 19.03.2015
Фильтрация по ТВ параметрам в сниппете Ditto.

Параметры search

Автор: от 19.03.2015
Параметры search сниппета Ditto.

Параметры glossaryFilter

Автор: от 19.03.2015
Параметры glossaryFilter сниппета Ditto.

Параметры request

Автор: от 19.03.2015
Благодаря экстендеру request сниппет Ditto обрабатывает значения и выводит результат в соответствии с переданными параметрами.

Параметры tagging

Автор: от 19.03.2015
Параметры tagging сниппета Ditto.

Параметры dateFilter

Автор: от 19.03.2015
Параметры dateFilter сниппета Ditto.

Параметры summary

Автор: от 19.03.2015
Параметры summary сниппета Ditto.

Параметры пагинации

Автор: от 19.03.2015
Параметры пагинации сниппета Ditto.

Шаблоны

Автор: от 19.03.2015
Шаблоны сниппета Ditto.

Параметры

Автор: от 19.03.2015
Параметры сниппета Ditto.
<form id="dateFilterForm" method="get" action="[~[*id*]~]">
	<select size="1" name="year">
		<option selected value="">-- год --</option>
		<option value="2015">2015</option>
		<option value="2016">2016</option>
	</select>
	<select size="1" name="month">
		<option selected value="">-- месяц --</option>
		<option value="1">Январь</option>
		<option value="2">Февраль</option>
		<option value="3">Март</option>
		<option value="4">Апрель</option>
		<option value="5">Май</option>
		<option value="6">Июнь</option>
		<option value="7">Июль</option>
		<option value="8">Август</option>
		<option value="9">Сентябрь</option>
		<option value="10">Октябрь</option>
		<option value="11">Ноябрь</option>
		<option value="12">Декабрь</option>
	</select>
	<input type="submit" value="Ок" name="Submit">
</form>
<h3>[+year+] [+month+]</h3>
[!Ditto? &parents=`163` &extenders=`dateFilter` &dateSource=`createdon`!]

где:

  • &extenders=`dateFilter` - имя используемого расширения
  • &dateSource=`createdon` - поле по которому будет происходить фильтрация

request

Описание: Изменение параметров Ditto через URL.

Параметры: &stripTags, &bad, &good

Плейсхолдеры: нет

Пример:

Сортировать по...

Результат

Экстендеры
Шаблоны
Примеры
Плейсхолдеры
Параметры пагинации
Параметры tvFilter
Параметры tagging
Параметры summary
Параметры search
Параметры request
Параметры glossaryFilter
Параметры dateFilter
Параметры
<form action="[~[*id*]~]" method="get">
	<p>Сортировать по...</p>
	<select name="ditto_id1_sortDir">
		<option value="">-- выбрать --</option>
		<option value="ASC">Возрастанию</option>
		<option value="DESC">Убыванию</option> 
	</select> 
	<input name="Submit" type="submit" value="Ок">
</form>
<h3>Результат</h3>
[!Ditto? &id=`id1` &parents=`163` &tpl=`@CODE:[+pagetitle+]<br>` &extenders=`request` &sortBy=`pagetitle`!]

где:

  • &extenders=`request` - имя используемого расширения
  • &sortBy=`pagetitle` - параметр, по которому производится сортировка

summary

Описание: Формирование краткого описания и подстановка этого описания в плейсхолдер [+summary+].

Параметры: &truncSplit, &trunc, &truncAt, &truncLen, &truncOffset, &truncText, &tplTrunc.

Плейсхолдеры: [+summary+], [+link+]

Пример:

Вывести аннотации к документам, но поле [+introtext+] у документов не заполнено или заполнено не у всех документов. В шаблоне вместо плейсхолдера [+introtext+] вставляем плейсхолдер [+summary+], а вызов сниппета станет таким:

[!Ditto? &tpl=`@CODE:<h3>[+pagetitle+]</h3><p>[+summary+]</p><p>[+link+]</p>` &parents=`2` &extenders=`summary` &truncLen=`400` &truncText=`Подробнее...`!]

где:

  • &extenders=`summary` - имя используемого расширения
  • &truncLen=`400` - максимальное количество отображаемых символов
  • &truncText=`Подробнее...` - текст ссылки на подробное описание

tagging

Описание: Фильтрация документов по тегам.

Параметры: &tagDocumentID, &tags, &tagMode, &tagDelimiter, &caseSensitive, &tagDisplayDelimiter, &tagSort, &tagData, &tagDisplayMode, &tplTagLinks, &tagCallback

Плейсхолдеры: [+tagLinks+], [+tags+]

Экстендер tagging автоматически подключается при использовании параметра &tagData. В качестве значения параметра &tagData используется имя TV-параметра с типом ввода Text, Radio Options или Check Box. По умолчанию, разделителем между тегами является пробел. Изменить разделитель можно с помощью параметра &tagDelimiter=`, `. Теги отображаются в плейсхолдере [+tagLinks+] в виде набора ссылок.

[!Ditto?
&parents=`4`
&tagData=`keyw`
&tagDelimiter=`,`
&tagDisplayDelimiter=`, `
&tpl=`@CODE:<h3>[+pagetitle+]<small>[+tagLinks+]</small></h3>`
&tagSort=`0`
&tagDocumentID=`[*id*]`!]

где:

  • &tagData=`keyw` - поле документа или переменная шаблона, содержащая теги
  • &tagDelimiter=`,` - разделитель между тегами
  • &tagDisplayDelimiter=`, ` - разделитель между тегами при их выводе
  • &tagSort=`0` - отключаем сортировку тегов по алфавиту
  • &tagDocumentID=`[*id*]` - ID документа, где будет выводиться список отфильтрованных документов

andFilter

Источник: /assets/snippets/ditto/extenders/andFilter.extender.inc.php

<?php
// ---------------------------------------------------
// Group: Filters
// The filter works with TV settings that have multiple values, checking for compliance with each
//**************************
// zk – http://nopreset.ru
//**************************
// Example call Ditto:
// [!Ditto? &startID=`42` &tpl=`tpl` &extenders=`andFilter` &andFilterTv=`color:green,red;size:L,XL,XXL` !] 
// – will return documents where all the red and green things the size L, XL and XXL ;)
// ---------------------------------------------------

// If no fieldname value has been supplied, don't do anything else
if ($andFilterTv === false) {
	return false;
}

global $tvsarray;
$tmparray = explode ( ';', $andFilterTv);
foreach ( $tmparray as $tmpvalue ) {
	$tmpexplode = explode ( ':', $tmpvalue );
	$tvsarray[] = $tmpexplode;
	$filtertvs .= (empty($filtertvs)?"":",") . $tmpexplode[0];
}

$filters["custom"]["andFilter"] = array( $filtertvs, "andFilter"); 

if (!function_exists("andFilter")) {
	function andFilter($resource) {
		global $modx,$tvsarray;
		$good = true;
		foreach ( $tvsarray as $tv ) {
			$values = explode( ',', $tv[1] );
			if( array_search($resource[$tv[0]], $values) !== false  ){
				$good = $good && true;
			} else {
				$good = $good && false;
			}
		}
		if ($good) { return 1; } else { return 0; }
	}
}
?>

Ещё есть небольшой код для программного формирования фильтров, я их передаю через массив в GET с такими же названиями как TV. (Но у дитто есть баг с массивами, так что или фиксить дитто, или исправить на POST):

<?php
//$array_param = array ( 'tv1', 'tv2' .. )
function andFilterTvGet ( $array_param ) {
	foreach ( $array_param as $param ) {
		if (!is_array($_GET[$param])) continue;
		$andfilter .= (empty($andfilter)?"":";") . $param . ':';
		$params = '';
		foreach ($_GET[$param] as $value) {
			$param_g = htmlspecialchars($value);
			if ( !empty($param_g) ) $params .= (empty($params)?"":",") . $param_g; 
		}
		$andfilter .= $params;
	}
	return $andfilter;
}

Описание: Фильтрация по TV-параметру, имеющему несколько значений. Проверка на сооответствие каждому значению.

Параметры: &andFilterTv.

Плейсхолдеры: нет.

Пример: Вывести товары красного и зелёного цета, размеров L, XL и XXL

[!Ditto? &tpl=`tpl` &parents=`2` &extenders=`andFilter` &andFilterTv=`color:зелёный,красный;size:L,XL,XXL`!]

где:

  • &extenders=`andFilter` - имя используемого расширения
  • &andFilterTv=`color:зелёный,красный;size:L,XL,XXL` - параметры, по которым происходит фильтрация документов.

countDocs

Описание: Подсчет количества документов.

Обязательные параметры: нет.

Плейсхолдеры: [+count+]

Пример: Вывести общее количество документов в контейнерах 3,4,5:

[!Ditto? &tpl=`@CODE:[+count+]` &parents=`3,4,5` &extenders=`countDocs` &display=`1`!]

где:

  • &extenders=`countDocs` - имя используемого расширения
  • &display=`1` - устанавливаем значение равное 1, так как нам необходимо вывести количесто только один раз.

distinct

Источник: distinct

Описание: Возвращает только уникальные результаты полей, указанных в качестве значения параметра &distinct=`param1,param2`.

Параметры: &distinct

Плейсхолдеры: нет

Пример: получить только уникальные заголовки страниц для каждой даты.

[!Ditto? &parents=`4` &extenders=`distinct` &distinct=`pagetitle,pub_date`!]

где:

  • &extenders=`distinct` - имя используемого расширения
  • &distinct=`pagetitle,pub_date` - параметры, по которым производится фильтрация

customsort или nosort

Источник: Создать экстендер в assets/snippets/ditto/extenders/ с именем customsort.extender.inc.php и следующее содержимое:

<?php
if(!function_exists('customsort')){
	function customsort($a, $b){
		$pos_a=array_search($a['id'],$GLOBALS['documents']);
		$pos_b=array_search($b['id'],$GLOBALS['documents']);
		if($pos_a == $pos_b){
			return 0;
		}
		return($pos_a < $pos_b)?-1:1;
	}
}
$GLOBALS['documents']=explode(',',$documents);
$orderBy["custom"][] = array("id", "customsort");
$ditto->advSort = true;
?>

Описание: Пользовательский порядок сортировки документов в параметре &documents.

Параметры: &documents

Плейсхолдеры: нет

Пример: вывести список документов в строго заданном порядке.

[!Ditto? &parents=`4` &extenders=`customsort` &documents=`40,46,47,35,36,37,44,41,43,49,48,50,54,53`!]

где:

  • &extenders=`customsort` - имя используемого расширения
  • &documents=`40,46,47,35,36,37,44,41,43,49,48,50,54,53` - заданный порядок вывода документов

glossaryFilter

Источник: glossaryFilter

Описание: продвинутая фильтрация документов.

Параметры: &filterVar, &filterMode, &filterBy, &forceUTF8

Плейсхолдеры: нет

Пример: фильтрация документов по первым буквам алфавита.

<?php
$allowed_req = array(
	# 'label-for-button-or-link' => 'actual-value-for-regex-clause',
	'A' => 'A',
	'B' => 'B',
	'C' => 'C',
	'D' => 'D',
	'E' => 'E',
	'F' => 'F',
	'G' => 'G',
	'H' => 'H',
	'I' => 'I',
	'J' => 'J',
	'K' => 'K',
	'L' => 'L',
	'M' => 'M',
	'N' => 'N',
	'O' => 'O',
	'P' => 'P',
	'Q' => 'Q',
	'R' => 'R',
	'S' => 'S',
	'T' => 'T',
	'U' => 'U',
	'V' => 'V',
	'W' => 'W',
	'X' => 'X',
	'Y' => 'Y',
	'Z' => 'Z',
	'0-9' => '0|1|2|3|4|5|6|7|8|9', 
	'Все' => 'A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z',
);
$cur_filter = isset($_POST['filter']) && isset($allowed_req[$_POST['filter']]) && $allowed_req[$_POST['filter']] ? $allowed_req[$_POST['filter']] : '';
$index = '<form method="post" action="ditto/ekstendery">';

foreach ($allowed_req as $label => $request){
	if ($request) {
		$index .= '<input type="submit" name="filter" value="' . $label . '"' . ($request == $cur_filter ? ' disabled' : '') . '>' . ' ';
	}
}

$index .= '<input type="submit" name="clear" value="Очистить"></form>';

$params['parents']='4';
$params['orderBy']='pagetitle ASC';
$params['filterVar']='pagetitle';
$params['filterBy']= $cur_filter;
$params['depth']='1';
$params['extenders']='glossaryFilter';

$custom_filter = $modx->runSnippet('Ditto',$params);
return $index . ($cur_filter ? $custom_filter : '');
?>

jotcount

Описание: количество комментариев Jot к определенной странице в шаблоне Ditto.

Параметры: нет

Плейсхолдеры: [+jotcount+]

Пример: вывести количество комментариев.

[!Ditto? &parents=`4` &extenders=`jotcount` &tpl=`@CODE:<h3>[+pagetitle+] <small>[+jotcount+]</small></h3>`!]

где:

  • &extenders=`jotcount` - имя используемого расширения

jotdatesort

Описание: информация о комментариях Jot к определенной странице в шаблоне Ditto.

Параметры: &jotfilter, &jotauthorfield

Плейсхолдеры: [+jotcount+], [+jotlastdate+], [+jotlastauthor+]

Пример: вывести количество комментариев.

[!Ditto?
&parents=`4`
&extenders=`jotdatesort`
&tpl=`@CODE:<h3><a href="[~[+id+]~]">[+title+]</a></h3>Количество комментариев: [+jotcount+]<br />Автор комментария: [+jotlastauthor+]<br />Дата последнего комментария: [+jotlastdate:date=`%d.%m.%Y, %H:%M:%S`+]<br />Дата поста: [+date+]<br />Автор поста: [+author+]`
&jotfilter=`1`
&jotauthorfield=`Гость`!]

где:

  • &extenders=`jotdatesort` - имя используемого расширения
  • &jotfilter=`1` - не выводить без комментариев
  • &extenders=`jotdatesort` - имя автора комментария (гостя)

level

Описание: вывод документов определенного уровня.

Параметры: &level

Плейсхолдеры: нет

Пример: вывести количество комментариев.

[!Ditto? &parents=`4` &extenders=`level` &depth=`3` &level=`3`!]

где:

  • &extenders=`level` - имя используемого расширения
  • &depth=`3` - глубина сканирования
  • &level=`3` - вывести документы 3-го уровня

search

Описание: поиск на Ditto.

Параметры: &searchFields, &searchOptions, &searchString, &searchOptionsSeparators

Плейсхолдеры: нет

Пример:

[!Ditto? &parents=`4` &extenders=`search` &searchString=`my search string` &searchFields=`content,tv1,tv2` &searchOptions=`caseSensitive` ...`!]

где:

  • &extenders=`search` - имя используемого расширения
  • &searchString=`my search string` - поисковый запрос
  • &searchFields=`content,tv1,tv2` - поля и переменные шаблона, по которым происходит поиск
  • &searchOptions=`caseSensitive` - производить поиск с учетом регистра

tvFilter

Описание: фильтрация документов по заданным TV.

Параметры: &tvFilterBy, &tvFilterMode

Плейсхолдеры: нет

Пример: показать все дочерние документы контейнеров 3, 4 и 5, к которым привязан TV-параметр dummy.

[!Ditto? &parents=`3,4,5` &extenders=`tvFilter` &tvFilerBy=`dummy` &tvFilterMode=`0`!]

где:

  • &extenders=`tvFilter` - имя используемого расширения
  • &tvFilerBy=`dummy` - имя TV-параметра, по которому происходит фильтрация
  • &tvFilterMode=`0` - исключить документы, к которым НЕ привязан TV-параметр dummy

multiTvFilter

Описание: фильтрация строк переменной шаблона multiTv.

Параметры: &multiTvFilterBy, &multiTvFilterOptions

Плейсхолдеры: нет

Пример: показать все дочерние документы контейнеров 3, 4 и 5, у которых переменная шаблона multiTv event в столбце title не содержит Important.

[!Ditto?
&parents=`3,4,5`
&extenders=`@FILE assets/tvs/multitv/dittoExtender/multitvfilter.extender.inc.php`
&multiTvFilterOptions=`[{"name":"title","type":"text","value":"Important","mode":"contains"}]`!]

где:

  • &extenders=`@FILE assets/tvs/multitv/dittoExtender/multitvfilter.extender.inc.php` - имя используемого расширения
  • &multiTvFilterBy=`event` - имя переменной шаблона multiTv, по которой происходит фильтрация
  • &multiTvFilterOptions=`[{"name":"title","type":"text","value":"Important","mode":"contains"}]` - исключить элементы, у которых в столбце title не содержится Important