Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
20 октября 2014, 15:23
1
0
Да, блин, включи логику!

Рабочий код
$res = $row['bal'];
Нерабочий код
$res = $row('made');

Чем отличается рабочий код от нерабочего? Что нужно исправить?
Василий Наумкин
20 октября 2014, 15:19
+1
Ну, у нас тут в основном про Revolution.

Evolution любят на modx.im.
Василий Наумкин
20 октября 2014, 15:17
0
Все запросы отправляются через ajax, на вот этот коннектор.

Там загружается Office и вызывается его метод loadAction. Он разделяет запрос на 2 строки: класса и метод.

Если запрошенный метод есть в указанном классе — он будет вызван. Если нет, ты получишь ошибку:
if (isset($this->controllers[$name])) {
	/* @var officeDefaultController $controller */
	$controller = $this->controllers[$name];
	$controller->setDefault($scriptProperties);

	if (empty($action)) {$action = $controller->getDefaultAction();}
	if (method_exists($controller, $action)) {
		return $controller->$action($scriptProperties);
	}
}
else {
	return 'Could not load controller "'.$name.'"';
}

Судя по твоему сообщению, ты этого момента даже не доходишь, потому что получаешь «не могу найти указанное действие» от action.php, а он такое выводит, если получает false от loadAction.

Когда loadAction возвращает false? Когда action пустой. А это значит, что твоя форма даже не передала нужный action — вот и ошибка.

Разбирайся с тем, что же ты отправляешь на коннектор. Ну и читай исходники, конечно.
Василий Наумкин
20 октября 2014, 14:26
0
$res = $row('made');
Так к ключам массивов не обращаются. Это error.
Василий Наумкин
20 октября 2014, 13:36
1
0
Ты для начала попробуй простой пример:
[[!pdoResources?
	&tpl=`@INLINE <a href="/[[+uri]]">[[+pagetitle]]</a>`
	&parents=`0`
	&prepareSnippet=`mySnippet`
]]
Сниппет mySnippet:
$row['pagetitle'] .= rand();

return serialize($row);

Дальше уже усложняй и добавляй свою логику, чанки и код из сниппетов.
Василий Наумкин
20 октября 2014, 13:30
+2
В чанке заменяешь
[[!getBtn? &id=`[[+id]]`]]
на
[[+getBtn]]
То есть, вместо вызова сниппета будет плейсхолдер, куда потом вставится результат.

Затем в сниппете, указанном в prepareSnippet пишешь эту свою логику определения не получая ресурс — он уже получен и находится в переменной $row!
<?php
$id = $row['id'];
$key = $row['key']; // Не знаю, что это - надеюсь, что поле ресурса

$res = $row['bal'];
if ($res < 4 && !empty($res)) {
	$row['getBtn'] .= "<button class=\"btn2 btn_grey\" type=\"submit\" id=\"nocart\" name=\"ms2_action\" >Не комплект</button>";
	// ... тут остальная твоя логика, цель которой выставить верный $row['getBtn']
}
// Serialize может проглючивать, замечал такое. Если что - пробуй еще
// return json_encode($row);
return serialize($row);
В итоге мы не получаем ресурс из БД повторно, не делаем некаких запросов, а только добавляем новое поле в массив данных, проверяя другие поля этого массива — что в итоге будет вставлено в чанк.

Никаких getObject и setPlaceholder не нужно — именно от них мы и избавляемся для большей скорости.

То есть, всё уже выбрано, ты просто подготавливаешь массив данных для оформления в чанке. Отсюда и название параметра — «подготовочный сниппет».
Василий Наумкин
20 октября 2014, 13:20
0
Судя по картинке, у тебя там вообще проблема с админкой.

Должно выглядеть вот так:

Наверняка есть какие-то ошибки в javascript, поэтому и кнопки не работают.
Василий Наумкин
20 октября 2014, 12:08
4
0
С версии MODX 2.3 у ресурса есть свой метод clearCache.
if ($resource = $modx->getObject('modResource', 15)) {
	$resource->clearCache();
}
Василий Наумкин
20 октября 2014, 09:32
0
Изображения и не должны копироваться, а с ценой, наверное, какой-то глюк.
Василий Наумкин
20 октября 2014, 08:13
0
Это нужно у автора OrderPrint спрашивать — я не знаю, как он работает. Могу только предположить, что юзеру не хватает каких-то прав на печать.

И условие поменяй на
&where=`{"user_id":"[[!stupid_user_id]]"}`
LIKE работает медленнее, чем точное сравнение.
Василий Наумкин
19 октября 2014, 14:12
0
Да у них там каждый раз всё лучше и лучше становится. Такое ощущение, что за сайтом вообще никто не смотрит.

Поправил, как смог. Большой лог пришлось сделать ссылкой на GitHub, иначе вообще ни в какую.
Василий Наумкин
19 октября 2014, 13:00
0
Да, это отдельный сниппет, с логикой дат из Tickets.

Сам Tickets выводит плейсхолдер [[+date_ago]] с такой датой, созданной из createdon. Для других типов дат нужен сниппет.

Если же нужно просто отформатировать дату, то тебе уже ответили.
Василий Наумкин
19 октября 2014, 12:48
0
Так ты в контейнере и вызываешь, и условие проверяешь для isfolder текущего документа.

docs.modx.pro/components/pdotools/general-settings — обрати внимание на картинку с Бартом.
Василий Наумкин
19 октября 2014, 12:47
0
Потрясающе оформленный вопрос.

Держи такой же ответ: "вписывай туда, где хочешь округлить цену"!
Василий Наумкин
19 октября 2014, 12:29
0
Тебе же по русски пишут «Произошла ошибка при попытке отправить почту. Пустое тело сообщения».

Ты или чанк sendEmailTpl создай, или не указывай его вовсе. Без него уже наш хостинг говторит, что mail() отключен — значит, все проверки пройдены.
Василий Наумкин
19 октября 2014, 11:48
0
У меня, почему то, работает.

Создай сайт на h.simpledream.ru и продемонстрируй этот интересный глюк, пожалуйста.
Василий Наумкин
19 октября 2014, 11:44
0
У кого это, «у всех»?
&tplStart работает только для корневых пунктов меню, у остальных должен работать параметр &tpl.

А, вижу, ты дописал в топик про потомков. Тогда да, или проверять плейсхолдер [[+children]], или отключать ссылку на javascript — что быстрее и, по моему, правильнее.
Василий Наумкин
19 октября 2014, 11:36
0
Почему нельзя сделать так?
&tplStart=`@INLINE <li> <span> [[+menutitle]] </span> [[+wrapper]]</li>`