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

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

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
Максим Кузнецов
23 июня 2015, 10:30
1
0
Оум… Ну смотрите:

У вас, наверняка, или внутри тега head или перед закрывающим тегом body есть строчки в духе:
<script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript" src="scripts/masonry.js"></script>

<script type="text/javascript">
	$(document).ready(function(){ 
		$('#container').masonry(); //этим вы инициализируете ваш masonry скрипт
	});
	//здесь может быть еще код.
</script>
— в том месте, где написано «здесь может быть еще код», сразу после }); пишите:

$(document).on('mse2_load', function() {
	$('#container').masonry();
});
— ну и "$('#container').masonry();" нужно заменить на ваш вызов masonry, само собой.
Максим Кузнецов
23 июня 2015, 10:17
0
$(document).ajaxStop(function(){
	//повторная инициализация masonry.js тут	
});
Максим Кузнецов
21 июня 2015, 17:22
+1
Если не трудно — объясни простым языком, какой функционал вы хотите реализовать и какой результат обернуть в pdoTools?
Максим Кузнецов
21 июня 2015, 16:10
0
Сортировка по menuindex с выставленными в соответствии по списку значениями или, на крайний случай, по доп. тв-полю не вариант?

(менюиндекс ресурсов можно скриптом проставить в соответствии с порядком в списке)
Максим Кузнецов
21 июня 2015, 15:16
+1
docs.modx.pro/components/pdotools/ — на всякий случай.

По поводу ajaxa — делаю нечто похожее тут, можно запускать где-то внизу страницы сниппет с условием:
<?php
	if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
		return;
	}
	
	if ($_POST['action'] == "название экшна в аяксе") {
		//ваши вызовы и операции
	}

	if (!empty($result)) {
		die(json_encode($result));
	}
— и отправлять аякс-запрос на ту же страницу, где вы и находитесь. После чего скриптами вставлять результат в нужное место.
Подробнее — тут (основы).
Максим Кузнецов
21 июня 2015, 11:21
+1
По поводу массе переменных — имелся ввиду пример, при котором сам сниппет, который передается в элемент — имеет массу своих входных переменных, которые нужно объявить в его вызове.

Что же до велосипеда… Ну, в целом — да, ваша правда.
Но в рамках pdoResources (при всех его преимуществах с позиции скорости и удобовводимости данных): на мой взгляд, говорить, что кто-то уже придумал запросы к базе данных и, поэтому, любые собственные запросы к бд — велосипед, это — перебор..)
Максим Кузнецов
21 июня 2015, 10:44
+1
… вы правда считаете чистый запрос на api — велосипедом?)

limit для pdoPage = кол-во результатов на страницу.
limit для сниппета = ограничение кол-во результатов, которые нужно разбить на страницы. (Пример: ТОП-100 популярных ресурсов, выводимых по 10 на страницу.)

Что же до element — через api, думаю, выйдет быстрее, да и не придется городить массу переменных непосредственно в вызове pdoPage.
Максим Кузнецов
21 июня 2015, 07:32
+1
Любой сниппет может принять любые входящие значения вида &params_N=`x`, но то, как они используются (и вообще, будут ли) напрямую зависит от кода приложения. Если вы пишите свой сниппет выборки, то вы можете указать в коде строки вида:
if empty($a) {
	$a = 1;
}
if empty($b) {
	$b = 0;
}
...->limit($a, $b);
— и, соответственно, если в вызове будут присутвовать свойства &a=`5` &b=`10` — они будут перекрывать их.

Что же конкретно до сниппетов pdoTools — у них есть как параметр &limit, так и параметр &offset.

Подводя итоги: если вы хотите при помощи своего сниппета реализовать выборку и вывести все через pdoTools, то вам нужно получить список ресурсов своим сниппетом и внутри него запустить pdoTools с параметром &resources. Как-то вот так:

