[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование данных на странице
sergeiss
С разделом долго мучался, решил остановиться на JS smile.gif Хотя на самом деле тут и JS+AJAX есть, и ПХП имеется... Правда, кода нету, только словесные соображения.

Сразу предупреждаю только: упёртые фанаты jquery проходят мимо! smile.gif Эта тема для тех, кто хочет сам думать и понимать то, что он делает.

Вобщем, задача простая и ясная. Надо сделать, по сути дела, веб-приложение. То есть, имеется много-много данных, которые выводятся на разных страничках. И все эти данные надо иметь возможность редактировать. Причем, данные сидят в БД, поэтому их надо сначала загрузить из БД, а потом измененные сохранить в БД. Либо - сделать откат к преждним значениям.

Я попробовал 2 варианта, довел каждый до логического конца.

Вариант 1. При нажатии кнопки "редактировать" вызывается отдельная форма ввода. Под ней кладётся подложка, запрещающая работать с чем-либо на странице, пока не выйдем из редактирования (по сути, модальное окно). Для работы потребуется много форм, т.к. данные разноплановые: есть однострочные данные, есть таблички (данные в которых из одной таблицы БД), есть такие данные, которые сидят в одной форме, но находятся в разных таблицах в БД и там есть как простые поля, так и выпадающие списки.
Тут еще есть что доработать - например, сами формы ввода также грузить через аякс. Сейчас они сидят в скрытом виде в самой странице, т.е. грузятся всегда сразу.

Вариант 2. Редактирование осуществляется прямо на странице. Для этого снимаем установленные ранее ограничения на редактирование полей, делаем "подложку", которая позволяет работать только с выбранной формой, создаем динамически дополнительные кнопки. И выделяем форму ввода, сделанную внутри ДИВа. Получаем также модальное окно, одновременно являющееся частью общей страницы, т.е. эту часть было видно и до начала редактирования, тут просто показывались существующие данные.

В обоих случаях активно используется аякс, все данные качаются туда-сюда только через него. В обоих случаях всё работает... Но второй вариант оказался сложнее и запутаннее, чем мне казалось изначально smile.gif Хотя, возможно, это именно в моей реализации так получилось.

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

Вопрос вот какой (тем, кто понял, о чем вообще идет речь wink.gif): те, кто реализовывал подобную хрень - как делали? Может быть, есть какой-то третий вариант? Надо только учесть (еще раз подчеркну), что форм ввода много всяких-разных, что-то единообразное (единую форму) не получится сделать.

Принимаются также грамотно обоснованные соображения, при отсутствии опыта smile.gif



Спустя 3 минуты, 42 секунды (31.01.2011 - 18:23) Snus написал(а):
Цитата (sergeiss @ 31.01.2011 - 15:19)
Сразу предупреждаю только: упёртые фанаты jquery проходят мимо! smile.gif Эта тема для тех, кто хочет сам думать и понимать то, что он делает.

Интересное суждение. Почему такая "любовь" к jQuery?

Спустя 4 минуты, 58 секунд (31.01.2011 - 18:28) sergeiss написал(а):
Цитата (Snus @ 31.01.2011 - 19:23)
Интересное суждение. Почему такая "любовь" к jQuery?

Потому что я многократно наблюдал тут на сайте людей, которые мало того, что ПХП изучают, так они не знаю JS, что-то пытаются сделать на jquery (по сути дела, еще один язык!), не понимая основ JS... И от них часто звучит фраза "на jquery это делается легко!" smile.gif (хотя сами чаще всего не знают, как именно это "легко" делается, только слышали, что возможно).
Вопрос: нафига мне изучать какой-то язык, являющийся производным от JS?

И тебе вопрос: а по сути моего вопроса есть что сказать? Тут проблема касается не какого-то языка, а больше алгоритмов работы, какого-то личного опыта.

PS. Насчет jquery smile.gif - в офисах, где нету охраны на входе, часто вешают на дверях что-то подобное такой таблички "Распространителей всякой хрени просьба не беспокоить!" smile.gif

Спустя 8 минут, 14 секунд (31.01.2011 - 18:36) Snus написал(а):
sergeiss
Ну как вариант - комбинация клавиш (ctrl + left mouse к примеру), передаешь через аякс id (+табл. в БД если на разных таблицах), загружаешь страницу с переданными данными и проверяешь если переданный id = полученный из БД , то выводим форму для редактирования. Сохранять с тем же алгоритмом, только еще new value передаешь. Это как вариант (PS: если я тебя правильно понял)

Спустя 3 минуты, 51 секунда (31.01.2011 - 18:40) sergeiss написал(а):
Snus - у меня вопрос более глобальный... То, что ты написал, можно реализовать по любому из моих 2-х вариантов. Так что твой ответ принят, но не засчитан smile.gif

Спустя 1 минута, 45 секунд (31.01.2011 - 18:41) Snus написал(а):
sergeiss
Ну так если ты знаешь ответ на свой вопрос, в чем проблема-то? smile.gif

Спустя 5 минут, 54 секунды (31.01.2011 - 18:47) sergeiss написал(а):
Snus - у меня есть 2 варианта (а не ответа). У каждого из них есть плюсы и минусы. И я хочу услышать, что, может быть, есть еще какие-то варианты?

Либо кто-то реализовывал то, что я сделал, и что-то полезное подскажет?

Спустя 5 минут, 42 секунды (31.01.2011 - 18:53) Snus написал(а):
sergeiss
У меня почти все редактирования реализованы на модальных окнах.

Спустя 4 минуты, 17 секунд (31.01.2011 - 18:57) sergeiss написал(а):
Цитата (Snus @ 31.01.2011 - 19:53)
У меня почти все редактирования реализованы на модальных окнах.

Если ты внимательно прочитаешь, что я в начале написал, то в обоих случаях у меня модальные окна используются... Только по-разному алгоритму. Ты вообще читал или увидел про jquery и решил высказаться?

Спустя 10 минут, 14 секунд (31.01.2011 - 19:07) Snus написал(а):
sergeiss
Ну ты интересный, конечно. Ты сам написал, что у тебя имеются два варианта, которые ты уже используешь - это Раз.
И что
Код выкладывать не хочу, т.к. его там слишком много всякого-разного, чтобы в нем просто так копаться.

Как ты хочешь, чтоб тебе подсказали? Я лично не обладаю экстрасенсорными способностями.

Спустя 25 минут, 48 секунд (31.01.2011 - 19:33) ApuktaChehov написал(а):
Не сильно понимаю, зачем сначала грузить формы с данными, а потом при редактирование, опять чего-то грузить.
Как бы я это сделал:
предположим все мои данные грузятся в виде таблицы, где каждая отдельная запись - строка. Можно где-нибудь сделать кнопку(типа "редактировать"). После, при выделении этой строки жмем кнопку! И тут волшебство. Узнаем порядковый номер строки таблицы(tr), проходим циклом по всем ячейкам(td) и динамически меняем их содержимое. Меняем на... ну скажем, что данные у нас были внутри ячеек в дивах, а мы получаем текст каждой ячейки, удаляем этот div и вставляем input или textarea, после чего помещаем туда данные.

В итоге по нажатию на кнопки, строка просто с данными, превращается... превращается строка.... строка превращается laugh.gif в набор input-ов или textarea-й.

Вот так...

Ах да. По поводу Jquery. Я сам по себе против каких-либо фреймворков. Я считаю, что сначала нужно стать НАСТОЯЩИМ программистов(в определенном языке) и только потом юзать фреймворки для ускорения работы.

Жалкое зрелище, когда приходит очередной "программист", который в JS ни бум бум, но он уже юзает JQuery. Это как... домохозяйка. Запомнила, что каждая кнопка на микроволновке делает, а что внутри даже отдаленного представления не имеет.

Спустя 5 минут, 46 секунд (31.01.2011 - 19:39) waldicom написал(а):
Цитата (ApuktaChehov @ 31.01.2011 - 17:33)
Как бы я это сделал:

Тут есть три возражения, вот два из них:
1. порядковый номер строки, это не то. Таблица может сортироваться
2. динамически менять... Представляешь, как будет выглядеть это все на экране?

Спустя 2 минуты, 36 секунд (31.01.2011 - 19:42) ApuktaChehov написал(а):
Да как бы она не сортировалась. Какую ячейку выбрать, такая и отредактируется. Хоть сто раз сортируй. Я имею в веду порядковый номер в DOM.

Не вижу ничего плохого в том как это может выглядеть. Если нужна красота, то можно фончик серенкий подложить, плавное появление и исчезание.

Весь финт этой штуки в том, что она, относительно, универсальна. Какая не была бы таблица.

Спустя 3 минуты, 1 секунда (31.01.2011 - 19:45) waldicom написал(а):
Цитата (ApuktaChehov @ 31.01.2011 - 17:42)
Весь финт этой штуки в том, что она, относительно, универсальна. Какая не была бы таблица.

Да? Круто! А как записывать данные?
Цитата (ApuktaChehov @ 31.01.2011 - 17:42)
Не вижу ничего плохого в том как это может выглядеть.

А клиенты видят.

Спустя 14 минут, 12 секунд (31.01.2011 - 19:59) ApuktaChehov написал(а):
А данные записывать очень просто. После нажатия кнопочки "сохранить", так же циклом обходим наше дерево элементов, формируем XML, или JSON, или просто POST данные и отправляем на сервер.

Хорошо, можно создать проекцию этой строки в каком-нибудь диве. Которые красиво открыть. И вообще, какая разница где это будет находится и как отображаться. Мы же тут алгоритм обсуждаем или красивости?

Спустя 19 минут, 26 секунд (31.01.2011 - 20:18) waldicom написал(а):
Цитата (ApuktaChehov @ 31.01.2011 - 17:59)
Мы же тут алгоритм обсуждаем или красивости?

не вопрос, обсуждайте

Спустя 1 минута, 23 секунды (31.01.2011 - 20:20) ApuktaChehov написал(а):
waldicom - такое впечатление что я вас обидел. Но не пойму чем.

Спустя 42 минуты, 58 секунд (31.01.2011 - 21:03) sergeiss написал(а):
Вобщем-то, про алгоритм речь и идет, всё верно. А я читаю, сравниваю с тем, как у меня сделано, анализирую... Хотелось бы еще мнений услышать.

Даёшь много мнений, хороших и разных! smile.gif

Цитата (Snus @ 31.01.2011 - 20:07)
Как ты хочешь, чтоб тебе подсказали? Я лично не обладаю экстрасенсорными способностями.

Честно говоря, тут сам по себе код не принципиален. Потому что даже если я его и выложу, то всё равно никто не будет в нем копаться. Да и не в том дело, код-то работает (хоть он и "выкобенивался" иногда, но я его заставил smile.gif). Вопрос именно в алгоритмах.

Спустя 1 час, 57 минут, 19 секунд (31.01.2011 - 23:00) inpost написал(а):
Каждый участок данных помещаешь в отдельный <div> контейнер. По событию "двойное нажатие" убираешь этот участок (скрываешь) и ставишь вместо него форму с textarea с его содержимым без всяких кнопок + фокус на этот textarea. На событие onblur (убираешь выделение с объекта) делаешь проверку, если данные из формы изменились с теми, что были вначале - то посылаешь через ajax перезаписанные данные, в противном случае просто убираешь textarea и ставишь обратно обычый текст.
У меня так работала таблица с данными по виду напоминавшая excel.

Спустя 1 час (1.02.2011 - 00:00) sergeiss написал(а):
"Каждый участок данных помещаешь в отдельный <div> контейнер."... И т.д. по тексту... Что-то в этом есть, подумаю с утра, "на свежую голову" smile.gif Спасибо за свежую мысль smile.gif

Спустя 43 минуты, 11 секунд (1.02.2011 - 00:43) inpost написал(а):
sergeiss
Ах да, двойное нажатие именно по этому диву.

Спустя 10 часов, 42 минуты, 14 секунд (1.02.2011 - 11:25) Michael написал(а):
Вариант 1.
Цитата
При нажатии кнопки "редактировать" вызывается отдельная форма ввода

Так а как определяется ЧТО редактировать? Или таких кнопок "редактировать" много в разных частях?
В принципе форма грузится как html, делается мод. окно и его диву innerHTML. Как обрабатываешь данные введенные в эту форму?

Вариант 2., откровенно говоря не сильно понял что делается.

Спустя 29 минут, 59 секунд (1.02.2011 - 11:55) sergeiss написал(а):
Michael - да, кнопки "редактировать" (в настоящее время) делаются для каждого отдельного блока данных.

Во 2-м варианте делается следующее. Есть ДИВ, в котором находятся разные (задизейбленные) инпуты с данными. При нажатии кнопки "редактировать" под этот див "подкладывается" в отдельном слое полупрозрачный фон, чтобы нельзя было что-то другое редактировать, после чего все дизейблы снимаются. То есть, нового ничего не добавляется на странице, только выделяется существующее.
Визуально мне такой вариант больше понравился, но какой-то гиморный оказался в реализации smile.gif

Спустя 30 минут, 3 секунды (1.02.2011 - 12:25) Michael написал(а):
Цитата (sergeiss)
Визуально мне такой вариант больше понравился, но какой-то гиморный оказался в реализации smile.gif

А чем он гиморный? У тебя в нем получается все формы уже лежат на странице, а в первом - подгружать же еще надо?

Обрабатывать данные от форм, можешь так(без аякса):
сделай форме target="имяФрейма", и сабмити в этот невидимый ифрейм. Будет как аякс - сабмит без перезагрузки страницы.

Спустя 57 минут, 14 секунд (1.02.2011 - 13:23) sergeiss написал(а):
Цитата (Michael @ 1.02.2011 - 13:25)
А чем он гиморный?

Он гиморный тем, что в случае отказа от редактирования, когда данные уже изменены были, надо делать возврат. Либо подгружать данные из БД, либо где-то их хранить на странице.

Все-таки, наверное, возьму свой "вариант 1" как основу (только доработаю немного), а на будущее, для "мелких случаев", когда не так много данных обрабатывать, вариант "от инпоста".

Спустя 7 дней, 21 час, 36 минут, 7 секунд (9.02.2011 - 10:59) sergeiss написал(а):
Отработал третий вариант. Это когда формы не сидят на странице изначально, а подгружаются аяксом. Всё оказалось в итоге еще проще, чем я думал smile.gif Хотя по граблям немного попрыгал. Но в процессе узнал много полезного (и не говорите мне ничего про jquery, не мешайте заниматься самообразованием smile.gif).

Сейчас буду дорабатывать до окончательного рабочего состояния.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.