Всего 123 756 комментариев

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;
Yan Alex
27 декабря 2012, 15:42
0
Блин, да это мой косяк, извиняюсь, глаз замылился, действительно это атрибут на время выполнения скрипта. Видимо Боб до сих пор мучается =)
Василий Наумкин
27 декабря 2012, 15:36
0
Да. Приходить должно в любом случае, хотя бы с одной темой, без тела письма.

Если не приходит вообще — разбирайтесь с почтой, может спаморезка не пускает, или еще что.
Василий Наумкин
27 декабря 2012, 15:34
0
Тогда, я бы попробовал плагином на OnWebPageInit или OnLoadWebDocument менять шаблон ресурса при его загрузке.

Реагировать можно на параметр в $_GET;
Василий Наумкин
27 декабря 2012, 15:31
0
Ну — щас через админку смотрел, не сохраняется.

Хотя, уже ничему не удивлюсь =)
Василий Наумкин
27 декабря 2012, 15:29
0
А как сохранить новое значение в ТВ?

$modx->resource->save() не помогает, конечно. А если значение нужно только на время работы скрипта, и сохранять его не надо — то и ТВ ни к чему, можно любое имя написать.
Yan Alex
27 декабря 2012, 15:26
0
Странно я проверял, потому что тоже думал что будет во время выполнения скрипта, и у меня писалось, то есть сперва я выставлял через сет а потом брал через гет закомментировав сет и у меня все показывалось как будто значение сохранилось.
Василий Наумкин
27 декабря 2012, 15:23
0
У меня оно и не сохраняется.

Это поле будет работать только во время выполнения скрипта. То есть, методом set мы выставляем любое поле с любым значением, потом можем его использовать как хотим, а после работы оно пропадает — ибо сохранить его некуда, в модели то его нет.

Если же ничего туда не писать, а просто print_r($modx->resource->get('test')); — то будут данные ТВ параметра.

Всё это очень интересно, но мне надо работать, так что не буду копать «почему всё именно так, а не иначе». Вообще, стараюсь не использовать ТВ, если это возможно.
Andrey Grachov
27 декабря 2012, 15:16
0
Чуть выше привел более эстетичное решение. Какое бы оно некрасивое не было, без него страница не увидит новое значения tv-параметра, если оно будет изменено, к примеру, сниппетом :)