Максим Кузнецов

Максим Кузнецов

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
08 февраля 2016, 23:14
+1
Вам помогут встроенные модификаторы MODX'a.

Что-то вроде:
[[+название_тв_с_флажком:is=``:then=`первая верстка`:else=`вторая`]]
НО: это не самое лучшее решение с позиции итоговой скорости, поэтому лучше реализовать ту же логику при помощи идущего в комплекте с pdoTools шаблонизатора Fenom.
08 февраля 2016, 22:46
1
+2
Ну, знание js явно не будет лишним..)

С другой стороны, если вы хотите высветить алерт из какой-то произвольной библиотеки, то инициализировать его внутри вышеописанного кода не составит проблем. Если же вы хотите высветить свою стилизацию/текст при помощи идущего в комплекте с AjaxForm jGrowl, то его вызов тоже довольно легко воспринимается наитивно..)

Что же до удаления дефолтного алерта, то реализуется примерно так:
— копируем этот код в произвольный файл
— в вызове сниппета AjaxForm указываем при помощи настройки &frontend_js путь до свежесозданного файла
— в самом файле удаляем вот эту строку
(аналогичным способом можно также удалить другие типы алертов, избавляясь от строчек, начинающиеся с AjaxForm.Message)
08 февраля 2016, 22:35
0
Хороший вопрос..)

Если честно, не уверен, что проблемы с сессией связаны именно с вышеописанным случаем (проверил в связке ms2Gallery + ckeditor — ошибка не воспроизвелась), но могу предложить вставлять прямую ссылку на картинку, а не плейсхолдер:

закладка «галерея» -> выбираете нужное изображение (кликаете) -> нажимаете на превьюшку -> копируете адрес открывшегося окна

Ну и глянуть лог ошибок/консоль при воспроизведении ошибки — может что покажет.
08 февраля 2016, 22:14
+1
1. AjaxForm при выполнении регистрирует событие 'af_complete'. Следовательно, нужно повесить на него событие и проверить возвращаемый ответ:
$(document).on('af_complete', function(event, response) {
	if (response.form.attr('id') == 'айди_формы' && response.success == true) {
		//желаемый код алертов
	}
});
Но не стоит забывать, что это не отменит втроенный алерт из коробки. Т.е. желательно также добавить в вызов сниппета параметр &frontend_js, указывающий на кастомный скрипт обработки формы без вывода итогового алерта.

2. Валидация на уровне php выполняется сниппетом Formlt. (подробнее)

3. Это реализуется при помощи плейсхолдеров и дефолтных скриптов AjaxForm.
05 февраля 2016, 15:10
+1
pdoPage — обертка результатов (которая получает набор «ресурсов» или других данных и оборачивает их в пагинацию).

Соответственно, в вызов pdoPage прописываются и параметры, относящиеся к пагинации, и параметры, относящиеся к сниппету, который возвращает результаты.
05 февраля 2016, 14:52
+1
Потому что у сниппета (и кнопок первая/последняя страница) есть 2 состояния — когда кнопки активны и когда уже отображена первая или последняя страница (кнопки, соответственно, задизейблены).

Иначе говоря, вам нужны шаблоны tplPageFirstEmpty, tplPageFirst, tplPageLastEmpty и tplPageLast.

+ если вы хотите присвоить им «пустое» значение, то необходимо прописывать это через @INLINE (т.е. в обход чанкам).

Пример:
&tplPageFirst=`@INLINE` //вернет "пустой" шаблон
05 февраля 2016, 14:35
0
Документация.

Особое внимание обратить на параметры шаблонов.
03 февраля 2016, 16:05
+1
=> проверка не проходит по условию
$classes == 'class="level3"'

— нужен не level3, а level2.

+ в случай, если у вас в контейнере будет 3 или менее ресурса — последний пункт не будет проходить т.к. у него в классах будет висеть «last».
03 февраля 2016, 15:55
0
Попробуйте вызвать в чанке плейсхолдеры {$idx} и {$classes} и посмотреть, что они возвращают.

