Все записи автора Павел Грибов

JQgrid, странный глюк с jqContextMenu

На днях произошел странный глюк с плагином jqContextMenu, а именно, после нажатия на правую кнопку мыши контекстное меню появлялось, но пропадало после отпускания клавиши. Проявилось только в браузере FireFox и только у меня.  На что уж только не грешил, делал откат кода назад на пару недель, думал сам где какую ошибку внес. Затем сходил на сайт  Причем специально сходил на www.guriddo.net, где собственно размещена демка от «создателей» — опаньки, и там тоже самое. Значит проблема в браузере. Пробовал отключать плагины, чистить кэшь и т.д. — ничего не помогло. Пришлось засучить рукава и лезть в исходный код плагина context-menu.js, и ставить «костыль». А именно, заменил эвент «клик» на эвент «нажатие» (не отпускание) на скрытие «предыдущего» меню. Что за глюк браузера и почему вдруг «сломалось» — пока загадка.

Читать далее JQgrid, странный глюк с jqContextMenu

Делаем «Правильный» бекап жесткого диска в Linux

Традиционно, всегда во всех инструкциях используют команду dd. Да, она работает, но она устарела. В настоящее время образы дисков лучше делать командой ddrescue, которая в отличии от dd, более грамотно работает с диском в случае наличия на оном ошибок чтения.

Применять примерно так:

ddrescue /dev/sdb2 /mnt/backup/bubuntu.img /mnt/backup/bubuntu.img.log

Обратное восстановление:

ddrescue --force /mnt/backup/bubuntu.img /dev/sdb2 /mnt/backup/bubuntu.img.log

Обработка ошибок загрузки данных в операциях Add, Edit, Del в JqGrid

Чтобы отобразить «свою» интерпретацию ошибки на сервере при выполнении операции Add, Del, Edit можно воспользоваться следующим «финтом ушами»: 1) на сервере генерируем ошибку, например 501 которую обрабатывает стандарный обработчик ошибок errorTextFormat:

php:

 header('HTTP/1.1 501 Internal Server Error'); 
                die("Не могу добавить пользователя! " . mysqli_error(Module::$sqln->idsqlconnection));

И код JavaScript на клиенте:

$("#list1").navGrid("#pager1",{
				search: true,
				add: true,
				edit: true,
				del: true,
				refresh: true
				},
				{errorTextFormat: commonError}, //edit options
				{errorTextFormat: commonError}, //add options
				{errorTextFormat: commonError}, //delete options
				{
					multipleSearch: true
					,closeAfterSearch: true
					,closeAfterReset: true									
				}
			);
...
function commonError(data) {
    console.log(data.responseText);
    return data.responseText;
}