$limit = число;
		$offset = число
		$query = $modx->newQuery('modResource');
		$query->where(array(список_условий_для_выборки_вашего_сниппета));
		$query->select(array('modResource.id'));
		$query->limit($limit, $offset);

		if ($query->prepare() && $query->stmt->execute()) {
			//тут получаем и формируем циклом массив в строку $resources, перечисляющую id ресурсов выборки
		}

		$pdoOptions = array();
		$pdoOptions['limit'] = значение_лимита_для_пдо;
		$pdoOptions['offcet'] = значение_оффсета_для_пдо; //в теории, эти строки не слишком нужны, т.к. уже можно ограничить до нужного размера результат при получении из бд
		$pdoOptions['resources'] = $resources;

		return $modx->runSnippet('pdoPage', $pdoOptions);
Максим Кузнецов
20 июня 2015, 20:26
0
Не за что.)

Вообще, в этом примере я предлагал подставить его в уже существующий сниппет, формирующий урл.
Если использовать как отдельный — то можно вызывать его в шаблоне со страницей формы где-нибудь в самом низу, и обернуть все в условие:

if(isset($_POST['submit'])) {
	(код проверки)
}
else {return;}
Ну и редирект и die тоже обернуть в условие, что кол-во get-переменных не нулевое.
Максим Кузнецов
20 июня 2015, 20:14
0
Попробуйте повесить это событие на:

<script type="text/javascript">
    $(document).ajaxStop(function(){
     });
</script>
— и без .submit-условия. Но это плохое решение
Максим Кузнецов
20 июня 2015, 20:07
0
Если через get-параметр стороннего сниппета, формируя ссылку для редиректа на страницу с mFilter, то как-то так (в сниппете, где формируется строка):

$parametrs = array();

if(isset($_GET[название_параметра1])) {
	$parametrs[ключ_переменной] = $_GET[название_параметра1]; 
	// Пример: если нужно передать в строку power=9, то ключ переменной - power
}
//повторяем столько раз, сколько значений из сниппета теоретически можно получить

$pageId = "айди страницы с фильтрами";
$url = $modx->makeUrl($pageId, '', '', 'full');

if (!empty($parametrs)){
	foreach($parametrs as $key => $value){
		if ($firstItemExist == 1) {
			$urlParametrs .= "&" . $key . "=" . $value;
		}
		else {
			$urlParametrs = "?" . $key . "=" . $value;

			$firstItemExist = 1;
		}	
	}
}


$redirectLink = $url . "/" . $urlParametrs;
header('Location: '.$redirectLink);
die();
Максим Кузнецов
20 июня 2015, 13:37
+1
&sortby=`pagetitle` &sortdir=`ASC`
— это, к слову, дефолтные настройки, так что можете в вашем примере просто удалить строчку sortby.
Максим Кузнецов
18 июня 2015, 22:41
0
Да не за что.)

К слову, конкретно на данном сайте подключен визуальный редактор markItUp, идущий в комплекте к дополнению tickets
Максим Кузнецов
18 июня 2015, 22:33
+1
Это реализуется при помощи подключения к текстовому полю визуального редактора (как правило, методами javascript'a) и не завязан на modx'e.

Пример: подключить ckeditor
Максим Кузнецов
18 июня 2015, 17:36
0
Я пробовал вызывать сниппет с данной опцией:
[[!pdoTitle? &id=`3`]]
— но тогда он возвращает пустой результат при любом ответе, кроме тех случаев, когда id=текущему.
Максим Кузнецов
18 июня 2015, 15:58
0
Подскажите, пожалуйста, можно ли вызывать pdoTitle для конкретной страницы (аналог переменной resource)?

Необходимо, преимущественно, для реализации своих аякс-страниц, возвращающих новый заголовок.
Максим Кузнецов
17 июня 2015, 00:10
+1
Плюсую, в большей степени интересна связка в админке.

Я так понимаю, что 1 товар может иметь несколько подходящих марок машин с нескольими подходящими подрубриками для них => мультикатегории мультикатегорий..)
Максим Кузнецов
12 июня 2015, 13:48
0
Ммм… Тогда единственное решение — добавить скрытое поле в чанки outer'ов, которое будет переключать методы обновления и подцеплять его значение в скрипт на требуемые события miniShop2.Cart (change, status, remove, clean и так далее).

А дальше, когда значение уже передастся в класс-обработчик — выставить простое if/else-условие там, где определяются чанки.