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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
25 января 2016, 17:27
0
Можно еще и несколько параметров убрать, ибо pdoUsers сам делает некоторые присоединения.
Василий Наумкин
25 января 2016, 17:19
0
Всё тоже самое можно сделать и через pdoResources и через pdoUsers. Они точно также умеют присоединять таблицы и используют pdoFetch->run().
Василий Наумкин
25 января 2016, 17:14
0
Вообще-то, в pdoTools есть сниппет pdoUsers.
Василий Наумкин
25 января 2016, 16:00
+1
Как минимум, подтяну галерею до более-менее приличного внешнего вида, основываясь на платной версии.

Как максимум, придумаю способ замены встроенной галереи платной версией, со всеми плюшками.
Василий Наумкин
25 января 2016, 13:46
+1
На вскидку могу посоветовать Selectel или Clodo. Первый лучше и дороже, второй дешевле.
Василий Наумкин
24 января 2016, 15:58
+3
Все чанки кэшируются внутри pdoTools и стараются не выполняться через объекты. Там масса всяких оптимизаций.

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

Сейчас заканчиваю один сайт, полностью построенный на Fenom и готовых дополнениях — все страницы открываются за 0.2 — 0.3 сек., может позже напишу заметку с подробностями.
Василий Наумкин
24 января 2016, 12:54
0
наверняка феном + чистый xPDO тоже хороший результат покажет.
Проверил не совсем в чистом виде, а вызовом через сниппет:
<?php
$pdo = $modx->getService('pdoTools');

return $pdo->getChunk($tpl);

При пустом шаблоне документа:
[[!Fenom?&tpl=`@INLINE
	{var $resources = $_modx->getResources([], ['limit' => 4000])}
	{foreach $resources as $resource}
		<p>{$resource.id} - {$resource.menuindex} - {$resource.createdon} - {$resource.publishedon}</p>
	{/foreach}
	<pre>{$_modx->getInfo()}</pre>
`]]

Результат:
queries: 13
totalTime: 0.3718 s
queryTime: 0.0532 s
phpTime: 0.3186 s
source: database
Василий Наумкин
24 января 2016, 08:15
0
Так как msProducts не позволяет присоединить к выборке 2-ое изображение товара
Позволяет.

Нужно только прописать дополнительный leftJoin.
Василий Наумкин
23 января 2016, 11:01
+1
Markdown известен как раз тем, что не требует редактора.

Его можно писать спокойно как обычный текст, а на сайте выводить через сниппет Markdown.
Василий Наумкин
23 января 2016, 10:55
2
+1
Отвечает «отец-основатель», который отказывается обучать javascript всех желающих в техподдержке дополнения.

Я действительно не понимаю, в чём может быть проблема вывести какие-то значения в чанке, а потом скопировать их через javascript.
Если это получается сделать с title и alt, что мешает это сделать с другими элементами? Очевидно, вы просто не знаете, как работать с jQuery.

В моём коде title и alt — это атрибуты тега img, поэтому и обращение к ним идёт через image[0].title и image[0].alt. Если рядом с картинкой будет элемент с классом, например, desc, то получить его можно так:
var image = $(this).find('img'); // здесь ищем картинку - это из оригинального кода

var desc = $(this).find('.desc'); // а рядом можно поискать элемент с классом desc
// После этого содержимое элемента desc можно вставить куда угодно. Например, в элемент .mainImageDesc 
var imageDesc = gallery.find('.mainImageDesc');
imageDesc.text(desc.text());
Это весь нужный javascript код. 80 lvl не требуется даже близко.

Чтобы всё работало, нужно не забыть вывести описание на страницу:
<div class="span2 col-md-2">
	<a href="[[+360x270:default=`[[+url]]`]]" class="thumbnail" data-image="[[+url]]">
		<img src="[[+120x90]]" alt="[[+alt]]" title="[[+name]]" width="120" height="90">
		<div class="desc" style="display:none;">[[+description]]</div>
	</a>
