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

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

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
30 января 2016, 12:21
0
Если у вас есть доступ к ftp, вы можете создать произвольный файл и инициализировать в нем функции MODX'a:
<?php
	define('MODX_API_MODE', true);

	require '/путь_до_index.php';
	
	// Запускает нужные службы MODX
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
	
	//...
А дальше запустить любым удобным для вас способом процедуру восстановления пароля — начиная от вызова процессоров модкса и заканчивая подключением сниппета Login/Office.

На мой взгляд, гораздо большие проблемы сулят причины, из-за которых не получилось восстановить пароль предыдущими способами — возможно последний программист сильно постарался, чтобы модкс не работал так, как нужно.
27 января 2016, 11:17
0
Ошибка 500 = ошибка на стороне сервера -> смотреть нужно именно логи сервера.
27 января 2016, 10:10
0
Нет, но можно легко реализовать при помощи:
— плагина на событие оформления заказа (msOnBeforeCreateOrder)
или
— при помощи дефолтных модкс-модификаторов от цены [[!+price]] (спрятать кнопку отправки и вывести алерт о минимальной цене)
и/или
— при помощи jquery на событие submit формы (вывести уведомление, к примеру встроенным jgrowl-скриптом).
25 января 2016, 13:05
+1
Перестала работать = форма отправляется, но письма не доходят?

— попробуйте отправить письмо при помощи QuickEmail. Если письмо отправится — проблема с Formlt/AjaxForm.
— если письма не отправляются из-за хостера, вы можете настроить smtp

Если форма в принципе не отправляется, то вы, скорее всего, вашими «декоративными» правками удалили id или class по которому AjaxForm отправлял данные или возвращал ответ.
24 января 2016, 13:13
0
У сниппета msGallery — нет, зато есть у msProducts.
В него можно подгрузить первую миниатюру, воспользовавшись персональным параметром &includeThumbs, а можно заджоинить изображение по аналогии с ms2gallery (загружаете модель в loadModels, прописываете нужные джоины (только заместо modResource — msProduct) и цепляете их в Select, указывая желаемые плейсхолдеры).
24 января 2016, 06:53
+1
Запускать msGallery внутри каждого чанка выборки msProducts = куча лишних запросов к бд.

Гораздо выгоднее было бы заджоинить желаемую таблицу изображений, а внутри чанка уже дописать условие, что если превью №2 пустое — выводить первое.
23 января 2016, 16:40
+1
1. Нужно реализовать систему внутреннего счета пользователя и сделать возможность впоследствии с него оплатить заказ. Подобное уже реализовано, но на платной основе.

2. На этапе оформления заказа покупатель вводит промо-код друга в соответствующее поле (которое нужно добавить).

3. Создаем плагин на событие msOnCreateOrder, который проверяет введен ли промо-код, есть ли он в базе действующих кодов и тд и тп. Если все ок — то пополняете счет обоим пользователям (в случае с msProfile есть специальный сниппет).

Из нюансов — нужно учитывать, что при оформлении заказа пользователь может быть как уже авторизован, так и только зарегистрироваться после оформления заказа, но это уже лирика..)
23 января 2016, 16:18
0
Могу примерно показать как сделать на Jquery:
— в вызове сниппета msGallery заполняем параметры &tplOuter, &tplRow и &tplSingle. В сингле все по дефолту, в tplOuter примерно с такой конструкцией:
<div id="itemGallery">
	<a rel="group-[[*id]]" class="fancybox" href="[[+url]]" target="_blank">
		<img src="" class="mainImage" />
	</a>
	<div class="row">
		[[+rows]]
	</div>
</div>

и &tplRow (для примера оставим дефолтный):
<div class="span2 col-md-2">
	<a href="[[+360x270:default=`[[+url]]`]]" class="thumbnail" data-image="[[+url]]">
		<img src="[[+70x70]]" alt="" title="[[+name]]" width="70" height="70">
	</a>
</div>

Теперь, при помощи jquery реализуем оставшиеся действия:
$(document).ready(function(){
	//Если всего изображений у товара больше 1, тогда работаем
	if ($("#itemGallery > .row > div").length > 1) {
		//Отсчет идет с 0, так что второй элемент = 1
		var newMainImage = $("#itemGallery > .row > div:eq(1) > a").attr("data-image");
		var newMainPreview = $("#itemGallery > .row > div:eq(1) > a").attr("href");
		
		//вставляем новыы данные в "основную" ячейку
		$("#itemGallery > a").attr("href", newMainImage);
		$("#itemGallery > a > img").attr("src", newMainPreview);

	
	}
});
23 января 2016, 15:51
+2
(пожал плечами) не знаю, но реализовать аякс-запрос при минимальных знаниях jquery и php не составит труда, благо гайдов хватает.

Последовательность примерно такая:
— в чанке для вызове списка товаров добавляем кнопку «предпросмотр товара» с уникальным классом (допустим, ajax-minishop-item) и любым параметром, содержащим id-товара (data-id).
— при помощи jquery вешаем на событие клика ссылки с классом ajax-minishop-item отправку данных аяксом на эту же страницу, которая передает id-товара
— пишем сниппет по гайду выше и вызываем его на этой странице. В сниппете, при получении нужного аякс-запроса, ищем среди ресурсов подходящий по Id товар. Если находим — возвращаем результат.
— если результат есть, jquery возвращает его в желаемую область (допустим, в popup окно, которое там же и вызывается).
+ навешиваем всевозможные алерты на события, если ресурс не найден и другие «альтернативные» варианты ответов.
23 января 2016, 13:47
0
Если используете msGallery, то можете указать отступ изображений при помощи &offset.