Скорее всего, idx всех ресурсов больше 3.
03 февраля 2016, 15:23
0
=> Смотрим лог ошибок.
03 февраля 2016, 14:43
+1
{if $classes == 'class="level3"' && $idx <= 3}
	<div><a href="">{$menutitle}-Ресурс</a></div>
{/if}
02 февраля 2016, 19:04
0
1. Создаете пхп-файл, который будем запускать по крону (допустим, раз в сутки).
2. Предположим, у вас есть 2 раздела — «Список событий за текущий день» (id 1) и «Архив» (id 2). Тогда содержимое созданного php-файла будет примерно следующим:

<?php
	//подключаем функционал MODX'a
	define('MODX_API_MODE', true);

	require '/путь_до/index.php';
	
	// Запускает службы MODX'a
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');

	//выбираем все документы из категории с id 1, у которых дата отмены публикации меньше текущей даты
	$pages = $modx->getCollection('modResource', array('parent' => 1, 'unpub_date:<' => time()));
	
	foreach ($pages as $page) {
		//выставляем айди новой категории
		$page->set('parent', 2);
		$page->save();
	}
	
	//чистим кэш
	$modx->cacheManager->refresh();
02 февраля 2016, 16:28
0
Документация.

Цитата:
Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
01 февраля 2016, 20:36
+1
В pdoMenu, скорее всего, такой функционал не предусмотрен (т.к. возникает сложность с последовательностью нумерации результатов) — т.е. даже модификаторы от [[+idx]] тут особо не помогут.

Если вопрос с меню косметического плана — то можно решить задачу при помощи jquery.

В противном случае разве что вызывать при помощи pdoResources первый уровень меню, а внутри при помощи него же — второй (с выставленным &limit). Или попробовать расписать составной джоин потомков к первому вызову.

UPD: …или же вообще сверстать все руками, без запросов к бд. А активный пункт присваивать уже при помощи Jquery.
01 февраля 2016, 20:16
+3
Кешируйте вызов pdoMenu, используйте полноценные чанки и перепишите их содержимое на fenom, пропишите &fastMode.

Вообще, тут скорость во многом упирается в глубину поиска и количество дочерних документов, а дальше по приоритету — хостинг и вложенные сниппеты/модификаторы.

Для сравнения, на своем сайте на modhost'e (минимальный тариф) некешируемый вызов двухуровнего меню (суммарно ~18 ресурсов) выполняется за 0.06 секунд (кешируемый за 0.01).
01 февраля 2016, 01:11
+1
а ссылки на последние добавленные видео в этой подкатегории должны идти.
Звучишь как Йода..)

Грубо говоря, есть структура:
Видео
- Категория 1
-- (список ресурсов с видео)
- Категория 2
...
И нужно вывести список всех видео, с получением некоторых полей от родителя?

В таком случае код будет примерно такой:
[[!pdoPage?
    	&parents=`айди_всего_раздела_видео`
	&depth=`0`
	&includeTVs=`img_live_radio`
	&tpl=`live_radio_list_item`
	&where=`{"template": айди_шаблона}` //уберем из выборки категории
]]
В самом же чанке у нас есть плейсхолдер [[+parent]] и при помощи сниппета pdoField мы можем вытащить из родителя любые требуемые данные.
— решение не слишком хорошее с позиции кол-ва запросов, но задачу решит.

Как альтернатива — можно воспользоваться leftJoin'ом и Select'ом (документация) и подцепить в вызов требуемые поля от родителя.
01 февраля 2016, 00:54
+1
Админка -> (шестеренка) Системные настройки -> Tickets -> Редактор «markItUp»
30 января 2016, 23:44
+2
При помощи параметра where:

&where=`{"tv_name":"требуемое_значение"}`
(подробнее)
30 января 2016, 13:46
0
Как вариант, могу предложить следующее:

1) копируете содержимое и создаете кастомный файл скриптов Tickets
(чтобы не затерлось при обновлении)
2) в системных настройках Tickets указываете путь до свежесозданного файла
3) после 194 строки прописываете закрытие модального окна.
30 января 2016, 13:09
+2
У getImageList есть параметр &docid. Попробуй дописать в вызове:
&docid=`[[+id]]`