Всего 123 784 комментария

Василий Наумкин
28 декабря 2012, 17:23
0
Пароль нельзя обратно расхэшировать, можно только задать новый.

Сам принцип хэша — работа в одну сторону.
Василий Наумкин
28 декабря 2012, 17:21
0
Сервисы Oath2 требуют точного url возврата:
http://example.com/assets/components/hybridauth/action.php?hauth.done=Google

http://example.com/assets/components/hybridauth/action.php?hauth.done=Yandex
Со вчерашнего дня есть инструкции в картинках на rtfm.
Артем
28 декабря 2012, 17:03
0
Стоит написать вопрос, в голове сразу проясняется. )) Я ведь совсем забыл про второе письмо, менеджеру. Там сниппет выполнялся второй раз и пароль опять сбрасывается. Надо было сразу поставить ограничение на один сброс пароля, а не мучить несколько дней этот save.
Мордынский Николай
28 декабря 2012, 16:03
0
А как вы шел скрипт под виндой пытались запустить ?)
Виталий Киреев
28 декабря 2012, 13:59
0
Конкретно такой запрос сработает на любой SQL-БД.
updateCollection не такого. Ну можно получить все узлы в итератор и прогнать по всем, но это O(n) запросов к базе
$nodes  = $modx->getIterator($this->classKey, 
	array('rubr_parent' => $parent, 'rubr_order:>' => $order));
foreach ($nodes as $node) {
     $node->set('rubr_order', $node->rubr_order - 1);
     $node->save();
}
Kirill A. Rusanov
28 декабря 2012, 13:39
0
Согласен, знаю. Но он зависим от используемого типа БД (mysql), ведь так?
Да и просто хочется понять, как реализуются такие очевидные с точки зрения sql запросы в modX. Неужели передается массив уже пересчитанных значений?
Виталий Киреев
28 декабря 2012, 13:34
0
По производительности ваш вариант лучше будет, чем делать «по уму».
Kirill A. Rusanov
28 декабря 2012, 11:06
0
Извините, первый раз, про «кат» поздно заметил…
Yan Alex
28 декабря 2012, 09:49
0
Ясно, я так делал, только пока язык учил, сейчас желания лезть в чужой код отпало на совсем — это очень много времени съедает, поэтому стараюсь использовать продукты которые не требуют чтобы кроме их непосредственных вохможностей была необходимость перелопачивать код, считаю такие продукты на уровне нашего автопрома, купил и ковыряйся )))
Василий Наумкин
28 декабря 2012, 09:38
0
Должно работать.

Попробуйте там
echo $newPassword;
die;
И ввести его самостоятельно в форму логина. Ну и проверить в БД, меняется ли вообще хэш пароля у юзера?
Yulia Udacheva
28 декабря 2012, 00:54
0
А у меня не получилось запустить chmod +x ./rename_it.sh под виндоус. Нигде нет установочного пакета от него? Doodles есть, с ним все понятно, но хотелось бы понять как переименовывать компанент, чтобы таблицы назывались уже по другому.
Andrey Grachov
28 декабря 2012, 00:38
0
Лучший источник информации — исходный код :) Сам просто сталкивался с такой ситуацией и пришлось покопаться, чтобы дойти до истины.
Yan Alex
27 декабря 2012, 16:32
0
А так же интересно узнать откуда инфа по столь завуалированным нюансам? Почитать думаю не вредно будет.
Yan Alex
27 декабря 2012, 16:31
0
Спасибо так же и от меня, чувствую сэкономили вы мне часов эдак n*999
Василий Наумкин
27 декабря 2012, 16:26
0
Ну да, точно =)

Спасибо за новый способ работы с ТВ.
Andrey Grachov
27 декабря 2012, 16:24
0
Сохранить новое значение стандартным способом:
$modx->resource->setTVValue(.., ...);
тот код просто использовать вдобавок, чтобы обновить значение у текущего ресурса modx, на время обращения к нему.
Пётр Молчанов
27 декабря 2012, 16:17
0
тоже сталкивался с проблемой холдеров. у мя для поисковиков выдавала 500 ошибку вот такая конструкция
[[+modx.user.id:memberof=`Administrator`:then=`<a href="#" class="hb_del" id="hbid_[[+id]]_[[+album]]">удалить</a>`]]
хотя страница отображалась и у одминов ссылка удаления появлялась
Виталий Воропаев
27 декабря 2012, 16:10
1
0
Делал не давно.
Получился след. плагин:

Условия:
1) Наличие jQuery

Принцип работы:

  • Копирует ссылку из атрибута href
  • Генерирует из полученной ссылки iframe
  • Вставляет iframe в конец DOM
  • Инициирует печать

Плагин имеет ряд настроек и 2 callback функции. Сопровождается информером, который срабатывает перед печатью. Плагин нуждается в доработке, но увы нет времени.

Код плагина:

/*
 *   Name: SetPrint 0.5
 *   Dev: Voropaev Vitaliy
 */

;(function(g) {

var Print = function(options) {
	
	this._Defaults = {
		attr : "href"
		, url : false
		, message: {
			wait: "Подождите пожалуйста, идет подготовка к печати ..."
			, done: "Готово к печати"
		}
		, container_if : "b-iframe-print"
		, container_bl: "b-print-box"
		, delay: 700
		
	};
	
	options = g.extend({}, this._Defaults, options ? options : {}); 
	
	this._Elem = options.elem;
	this._Param = options;
	this._Url = false;
	this._Container = {};
	
	this.init();

}

Print.prototype = {
	
	init: function() {
		
		var th = this;
		
		this._Elem.bind("click", function(e) {
			th.load_print_document(th, e);
		});
		
	}
	, load_print_document: function(th, e) {
		
		e.preventDefault();
		
		if( typeof this._Param.beforeInit === "function" ) this._Param.beforeInit( this );
		
		g("body").append( this.message_box(this) );
		
		this._Container.block = g("#" + this._Param.container_bl)

		this._Container.block.css("opacity", 0);
		this._Container.block.animate({opacity:1}, this._Param.delay, function() {
			th.add_iframe_to_page(th);
		});
	}
	, add_iframe_to_page: function(th) {

		this._Url = this._Param.url ? this._Param.url : this._Elem.attr( this._Param.attr );
		
		if( typeof (this._Container.iframe) === "undefined" ) {
			
			g("body").append( this.iframe(th) );
			
			this._Container.iframe = g("#" + this._Param.container_if);
		
			this._Container.iframe.bind("load", function() {
				setTimeout(function() {
					th.printit(th);
				}, 2000)
				
			});
			
		} else {
			this._Container.iframe.attr("src", this._Url);
		}
	}
	, printit: function(th) {
		
		this._Container.iframe.text( this._Param.message.done );
		
		frames[ this._Param.container_if ].focus();
		frames[ this._Param.container_if ].print();
		
		this.message_box_unload();
		
	}
	, iframe: function(th) {
		
		return '<iframe id="' + th._Param.container_if + '" name="' + th._Param.container_if + '" src=' + th._Url + ' style="position:absolute;top:0px;left:0px;width:0px;height:0px;border:0px;overflow:none;z-index:-1"></iframe>';
	}
	, message_box: function(th) {
		
		return "<div id=" + th._Param.container_bl + " style='position:fixed;top:50%;left:50%;z-index:9999;opacity:0;'><span>\
		" + th._Param.message.wait + "</span></div>";
	
	}
	, iframe_unload: function() {
		this._Container.iframe.remove();
	}
	, message_box_unload: function () {
		
		this._Container.block.animate({opacity: 0}, this._Param.delay, function() {
			g(this).remove();
		});
                
                if( typeof this._Param.afterInit === "function" ) this._Param.afterInit( this );
		
	}
	, print_block_constructor: {
		
		add: function(th, callback) {
			
			var chr = {};
			    chr.w = th._Elem.parent().outerWidth(),
			    chr.h = th._Elem.parent().outerHeight();
			
			th._Elem.parent().css("position", "relative");
			th._Elem.addClass("block");
			th._Elem.after('<div style="position: absolute; top: 0px; left: 0px; height: 100%; width: 100%; z-index: 100"></div>');
			
			if( typeof callback === "function" ) callback();
			
		}
		, remove: function(th) {
			
			th._Elem.removeClass("block");
			th._Elem.next().remove();
		}
	}
}

})(jQuery);


Пример инициализации:

1) Html:

<a href="Страница для печати (ресурс в Modx)" class="print"></a>

2) JavaScript:

$(function() {
    
    p = new Print({
        elem: $(".print") 
        , beforeInit: function() {
            // Вызов callback функции, срабатывает перед генерацией DOM
        }
        , afterInit: function() {
            // Вызов callback функции, срабатывает после закрытия окна печати
        }
    });
    
});
3) Css:

(вырезано оформление)

<style type="text/css">
 #b-print-box{margin-top: -50px; margin-left: -150px; width: 300px; height: 100px; text-align: center; }
 #b-print-box span{font-size: 100%}
</style>
Yan Alex
27 декабря 2012, 15:52
0
После

$modx->resource->set('nodeShop_orderState', null);
$modx->resource->set('nodeShop_orderData', null);
Тв сразу же актуальны.
Yan Alex
27 декабря 2012, 15:51
0
В моем случае помогло вот такое ваше решение.

$modx->resource->set('nodeShop_orderState', null);
		$modx->resource->set('nodeShop_orderData', null);

		$result = array(
			$this -> resource -> setTVValue('nodeShop_orderState', json_encode($orderState)),
			$this -> resource -> setTVValue('nodeShop_orderData', json_encode($orderData))
		);

		if(array_sum($result) != 2) return;