Или можете воспользоваться параметром &toSeparatePlaceholders и с помощью дефолтных модификаторов модкса в чанке-обертке расписать желаемую логику.

Или в чанке-обертке можете не указывать путь до основной картинки, а уже при помощи jquery смотреть количество загруженных изображений в DOM'e и вставлять желаемую картинку в область «основной».
23 января 2016, 13:40
0
Вы имеете ввиду что-то вроде этого?
23 января 2016, 04:18
0
Здорово все-таки услышать новые мысли о MODX и его развитии в целом, так сказать «в живую»..) Большое спасибо за проделанную работу!

Особенно интересно было услышать концепцию и цели в развитии и расширении влияния MODX'a. На фоне этого возникла мысль (которая наверняка приходила далеко не только мне):

Думаю, 95% разработчиков не один раз сталкивались с вопросами клиента из рубрики «зачем мне MODX?».
В ход начинают идти убеждения в том, что MODX в состоянии реализовать любую хотелку и технические разъяснения преимуществ, которые клиент воспринимает в пол уха, и в итоге все сводится к забрасывания клиента перечнем сайтов на MODX'e, где уже реализованы все его требования. (которых может и не быть, если программист недавно перешел на modx, у заказчика довольно экзотические требования ну или любая другая причина, не суть)

В связи с этим, может, стоит реализовать подобный функционал на modx.pro? Конечно, не секрет, что сайтов «сообщества MODX» далеко не так мало (и их число продолжает расти) и у нас уже есть примеры (1, 2) реализации такого функционала, но, на мой взгляд, они получились не слишком презентабельными, да и приходится метаться между разными сайтами, а мы, все-таки, аудитория modx.pro.

И даже c учетом того, что у тех же 95% есть свои сайты/страницы со списком портфолио, было бы просто интересно посмотреть на то, что реализуют другие разработчики.

Остается только вопрос «технической безопасности» для сайта, где не слишком приветствуется рассекречивания системы управления, но, думаю, что это не критичный фактор.
22 января 2016, 13:18
0
— создаете группу пользователей (managers) с желаемыми правами /?a=security/permission

— задаете пользователю/группе пользователей настройку tree_root_id
(пользователи/группы пользователей -> редактировать -> закладка «Настройка»)

ИЛИ

— создаете контекст и назначаете менеджеру определенные права доступа для данного контекста, после чего назначаете контексту перечень доступных для менеджера ресурсов /?a=context

ИЛИ

— создаете группу ресурсов (запрещено для менеджера) и отключаете менеджера от не желаемых ресурсов /?a=security/resourcegroup

ИЛИ

— пишите плагин, срабатывающий в контексте mgr на событие OnManagerPageBeforeRender, который при создании/изменении ресурса будет выдавать алерт или редиректить при попытке не желаемого проникновения



И далее кастомизируете оформление, пряча не желаемые к просмотру/редактирования поля через настройку форм ?a=security/forms
13 января 2016, 23:27
0
Странно, у меня корректно обрезается конструкция.
[[+text:striptags:ellipsis=`50`]]

Возможно, у вас указан &fastMode=`1`, в результате чего фильтры просто не применяются?
12 января 2016, 03:00
+2
Как вариант, чтобы в случае изменений не носиться по всем шаблонам и не изменять/добавлять условия, вы можете по аналогии с cultureKey добавлять для каждого контекста нужный параметр и выводить просто его.

Например:
web (опции контекста)
— news_container = 1
— gallery_container = 7
— …
system
— news_container = 28
— gallery_container = 47
— …

И в вызове сниппета просто вызывать соответствующий ключ:
&parents=`[[++news_container]]`
06 января 2016, 19:34
+1
Как вариант, могу предложить такое решение:

Услуга = раздел (коллекция)
Улица = ресурс (вложенное)
Дом = запись в списке MGIX / своем компоненте для списка. Если нужно также генерировать ссылку/отображать информацию по конкретному дому, то дописать кастомную маршрутизацию.
04 января 2016, 17:17
1
+1
Написать свой сниппет, который будет записывать данные в сессию и исходя из этого формировать результат для сниппета. Допустим:

В чанке (баннера) вызываем сниппет, который будет записывать в сессию idx баннера:
[[!getBannerPosition? &mode=`write` &idx=`[[+idx]]`]]
<?php
	if ($mode == 'write') {
		$_SESSION['lastviewed'] = $idx;
	}
	else {
		$offset = $_SESSION['lastviewed'];
		if (empty($offset)) {
			return '0';
		}
		else {
			return $offset;
		}
	}

А в вызове BannerY допишем параметр &offset=`[[!getBannerPosition]]`, чтобы отображать еще не просмотренный баннер.

Можно также расширить сниппет, чтобы при $_SESSION['lastviewed'] == [[+banner.total]] — сбрасывать значение сессии, но, думаю, с этим уже проблем не возникнет.
31 декабря 2015, 20:36
0
Не могу точно сказать, о чем идет речь в приведенной вами цитате из лога обновлений, но, скорее всего — о поддержке таба «комментарии», применительно к товарам минишопа.

Суть в том, что ресурс (страница) может быть определенного класса, в зависимости от которого выполняется последующая логика. И тут он может быть или тикетом, или разделом, или товаром — но никак не несколькими сразу.

Рейтинги к товару можно подцепить через дополнение VoteForms, комментарии — через стандартный функционал тикетсов. Короче говоря, сразу из коробки — не получится.
31 декабря 2015, 20:14
0
Может быть, лучше воспользоваться ms2form, если нужно решение из коробки?
31 декабря 2015, 12:52
1
+6
Всех с наступающим!

Надеюсь, 2016 год принесет нам и MODX 3. =)