</div>
Я вывожу его в скрытом виде, чтобы не мешало.

А еще нужно предусмотреть блок для вывода текста в главной картинке
<div class="ms2Gallery">
	<a rel="fancybox" href="[[+url:default=`/assets/ms2gallery/minishop2/img/web/ms2_big.png`]]" target="_blank">
		<img src="[[+360x270:default=`/assets/components/ms2gallery/img/web/ms2_medium.png`]]" width="360" height="270" alt="[[+alt]]" title="[[+name]]" class="mainImage" />
	</a>
	<div class="mainImageDesc">[[+description]]</div>
	<div class="row">
		[[+rows]]
	</div>
</div>

Как видно, речь исключительно о работе с javascript, никаких особенностей, связанных с ms2Gallery, здесь нет.
Василий Наумкин
22 января 2016, 17:19
+1
Автор его давно забросил, так что с новыми версиями он не работает.

Я им давно не пользуюсь.
Василий Наумкин
22 января 2016, 16:58
0
Да, это нормальная скорость, обсуждалось много раз.

Админка гораздо более сложная и функциональная, поэтому и грузит больше всего. Но:
1. Сохранение работает по Ctrl+S
2. При сохранении документа страница не перезагружается.
3. Есть быстрое редактирование — во всплывающих окошках
4. Есть прямые ссылки на разделы меню и их можно открывать в отдельных окнах
5. Сниппеты и файлы можно перетаскивать на поля документов — будут окошки с выбором параметров и скопированные пути.
6. Асинхронная загрузка меню, комбобоксов и еще много всего.
7. Масса готовых дополнения, в том числе и для улучшения работы. Collections, AdminTools, modDevTools и т.п.

В общем, работа в админке Revolution радикально отличается от Evolution.

Лично у меня есть один старый сайт Evo и админка там просто ужасно бесит. Вроде всё быстро, а кликать нужно в 2 раза больше.
Например, нормально редактировать скрипты и стили невозможно из-за постоянной перезагрузки страницы и поиска места в файле для продолжения.
Василий Наумкин
21 января 2016, 16:38
0
И каким образом кто-то мог бы догадаться тебе это посоветовать?
Василий Наумкин
21 января 2016, 16:36
0
Регистрация своего контроллера проводится добавлением пути к нему в новом системном параметре office_controllers_paths.

Для упрощения этой работы лучше всего использовать методы Office::addExtenstion() и Office::removeExtension() — принцип такой же, как и при регистрации моделей компонентов в MODX. Вот, посмотрите на ресолвер modExtra.
Василий Наумкин
21 января 2016, 09:34
0
$("#cleanmincart").click(function(){
	$.post(document.location, {ms2_action: 'cart/clean'}, function() {
		document.location.reload();
	});
});
Это перезагрузит страницу сразу после выполнения запроса.
Василий Наумкин
21 января 2016, 09:09
3
0
На старой версии у меня работает, а в новой, похоже, что-то поменялось. Бронебойный вариант:
$("#cleanmincart").click(function(){
	$.post(document.location, {ms2_action: 'cart/clean'});
});
Василий Наумкин
21 января 2016, 08:44
0
Если это кнопка, и она внутри формы (как у тебя в вопросе), то при нажатии она эту форму отправит и страница перезагрузится.

Нужно форму убрать, добавить кнопке id=«cleanmincart» и тогда твой javasscript уже должен заработать.
Василий Наумкин
20 января 2016, 21:57
0
Мне действительно нужно рассказывать, как вызывать javascript функцию при нажатии на кнопку?
Василий Наумкин
20 января 2016, 21:56
0
Это зависит от сети.

Facebook и Google, например, разрешают указывать несколько адресов oauth_callback для одного ключа, а Яндекс — нет. Twitter вообще этот параметр не использует по умолчанию, ему пофиг куда отправлять авторизованного юзера.