Требуется перезапись отредактированной таблицы
Использую для редактирования таблицы следующую конструкцию найденную в интернете (поскольку сам туп):
$(function () {
$('b, strong').click(function (e) {
//ловим элемент, по которому кликнули
var t = e.target || e.srcElement;
//получаем название тега
var elm_name = t.tagName.toLowerCase();
//если это инпут - ничего не делаем
if (elm_name == 'input') {
return false;
}
var val = $(this).html();
var code = '<input type="text" id="edit" value="' + val + '" />';
$(this).empty().append(code);
$('#edit').focus();
$('#edit').blur(function () {
var val = $(this).val();
$(this).parent().empty().html(val);
});
});
});
$(window).keydown(function (event) {
//ловим событие нажатия клавиши
if (event.keyCode == 13) { //если это Enter
$('#edit').blur(); //снимаем фокус с поля ввода
}
});
Буду весьма и весьма признателен если подскажете как реализовать перезапись файла с таблицей на сервере (не в б.д. а просто html- файл) Другими словами нужно сохранить отредактированный текст на сервере. |
А зачем поля формы помещать в элементы B или STRONG? И что дает таблица с полями формы и их значениями в ней?
Чтобы сохранить, нужно помещать в поле формы html-код таблицы и отправлять на сервер, перезаписывая этим содержимое файла. |
То какими тегами обернуть поля не важно. Данная конструкция позволяет редактировать таблицу на лету (точнее только значения в тегах b и strong что весьма важно) Таблица содержит в себе прайс с весьма большим количеством значений. Повторюсь еще раз нужно чтоб контент-менеджер смог редактировать только значения цен в прайсе, но не всю таблицу.
|
Скажу еще, что вопрос не в том как и что редактировалось, а как сохранить отредактированную таблицу?
|
Цитата:
Данная таблица содержит не значения b и strong, а поля input, вы же их помещаете в данные элементы. Если это и нужно, html-код таблицы, в чем проблема, получайте его, передавайте на сервер и сохраняйте. Только это слишком так редактировать. |
поля input появляются Только при клике на текст в теге b и strong, а при клике в другую область поля исчезают оставив отредактированный текст
|
Конструкция схожая с contentEditable
|
dee3000,
получить с сервера JSON => сформировать таблицу => отредактировать и таблицу + JSON => отослать JSON на сервер |
Виноват, мимо ушей id="edit". :)
Ну а в чем конкретно проблема то? |
Цитата:
|
Цитата:
А зачем тогда таблицу + JSON => отослать? ) |
Цитата:
http://javascript.ru/forum/misc/4559...tml#post302151 |
laimas,
в таблице изменения визуально - в обьекте из которого потом сформируется JSON для хранения и последующей передачи на сервер отсылается только JSON |
рони,
ну если можно из данных сформировать требуемую таблицу, в которой опять таки изменяются только эти же данные, то сформировать ее может также и сервер. Зачем же гонять саму таблицу туда сюда? |
laimas,
каким образом сервер узнает изменения? где гоняется таблица? получили данные, изменили, сохранили результат на сервере - всё :-? |
Цитата:
Если бы речь шла о каком-то ином содержимом, тут еще вопрос, но речь о таблице, а это как минимум строки и колонки в ней. Ведь не суть как хранить на сервере, в случае хранения данных в базе как бы поступили - получили, сформировали, изменили, получили данные, обновили. Все это можно описать и обычным массивом, включая и данные которые подлежат редактированию. Хранить на сервере его удобно в json, если почему-то база не используется. А где гоняется таблица, этого я не знаю. ) |
laimas,
своё виденье описал выше, какие тебя вопросы мучают не понимаю. |
Цитата:
Я о том, что отправлять серверу только редактируемые данные. |
Цитата:
|
Всем огромное спасибо.
Реализовал в итоге так:
$(document).ready(function() {
$("#save").click(function (e) {
var content = $('#editable').html();
$.ajax({url: 'save.php', type: 'POST', data: {
content: content },
success:function (data) {
if (data == '1'){
$("#status")
.addClass("success")
.html("Все изменения сохранены.")
.fadeIn('fast')
.delay(3000)
.fadeOut('slow');
}
else{
$("#status")
.addClass("error")
.html("Произошла ошибка во время сохранения данных!")
.fadeIn('fast')
.delay(3000)
.fadeOut('slow');
}
}
});
});
});
кнопка: <button id="save">Сохранить</button> содержимое файла save.php: $baza = mysql_connect ("localhost","admin","pass"); mysql_select_db ("db",$baza); mysql_query("SET NAMES 'UTF8'"); $content = $_POST['content']; $content = mysql_real_escape_string($content); $sql = "UPDATE `db`.`price` SET `table` = '$content'"; if (mysql_query($sql)) { echo 1; } Все работает и меня в принципе устраивает, кроме того что при каждом сохранении в таблице, в б.д. добавляется перенос строки в верху перед текстом, может подскажите как устранить? |
Цитата:
|
Цитата:
var content = $.trim($('#editable').html());
если конечно дело не в php ... |
Цитата:
//данные таблицы
$table = [
['aaaa aaaa aaaa', 'bbb bbb bbb', 'ccc ccc ccc'],
['aaaa aaaa <b></b> aaaa <strong></strong>', 'bbb bbb bbb', 'ccc ccc <b></b> ccc'],
['aaaa <em></em> aaaa aaaa', '<b></b> bbb bbb bbb', 'ccc ccc ccc']
];
//редактируемые данные, только их изменяем/сохраняем
$data = [
1=>[['AAAAA', 'BBBBB'], 2=>['CCCCC']],
2=>[['DDDDD'], ['EEEEE']]
];
//если вывод для редактирования, то форма
$edit = 1;
//вывод таблицы
$tbl = '<table border=1><tr>' . implode('</tr><tr>', array_map(function($k, $v) use($data, $edit) {
if($data[$k]) {
foreach($data[$k] as $n=>$d) {
preg_match_all("/(<[^>]+>)(<\/[^>]+>)/U", $v[$n], $a);
foreach($a[0] as $j=>$m) $v[$n] = preg_replace("#$m#", $a[1][$j] .
($edit ? '<input name="data['.$k.']['.$n.']" value="'.htmlspecialchars($d[$j]).'">' : $d[$j]) .
$a[2][$j], $v[$n], 1);
}
}
return '<td>' . implode('</td><td>', $v) . '</td>';
}, array_keys($table), $table)) . '</tr></table>';
echo $tbl;
|
Цитата:
Вы что-то все в кучу смешали. |
рони
Большое спасибо помогло |
Цитата:
|
Цитата:
Вряд ли. Вот только представление о прейскуранте какое-то непонятное. Товары в базе, это их описание, типа артикул, наименование, производитель, цена. Кто, все ли, если не все, то какие параметры товара может изменять, отношения к прейскуранту не имеет, это вопросы администрирования данных. А вот получение самого прейскуранта, так это получение товаров в базе, всех или только некоторых их полей, и вывод в необходимом формате - html-таблица, excel, pdf. Щелкать в нем и править необходимости нет. Иначе это не прейскурант, а нечто иное. |
Цитата:
но дело в том что у одного, скажем товара много условий для цены. Чем делать таблицу с большим количеством полей, и потом изобретать сложные запросы и работать с массивами, мне гораздо проще так как я уже сделал и работает ))) В любом случае большущее спасибо за Ваши ответы, это бесценный опыт для меня! |
Цитата:
Делайте как считаете нужным, но так не поступают, ни дай бог что-то слегка изменить придется, и вам придется править все ваши грабли. |
| Часовой пояс GMT +3, время: 07:41. |