powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / небольшой вопрос по краткости-сестре таланта)
113 сообщений из 113, показаны все 5 страниц
небольшой вопрос по краткости-сестре таланта)
    #38369900
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, всем привет! Написал сам небольшой скрипт вывода данных из таблицы mysql на страницу. Он сам использует заголовки таблицы мускула в качестве заголовков таблицы html. Пользователю просто нужно написать запрос скульный, остальные столбцы и заголовки и данные выведутся сами.
Все работает как надо, просто прошу глянуть, как можно еще упростить выражение.


Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<?php
$con=mysql_connect('localhost','root','')or die("коннекшн не сложился");
$db=mysql_select_db('testdb')or die("запрашиваемая база данных не существует,либо недоступна");
$sql=mysql_query('SELECT * FROM tblmonitoring')or die ("проблема с запросом,проверьте синтаксис SQL");
$qty=mysql_num_fields($sql)or die("ошибка с подсчетом количества полей");


// ТО ЧТО НИЖЕ, МОЖНО УПРОСТИТЬ, ТОЛЬКО НЕ ЗНАЮ КАК


echo "<table><thead><tr>";
// ЗДЕСЬ Я ВЫВОЖУ ЗАГОЛОВКИ ПОЛЕЙ ТАБЛИЦЫ В THEAD
for($i = 0; $i < $qty; $i++){
echo "<td>".mysql_field_name($sql,$i)."</td>";
}
echo"</tr></thead><tbody>";


while ($result=mysql_fetch_array($sql))// ЗДЕСЬ Я ВЫВОЖУ ЗНАЧЕНИЯ ПОЛЕЙ ПО ЗНАЧЕНИЮ ИМЕН ЗАГОЛОВКОВ В TBODY
{
echo "<tr>";

for($i = 0; $i < $qty; $i++){
echo "<td>".$result[mysql_field_name($sql,$i)]."</td>";
}
echo "</tr>";
}
echo "<tbody></table>";
?>
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38369951
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечный цикл можно чуть проще
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
while ($row=mysql_fetch_assoc($sql)) {
echo "<tr>";
foreach($row as $value){
echo "<td>".$value."</td>";
}
echo "</tr>";
}
echo "<tbody></table>";
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38369992
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый цикл тоже можно заменить на while, тогда не надо будет предварительно считать сколько там столбцов в запросе :)


Код: php
1.
2.
3.
4.
5.
echo "<table><thead><tr>"; $i=0;
// ЗДЕСЬ Я ВЫВОЖУ ЗАГОЛОВКИ ПОЛЕЙ ТАБЛИЦЫ В THEAD
while($field = mysql_field_name($sql,$i++))
  echo "<td>$field</td>";
echo "</tr></thead><tbody>";  
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370021
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvano,Ренат, спасибо большое за советы!!
Сейчас подточу в соответствие с вашими рекомендациями!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370095
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Если честно я бы вобще упростил до минимума:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
$con=mysql_connect('localhost','root','')or die("коннекшн не сложился");
$db=mysql_select_db('testdb')or die("запрашиваемая база данных не существует,либо недоступна");
$sql=mysql_query('SELECT * FROM tblmonitoring')or die ("проблема с запросом,проверьте синтаксис SQL");

echo "<table>";
$headerShowed = false;

while ($result=mysql_fetch_assoc($sql)) {
if (!$headerShowed) {
echo "<thead><tr>";
foreach(array_keys($result) as $field){
echo "<td>".$field."</td>";
}
echo"</tr></thead>";
echo "<tr>";
$headerShowed = false;
}
foreach ($result as $value) {
echo "<td>".$value."</td>";
}
echo "</tr>";
}
echo "</table>";
?>
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370424
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат, спасибо! Ход мысли и логику осилил, да, это вообще здорово так обертывать переменные.
У меня есть два вопроса, если не сложно прошу ответить:
1) $headerShowed = false - это какая то константа? Что то не смог раскопать описание в PHP.
2) array_keys($result) as $field) или foreach ($result as $value) - нубский вопрос, а зачем и так переменные объявлять еще раз переменными?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370502
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$con=mysql_connect('localhost','root','')or die("коннекшн не сложился");
$db=mysql_select_db('testdb')or die("запрашиваемая база данных не существует,либо недоступна");
$sql=mysql_query('SELECT * FROM tblmonitoring')or die ("проблема с запросом,проверьте синтаксис SQL");

echo "<table>";
$headerShowed = false;

while ($result=mysql_fetch_assoc($sql)) {
if (!$headerShowed) {
echo "<thead><tr>";
echo "<td>".implode("</td><td>", array_keys($result))."</td>";
echo"</tr></thead>";
$headerShowed = true;
}
echo "<tr>";
echo "<td>".implode("</td><td>", $result)."</td>";
echo "</tr>";
}
echo "</table>";
?>


Но очень много echo режет глаз и места занимает... потому я бы так сделал:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?php
$con=mysql_connect('localhost','root','')or die("коннекшн не сложился");
$db=mysql_select_db('testdb')or die("запрашиваемая база данных не существует,либо недоступна");
$sql=mysql_query('SELECT * FROM tblmonitoring')or die ("проблема с запросом,проверьте синтаксис SQL");
$headerShowed = false; 
?>

<table>
<?php while ($result=mysql_fetch_assoc($sql)): ?>
  <?php if (!$headerShowed): ?>
    <?php $headerShowed = true; ?>
    <thead><tr>
    <?= "<td>".implode("</td><td>", array_keys($result))."</td>"; ?>
    </tr></thead>
  <?php endif; ?>
  <tr>
    <?= "<td>".implode("</td><td>", $result)."</td>" ?>
  </tr>
<?php endwhile; ?>
</table>



Но второй вариант не читаемый почти если нету подсветки html (но становится удобнее если таковая есть), потому как Вам удобнее...
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370626
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, и вам спасибо огромное! Какая однако полезная функция склейки implode)) И не надо циклом прогонять.
А нет шанса наколоться с ней с порядком наименований столбцов в шапке и порядком данных в tbody. То есть нет ли вероятности, что имена столбцов таблицы будут одни,а данные в tbody смешаются и попадут другие,из другого столбца?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370637
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловРенат, спасибо! Ход мысли и логику осилил, да, это вообще здорово так обертывать переменные.
У меня есть два вопроса, если не сложно прошу ответить:
1) $headerShowed = false - это какая то константа? Что то не смог раскопать описание в PHP.
2) array_keys($result) as $field) или foreach ($result as $value) - нубский вопрос, а зачем и так переменные объявлять еще раз переменными?

1. Почему константа? Это точно такая же переменная. Которую Ренат ввёл, что бы заголовки вывелись единожды. Единственное, если я не ошибаюсь он немного ошибся, я это исправил в своём варианте, который писал как небольшую доработку (переработку) его варианта.
2. Потому как конструкция такая... Берётся каждое значение массива $result и присваивается переменной $value. Это для простоты, что бы не следить за индексами, когда они например совсем не нужны. Вообщем просто надо знать, что есть такая конструкция в php... А по-ходу поймёте, что без неё если можно обойтись, то очень геморно...
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370710
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

прально для единожды вывода шапки, и я там ошибся)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370785
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребят, спасибо! Благодаря данному топику узнал три разных способа генерации содержимого:)

Хочу уточниться по логике обработки переменной


if (!$headerShowed): или if ($headerShowed)==false это в принципе одно и тоже? То есть у вас как бы идет от отрицания условие. Это просто кто как привык писать?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38370827
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лаловребят, спасибо! Благодаря данному топику узнал три разных способа генерации содержимого:)

Хочу уточниться по логике обработки переменной


if (!$headerShowed): или if ($headerShowed)==false это в принципе одно и тоже? То есть у вас как бы идет от отрицания условие. Это просто кто как привык писать?
Да, только ==false перед скобкой а не после... иначе пхп ругнётся.. почему именно отрицание условия, потому как по логике можно было бы создать переменную $notHeaderShowed, которая была бы true до показа шапки и false после показа... тогда условие было бы if($notHeaderShowed), видите, тоже отрицание (только не на уровне языка, а на уровне осознания логики)? Но логика получается перевёрнута, так как флаг изначально должен быть выставлен в true... А если Вы пишите проект и машинально забыли инициализировать переменную присвоив ей true до нужного участка кода? тогда логика сломается... а если принимать изначальное значение флага как false и выставлять true только при определённом условии, то такой ошибки не будет, так как неинициализированная переменная в пхп эквивалентна false. Вообщем так просто легче и надёжнее в языке с динамической типизацией... В языках с жёсткой типизацией это не актуально, так как Вы обязаны инициализировать переменную до её первого упоминания в коде.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38374395
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!

Данный топик был создан с целью задать вопросы по уменьшению и оптимизации кода генерации таблицы.
очень помогли. Реальной целью на горизонте является создание полноценного грида ,как в эксель/аксесс к примеру, с полным фаршем по навигации,сортировкой,перестановкой столбцов,строк ,фильтров,выделений . Хочу уточнить, можно ли отойти от обычного представления таблицы и лепить ее к примеру DIVами, обкусывая строки и перенося вниз по длине полей к примеру.
Мне кажется что попроще будет работать с такой таблицей в Jquery UI с фишками такими как draggable,droppable,sortable и так далее. Хочу сделать полноценный грид с максимально расширенным количеством функций (на Сенче, JQgrid и прочих сайтах все не то, в раздельности функции все есть, а вот чтобы в один грид собрать и sortable, и draggable и заполнение массовое как в экселе -нет нигде, по частям продаются капиталисты)))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38374434
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы phpmyadmin в смысле изобретаете?

и как будете d&d делать? Менять id у записей чтоли?) или у вас не универсальный, чисто под ващши таблицы?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38374467
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат, нет) Пхпмайадмин не изобретаю) Мне нужен хороший Grid для базостроения. Универсальный. Чтобы можно было не парясь использовать. Мучительно перехожу с десктопа на WEB , очень удивился что тут нет таблиц с нормальной навигацией.
Под нормальной навигацией подразумеваю нечто такое , как таблицы в аксессе (просто приложил в письме,можете посмотреть что я подразумеваю под нормальным гридом. Аксесовский файл в старом формате mdb. Если у вас в офисном наборе есть аксесс ,то гляньте) Там можно и изменять ширину,и перетаскивать (несколько столбцов, как угодно),и фильтры классные итд итп. Вот такую штуку я хочу повторить и в WEB. Собственными силами)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38375265
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловРенат, нет) Пхпмайадмин не изобретаю) Мне нужен хороший Grid для базостроения. Универсальный. Чтобы можно было не парясь использовать. Мучительно перехожу с десктопа на WEB , очень удивился что тут нет таблиц с нормальной навигацией.
Под нормальной навигацией подразумеваю нечто такое , как таблицы в аксессе (просто приложил в письме,можете посмотреть что я подразумеваю под нормальным гридом. Аксесовский файл в старом формате mdb. Если у вас в офисном наборе есть аксесс ,то гляньте) Там можно и изменять ширину,и перетаскивать (несколько столбцов, как угодно),и фильтры классные итд итп. Вот такую штуку я хочу повторить и в WEB. Собственными силами)

access'а нету... у меня linux. Фильтры обычно делаются через view'сы. Только вот phpmyadmin их создавать вроде не умеет (визуально имеется ввиду... запросами вручную можно всё), но есть проги, в которых это делается очень просто (хотя обычно phpmyadmin юзаю). А что именно надо? пример можете показать (вернее показать не получится... рассказать)?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38375609
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Да, конечно, пример показать могу (Картинку приложил). Вот к примеру скрин нормальной рабочей таблицы десктопного приложения (в.ч Ms Access).
Он (грид/таблица/представление) очень интерактивен и:
1) Классные фильтры расширенные пользовательские. Указал стрелочкой.
2) Все столбцы в данном гриде можно растягивать, скрывать,перетаскивать,закреплять при помощи мышки. Причем как один,так и несколько.
3) Не надо отдельно по каждой записи делать заведение. Просто стрелочками перемещаетесь как в экселе и проставляете
нужные значения в нужные строки/ячейки.


В общем такая суперюзабельная штука, которая в одной таблице позволяет делать все. В сети много примеров готовых. В частности JqGrid
Можете посмотреть здесь: http://www.trirand.com/blog/jqgrid/jqgrid.html

или здесь: http://docs.sencha.com/extjs/4.2.1/extjs-build/examples/build/KitchenSink/ext-theme-neptune/#locking-grid

Там очень крутые примеры готовых плагинов для создания интерактивных редактируемых таблиц html. Очень большой список возможностей и кузявностей с примочками. НО! Нигде не реализовано даже самое простейшее свойство перемещение между ячейками при помощи стрелочек)) Фильтры уродливые итд итп.

Чего я хочу- я хочу написать нормальный плагин табличный сам, и уже потихоньку ковыряю. В качестве движка и генератора тегов естественно будет PHP. В качестве интерактивности будет использоваться JQuery.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38375706
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловНО! Нигде не реализовано даже самое простейшее свойство перемещение между ячейками при помощи стрелочек)) Фильтры уродливые итд итп.

Вы по foreign keys говарите?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38375766
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат, а причем здесь foreign keys?) Имею в виду стрелочки вверх,вниз,влево,вправо. Нажал к примеру вниз- курсор перешел на ячейку ниже, нажал на стрелку на клавиатуре влево-курсор переместился на ячейку левее.
Я это уже реализовал (простенький образец приложил. Просто наведите курсор и щелкните на ячейку, а потом клавишами клавы вверх,вниз,влево вправо погоняйте курсор как в обычном экселе). И это только 1 процент, от того что нужно сделать))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38375783
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ХРОМ запускайте только.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376084
Сергей Лалов
я конечно всё понимаю... только начал изучать веб - руки горят, голова кипит...
НО! может взять для разработки\изучения что-нибудь попроще (для своего уровня)?!
Имею в виду стрелочки вверх,вниз,влево,вправо. Нажал к примеру вниз- курсор перешел на ячейку ниже, нажал на стрелку на клавиатуре влево-курсор переместился на ячейку левее.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<script>
	$().ready(function(){
		$('#tbl1').on('keydown',function(e){			
			var current = $(e.target),
				td = current.parent('td'),
				tr = td.parent('tr'),
				cols = tr.find('td'),
				rows = $(this).find('tbody tr');
												
			switch (e.which) {
				case 40: //down
					if(tr.index() < rows.length - 1) {
						rows.eq(tr.index() + 1).find('input').eq(td.index()).focus();
					}
					break;
				case 38: //up
					if(tr.index() > 0) {
						rows.eq(tr.index() - 1).find('input').eq(td.index()).focus();
					}
					break;				
				case 39: //right
					if(td.index() < cols.length - 1) {
						tr.find('input').eq(td.index() + 1).focus();
					}
					break;
				case 37: //left
					if(td.index() > 0) {
						tr.find('input').eq(td.index() - 1).focus();
					}
					break;
				default:
			}			
		});
	})	
</script>


там же тоже не дураки сидят... если чего-то не делают, то в силу каких-то причин ИМХО! ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376117
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
горячая голова,

Ну как в силу каких причин, каждый отдельный грид со своей фишкой можно отдельно и продать)) Какие тут вопросы могут быть. Уровень подтягиваю постоянно. Самое главное чтобы желание не пропало)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376120
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в первоначальном варианте код JS тоже достаточно неплохо читается. C event работы поболее, но во всяком случае разобраться можно. Мне данный пример на javascript.ru подсказали. Вот, собираю постепенно мозаику из кусочков)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376143
авторКстати в первоначальном варианте код JS тоже достаточно неплохо читается. C event работы поболее, но во всяком случае разобраться можно. Мне данный пример на javascript.ru подсказали. Вот, собираю постепенно мозаику из кусочков)
читается кем? тобою разобрать что? говнокод работает где? только в хроме and etc ;)))
почувствуй разницу между "данный пример на javascript.ru подсказали. собираю постепенно мозаику из кусочков " v\s пишу программный код !
авторкаждый отдельный грид со своей фишкой можно отдельно и продать)) Какие тут вопросы могут быть.
(facepalm) вопрос один - может книги почитать?! ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376206
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
горячая голова,

Ты сходи на javascript.ru и скажи модеру что он написал говнокод, просто он склепал решение в чистом JS,причем как понимаю за несколько минут и на коленке. Можешь с ним померятся письками. Я пас.

Согласен, с JQUERY он смотрится покороче и попонятней, мне то уж точно)

Мне кажется ты неправильно понял- я не хочу продавать гриды по кусочкам, это на Сенче и прочих сайтах хотят))

Расслабся, сегодня пятница!

Спасибо за пример с Jquery, буду изучать!)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376332
Дай ссылку на его ответ... если это его перл, не проблема сказать и ему...
Не за что! Изучай! А лучше, почитай книги, знания тебе понадобятся.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376377
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов... А-а... если Вам надо то, что на рисунке... можете сделать.
Тут смысл того, что разработчики phpmyadmin этого не делают из-за невостребованности. То есть вместо таких фильтров я бы просто использовал бы поиск, а ещё лучше запрос бы ручками быстро набросал (хотя зависит от случая, бывает что поиском удобнее). Это всё "сегодня", "завтра" и "вчера" конечно круто, но если понадобится статистика по дням недели или ещё что подобное, то такая визуальная "удобная" среда станет очень неудобной. Потому скорее всего, что Ваша разработка если у будет востребована, то только Вами.

Я тоже хотел фреймворк для mysql свой написать по первости... написал на свою голову. Спустя пол года меня проекты с этой фигнёй начали очень сильно бесить, так как я понял что у mysql намного больше возможностей (которые мне нужны), и дорабатывать этот фреймворк стоит очень больших денег (точнее времени, в денежном эквиваленте) и намного дешевле будет просто от него отказаться и писать чистые запросы. Но был связан собственной разработкой в старых проектах (новые начинал уже без неё)... Хорошо старые проекты потом на переработку взяли и я смог избавится от этого "чуда фреймворка". Так что правда, лучше оцените нужно ли Вам это реально... или же в будущем будет просто Вас обременять.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38376390
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, Это же колоссально свой фрейморк заделать ! После такого наверное уже не остается темных пятен в программировании. Мне до такого далеко в ближайшем светлом будущем. А по поводу гридов хочу сказать отдельно, юзабельные конструкции есть где приложить. В частности в логистике,которой я собственно и занимаюсь по основной специальности. Там счет идет на секунды. Нет времени к примеру нажимать на кнопку сохранить, и нужно к примеру заполнить не одну строку,а править массово,те же самые приходы товара,плановые даты движения груза,судов,жд составов,автомобилей. Хочется больше плюшек,и именно в одном месте,чтобы не отвлекаться на каждую запись при редактировании. Десктопные проги ,типа ms access + ms SQL server выручали до определенного момента,да и редактор объектов и кода там крутой, НО! Постоянно долбился, то у одного библиотек на офис нужных нет,у другого 64 bit офис,у третьего вообще не стоит аксесс и версии языка старые. Когда в базе одновременно сидит порядка 70 человек ,и я сам собственно говоря занимаюсь транспортом с таможнями,складами и логистикой,то постоянные вопросы по настройке компов,установке библиотек,раздаче прав,написания запросов и отчетов иногда напрягают. Запросы да, можно по быстрому поднять денежку,вроде один запрос ,написанный по феншую для оракл (не вьюха, а полноценный,с транзакциями,откатами и прочим гарниром стоит от 5 до 20 штук деревянных). Не знаю как в мускуле, но разрабы баз и систем под oracle для докручивания своих продуктов для клиентов дают такие ставки. У меня последние годы получались довольно крепенькие и живучие проекты на десктопных приложениях. С SQL проблем вообще никаких нет. С VB, VBA тоже. Абсолютно все проблемы или непонятки с кодом решаются очень быстро. Но опять же, переполз в Веб, тут гораздо больше ручками строчить . И язык сетевой , надеюсь не забанят-распиз--йский какой то, более расплывчатый)) ну буду у вас учится заново. Так как дектоп это уже могилка в общем тА.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377364
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кстати уже нашел логическую неувязку в своем предыдущем вопросе- гонять курсор по инпутам. Если у меня таблица в среднем составляет 20 столбцов и при среднем объеме работы в год накапливается порядка 6500 строк, то при генерации тегов input внутрь тега td получиться ,что я сделаю на странице 6500*20=130000 лишних и ненужных тегов инпут.
Проще сгенерить таблицу в обычном виде и выполнить курсор в виде плавающего input , который наследует при переходах между строками и ячейками значения текущего эелемента td . Этож какая экономия.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377395
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

откройте для себя пагинацию.

а мне если честно вобще нравиться больше вот такой интерфейс: http://demopage.ru/yii-bootstrap-editable
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377397
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, а Вы уже подумали над тем, как и в какой момент введённые/отредактированные/удалённые данные будут передаваться на сервер? Какие типы данных планируете поддерживать?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377455
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

1. я почемуто более чем уверен что ответ будет такой:
для каждой записи будет <input name="value_<id строки>_<имя поля>">
и все строки зараз будут сохраняться кнопкой save.

2. либо <input name="value[<id строки>][<имя поля>]">

3. либо аяксом....

посмотрим что выберит топикстартер
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377506
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, Ренат, информация будет сохраняться стандартным способом,который уже тыщу лет как используется в десктопных приложениях. Запрос будет отсылаться на сервер, после того,как в фокусе будет другая строка) . Еще хочу чтобы грид наследовал свойства серверной роли. Если к примеру в таблице Table1 юзеру User1 запрещено удалять записи, то соответственно он не сможет удалить текущую запись. Если же в этой таблице юзер не может править поле1, то она к примеру будет enable=false. Мне в общем то придумывать с точки зрения объектов ничего не надо. Просто побольше свойств перетащить из ADO+MS SQL и написать их вашим языком)
Что должен делать грид:

1) Выводить информацию. (SELECT)
2) Быть интерактивным в плане обновления (UPDATE)
3) С возможностью удаления одной/нескольких выделенных строк (DELETE)
4) C возможностью добавления новых строк (INSERT)

Как сделать класс или публичную функцию в VBA я знаю. PHP только начал изучать.


Теперь каким он должен быть с точки зрения пользовательского интерфейса (JQ+JS):

1) Столбцы и строки грида/таблицы должны быть растягиваемые (resizable)
2)Столбцы и строки грида/таблицы должны быть перемещаемыми (droppable)
3) Столбцы и строки грида/таблицы должны быть с возможностью выделения (selectable)
4) Перемещения между ячейками таблицы должны быть организованы как можно понятней, при помощи стрелок .
5) Запрос к серверу при правке таблицы должен осуществляться при переходе курсора/фокуса на свободную новую строку.
(можно повесить на событие "выход из текущей. Или как там событие правильно классифицировано в JS")
Все вышеуказанные манипуляции должны производиться при помощи курсора и кнопок клавиатуры. Без выскакивания дополнительных предложений нажать кнопку Сохранить. А так, при массовой правке данных в таблице. Я думаю ,что сервер не навернется, если запросы будут отправляться если запросы на обновления будут происходить на уровне одной записи (естественно,не на уровне каждого поля)) MS Access + MS SQL server нормально работает, PHP даже полегче и побыстрей по сравнению с ним летает.)



6) Пользовательские фильтры в заголовках полей, это отдельная тема:

а) Должны автоматом при нажатии выводить возможный список значений для выборки.
б) Если это число- то шаблон под числа.
в) если это текст ,то шаблон под varchar.
г) если даты- то соответственно под даты.


Как это организовать в JS пока не вкуриваю, но книжки почитываю. определить тип переменной через JS пока не знаю как (просто тупо не добрался еще до этого)


И самым главным моментом при редактировании является наследование гридом свойств серверной роли пользователя.

То есть создать то, что успешно работает в MS Office уже на протяжении лет 15 как.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377555
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Надеюсь в письме чуть выше ответил на ваш вопрос)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377591
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловТо есть создать то, что успешно работает в MS Office уже на протяжении лет 15 как.Убийцу Google Spreadsheet?

P.S.: времени не жаль? Вы в одиночку это будете очень долго писать.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377592
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

я конечно выберу Ajax (и вообще весь Jquery), ибо асинхронные запросы к серверу это норма для других языков,они при работе к примеру в других приложениях (не веб) уже по умолчанию используются. И объекты тип формы, грида, контролов,наборов записей обновляются естественно не при перезагрузке страницы)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377593
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

нет, не убийцу)) Просто согласитесь, удобней работать с комфортом)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377596
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловskyANA,

нет, не убийцу)) Просто согласитесь, удобней работать с комфортом)А чем Ваше решение комфортнее уже имеющихся и для кого?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377609
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСергей ЛаловskyANA,

нет, не убийцу)) Просто согласитесь, удобней работать с комфортом)А чем Ваше решение комфортнее уже имеющихся и для кого?

В первую очередь оно удобней для обычных пользователей, которые будут делать правки массово, не отвлекаясь на дополнительные действия вроде нажатия кнопки сохранить. Сколько времени вы сэкономите на этом? Время деньги.
К примеру у меня изменились даты прибытия товара на склад, по 50 разным поставкам . Что мне проще сделать, отфильтровать их в таблице и сразу по всему списку проставить новые даты при помощи клавишы "вниз" и Ctrl+С и Ctrl+V?) Или же искать каждую поставку, заходить в нее,править и нажимать кнопку сохранить?)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377765
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловskyANAпропущено...
А чем Ваше решение комфортнее уже имеющихся и для кого?

В первую очередь оно удобней для обычных пользователей, которые будут делать правки массово, не отвлекаясь на дополнительные действия вроде нажатия кнопки сохранить. Сколько времени вы сэкономите на этом? Время деньги.
К примеру у меня изменились даты прибытия товара на склад, по 50 разным поставкам . Что мне проще сделать, отфильтровать их в таблице и сразу по всему списку проставить новые даты при помощи клавишы "вниз" и Ctrl+С и Ctrl+V?) Или же искать каждую поставку, заходить в нее,править и нажимать кнопку сохранить?)Отфильтровать, нажать Ctrl + A, ввести один раз дату и применить разом ко всем записям.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377772
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё комфортнее, если данные автоматически обновятся.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377784
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА ещё комфортнее, если данные автоматически обновятся.

Можно научить юзеров лепить запросы напрямую через PhpMyAdmin. Но это как говориться еще жеще, чем склепать фреймворк для таблицы))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377808
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловskyANAА ещё комфортнее, если данные автоматически обновятся.

Можно научить юзеров лепить запросы напрямую через PhpMyAdmin. Но это как говориться еще жеще, чем склепать фреймворк для таблицы))Я вообще-то про обмен данными с поставщиками
Откуда у вас пользователи узнают о том, что дата прибытия изменилась? По телефону, почтой, им об этом голосом говорят?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377823
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСергей Лаловпропущено...


Можно научить юзеров лепить запросы напрямую через PhpMyAdmin. Но это как говориться еще жеще, чем склепать фреймворк для таблицы))Я вообще-то про обмен данными с поставщиками
Откуда у вас пользователи узнают о том, что дата прибытия изменилась? По телефону, почтой, им об этом голосом говорят?

Да, это все понятно. Как обычно узнавание происходит при помощи экселевских файликов ,рассылаемых по Увсея Руси со всех концов необъятного земного шара. И понятно что лучше раздать поставщикам права заполнять свои таблицы, перевозчикам свои, нам свои, и действовать в рамках одной системы. И даже ясно что логику большинства процессов можно автоматизировать. Это понятно все. Не об этом речь. Я просто хочу создать editable grid))

А так иронизировал по поводу юзеров. Самый идеальный вариант - это они сами пишут запросы, транзакции, клепают вьюшки,сохраненные процедуры, что уж говорить. Каждому юзеру по PhpDesigner, DreamViewer, SQL Builder (и естественно не забыть попарсить запросы на производительность) ну и конечно же самый лучший вариант - блокнот! С кодировкой ANSI по умолчанию))) Вот тогда то российский программист- разработчик вздохнет спокойно полной грудью и обретет щастие непомерное))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377831
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловskyANAпропущено...
Я вообще-то про обмен данными с поставщиками
Откуда у вас пользователи узнают о том, что дата прибытия изменилась? По телефону, почтой, им об этом голосом говорят?

Да, это все понятно. Как обычно узнавание происходит при помощи экселевских файликов ,рассылаемых по Увсея Руси со всех концов необъятного земного шара.Напрашивается импорт данных, а не рутина в виде верх/вниз, Ctrl + V/Ctrl + C.

Сергей ЛаловИ понятно что лучше раздать поставщикам права заполнять свои таблицы, перевозчикам свои, нам свои, и действовать в рамках одной системы.Нет. Пусть поставщики работают в своей системе, перевозчики в своей. Их нужно просто интегрировать и действовать в рамках одной информационной шины.

Сергей ЛаловИ даже ясно что логику большинства процессов можно автоматизировать. Это понятно все. Не об этом речь. Я просто хочу создать editable grid))Ну то есть делаете для себя.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377837
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Если все контрагенты будут работать в своих системах, то это примерно то же самое что и обмен экселевскими файликами) У всех уникальные индексы разные будут. У кого то номер заявки, у кого то номер спецификации,у кого то какой нибудь уникальный складской номер. Мы сейчас с этими делами столкнулись. Тут даже не сколько через "шину", в случае одинакового типа серверов можно делать межсерверные запросы. Лучше уж чтобы на одном сервере все вертелось, желательно у клиента импортера, то бишь у меня))) Никаких транзакций, никакой мудотни типа шлюзования в определенное время итд итп (извините за выражение). Этож не Вконтакте. Просто обычная СУБД в веб интерфейсе. Пытаюсь делать для себя, но уж поделюсь ,зажимать не буду))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377972
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, зачем Вы мне рассказываете о проблемах сопоставления данных? Я разрабатывал программное обеспечения для туризма, там этих контрагентов: агентства, туроператоры, принимающие партнёры, глобальные системы бронирования, отели, авиакомпании, трансферные компании, экскурсионнные, страховые и т.д. А снаружи просто обычный веб интерфейс

P.S.: даже если Вы поделитесь своим творением (до этого ещё дожить надо), то боюсь толку от него мало будет. Но для Вас безусловно полезно.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38377986
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Согласен с Вами, в любом случае, пока не попробуешь, не узнаешь и новые горизонты не откроешь. Я любитель, но могу сказать, что именно кодинг помог концентрироваться в обычной жизни и научил умению разбивать сложные задачи на необходимое количество малых. Кто то медитирует, кто то поет, кто то носит женское нижнее белье при имени Иван Иваныч, у меня вот тяга покодить.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38378003
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect(...DSN..., ...LOGIN..., ...PASSWORD...);
(my $sth = $dbh->prepare("SQL QUERY"))->execute;

print "<table>";
print "<tr><td>" . join("</td><td>", @{$sth->{NAME}}) . "</td></tr><tr>";
print "<tr><td>" . join("</td></tr><tr><td>", map { join("</td><td>", @{$_}) } @{$sth->fetchall_arrayref});
print "</table>";

Проще, яснее, понятнее и на языке программирования, а не на препроцессоре.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38378015
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Warstone,
А еще проще на другом:

Код: vbnet
1.
Me.form.recordsource="select * from table"
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38378367
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрограмёрЭто всё "сегодня", "завтра" и "вчера" конечно круто, но если понадобится статистика по дням недели или ещё что подобное, то такая визуальная "удобная" среда станет очень неудобной.Надо иметь возможность делать дополнительные фичи не только в общем виде (в фреймворке), но и для конкретного проекта в конкретных местах. И при заказе новой фичи думать, где её разместить. Тогда и фреймворк не разрастается костылями, и проект спокойно пишется с учетом пожеланий заказчика.
Наследование, кстати, вполне себе для этого подходит.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38378384
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГхостикНаследование, кстати, вполне себе для этого подходит.

Я уже уточнил механизм наследования в соседних ветках. На любой вкус. Можно через мускул напрямую через имя пользователя и SHOW GRANTS. А можно через дополнительные созданные таблицы. То есть велосипедов множество, садись на любой.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38378519
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

вы сейчас пытатетесь изобрести что то уже сущевтвующее. мой вам совет

1. найдите то что еще не изобретали
2. либо фрилансем возмите какой нить проект поделать - денежки хотябы заплатят
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38379388
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, На вскидку - ничего сложного не вижу... бегать курсором по клеточкам - фигня дела )) js в руки и готово.... а вот логика таблиц на сервере:
создаём классы row, col, table, каждый из которых будет нести функционал определённой единицы данных...
row... по сути строку мы можем удалить, обновить или вставить... вот пускай предусматривает этих 3 метода (delete, update, insert), потом самое интересное - col... можно навешивать до потери пульса:
add - добавить столбец,
rename - переименовать столбец,
delete - удалить столбец,
show - показать столбец,
hide - скрыть,
setPk - установить как основной ключ,
setIndex - сделать индекным,
setUnique - сделать уникальным индексом,
setType - сменить тип (установить тип),
order - сортировка,
filter - фильтрация по значению столбца,
virt - если столбец виртуальный (то есть считается из других по разным формулам)
вроде основные...
table: методы rename, create, delete, reference(name, join_type, on)

итак, методы add, rename, delete, create, insert, update, setPk, setIndex, setUnique, setType - по сути выполняют конечный запрос... в каждый метод вешаем по запросу и готово (только в методах row надо завязаться на столбец со значением Pk в col)... но думаю тут сложного нету... методы show, hide - просто выставляют соответствующие флаги, что бы знать, что из этого показывать надо... order, filter, virt - на вход могут принимать список заготовок, созданных ранее, которые являются обычными выражениями и названия столбцов (или список экземпляров col)... (заготовки - типа шаблонов для замены... там есть спец символы, которые заменяются на названия введённых столбцов)... пишем в список :) методы virt и reference (у таблицы) пишут данные в отдельную таблицу базы, в которой (следует из названий) будут храниться виртуальные столбцы и связи таблиц...

выдача происходит просто, мы читаем все связи таблиц (в одну сторону, нужен механизм отслеживающий цикличности, что бы избежать зависания), потом после select ставим через запятую все столбцы всех таблиц, у которых был вызван метод show или не был вызван метод hide, потом идёт FROM основная таблица, потом JOIN - тип указывали при вызове метода reference, потом имя таблицы для связи и условие связи, потом WHERE список фильтров через запятую (по уровням, от главной до самых вложенных), потом ORDER по тому же принципу что и фильтры...

Потом можно привязать разные GROUP и т.д...

Все данные о показываемых столбцах (по сути список экземпляров col и table) храним в SESSION (так как данные типа show-hide, order и др. вообще относятся только к данной сессии).

Такой подход при своей относительной простоте будет обладать достаточной универсальностью... На эту часть (серверную) уйдёт около наверное недели-двух (если считать 8 часов рабочий день)... на клиентскую - фиг знает... насколько сложно захотите сделать... думаю тоже недельки 2 можно потратить (хотя что бы всё красиво и удобно, возможно и подольше)... Потому где-то так через месяц появится то, что можно будет отладить и начинать пользовать по мере использования дорабатывать...

Если ошибаюсь в чём-то (основное в подходе) - поправьте... сам такого ниразу не делал, потому могу человека не в ту сторону увести... но структура мне видится такой :).
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38379423
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы тут гугльдок не изобретаете? Если изобретаете, то начните с ExtJS'ного грида что-ли...
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38379922
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Да, общая логика подхода у меня такая же как и вас. Вижу что вы тяготете больше к PHP. Я думаю что фильтры и сортировки и это больше предмет визуализации, наверное в javascript все эти манипуляшки стоит прописать. show и hide для пользовательских фильтров наверное тоже сделать в js лучше (мы же генерим массив тегов на страницу, а шинковать их наверное лучше при помощи js. Ну и так, чтобы кэш SESSION не перегружать лишними метаданными).


Самые большие грабли для меня, это JavaScript .

Вот к примеру прописал функцию (пока предварительно тестирую.) по вставке инпута в текущую/кликнутую ячейку таблицы:

Код: javascript
1.
2.
3.
4.
5.
6.
$(document).ready(function(){
$("td").click(function(){
var varX = this.innerHTML;
$(this).wrapInner("<input type='text' id='input1' value="+varX+">");
});
});



Ну то есть кликаю на ячейку <td> 12345 </td> , внутрь td вставляется input <td><input type="text" value=" 12345 " ></td>

Все работает отлично, но если нажать еще раз туда, то появляется хрень))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380324
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Код: php
1.
2.
3.
4.
5.
6.
$(document).ready(function(){
$("td span").click(function(){
var varX = this.innerHTML;
$(this).parent().wrapInner("<input type='text' id='input1' value="+varX+">");
});
});




Код: php
1.
<td><span>12345</span></td>


помойму это ежику очевидно не?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380360
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,не не, зачем здесь спан. Не это имею в виду. Имею в виду что когда я в первый раз кликаю на ячейке- создается инпут,значение value которого равно innerHTML текущего дива. А вот если еще раз тыкнуть в уже созданный инпут, то в нем появляется хрень. Я вижу решение в предварительной процедуре проверки, не является ли текущий элемент при нажатии инпутом, если является,то выше написанная процедура моя не выполняется. Если не является инпутом- то он соответственно создается и ячейку таблицы можно редактировать. А span для чего нужен тут, я чет не понял, не догнал.


Сейчас бьюсь над событием потери фокуса элемента td. То есть чтобы при нажатии на другую ячейку старый инпут удалялся, значение из него передавалось в старый див и процедура начиналась заново уже с текущей ячейкой таблицы. Как удалять нашел, а вот стоящее событие типа onblur что то пока не могу прикрутить.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380441
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Just for fun:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
<!DOCTYPE HTML>
<html>
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  <style>
    table {
      border-collapse: collapse;
    }
      
    th, td {
      border: 1px solid gray;
    }
      
    td span, td input{
      border: none;
      display: block;
      margin: 0;
      padding: 0;
      outline: none;
      overflow: hidden;
      width: 148px;
    }
  </style>
</head>
<body>
  <table>
    <tr>
      <th>Tab - вперёд</th>
      <th>Shift + Tab - назад</th>
    </tr>
    <tr>
      <td><span tabindex="1">11223</span></td>
      <td><span tabindex="1">34455</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">66778</span></td>
      <td><span tabindex="1">99001</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">12233</span></td>
      <td><span tabindex="1">44556</span></td>
    </tr>
  </table>
  <script>
    $('td').on('blur', 'input', function(event) {
      var input = $(this), parent = input.parent();
        
      parent.html('<span tabindex="1">' + input.val() + '</span>');
    });
      
    $('td').on('focus', 'span', function(event) {
      var span = $(this), parent = span.parent();
        
      parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
      parent.children('input').focus();
    });
  </script>
</body>
</html>
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380447
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$('table').on('blur', 'td input', function(event) {
  var input = $(this), parent = input.parent();
        
  parent.html('<span tabindex="1">' + input.val() + '</span>');
});
      
$('table').on('focus', 'td span', function(event) {
  var span = $(this), parent = span.parent();
        
  parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
  parent.children('input').focus();
});
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380461
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Спасибо! Но я до такого еще не дошел))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380479
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Интересно, а сколько вы проектов закончили в веб и сайтостроении ?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380492
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если считать сайты, то

мелких: 1 Joomla
средних: 2 на ASP.NET WebForms, 1 PHP
крупных: 1 на ASP.NET WebForms, 1 на ASP.NET MVC (текущий, его ещё развивать и развивать)

но я в основном серверной разработкой сейчас занимаюсь
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380504
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Ну у вас за плечами куча реализованного. У меня из серьезных 3 на VB +ms SQL server . 2 халтуры еще из офисного хлама. Все многопользовательские.
И не одного на js,php,MySQL . )) поэтому прошу не судить строго)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380523
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, а я и не сужу. Хотите освоить JavaScript, рекомендую курсы и учебник . После читайте Закаса.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38380824
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловПрограмёр,

Да, общая логика подхода у меня такая же как и вас. Вижу что вы тяготете больше к PHP. Я думаю что фильтры и сортировки и это больше предмет визуализации, наверное в javascript все эти манипуляшки стоит прописать. show и hide для пользовательских фильтров наверное тоже сделать в js лучше (мы же генерим массив тегов на страницу, а шинковать их наверное лучше при помощи js. Ну и так, чтобы кэш SESSION не перегружать лишними метаданными).


Самые большие грабли для меня, это JavaScript .

Вот к примеру прописал функцию (пока предварительно тестирую.) по вставке инпута в текущую/кликнутую ячейку таблицы:

Код: javascript
1.
2.
3.
4.
5.
6.
$(document).ready(function(){
$("td").click(function(){
var varX = this.innerHTML;
$(this).wrapInner("<input type='text' id='input1' value="+varX+">");
});
});



Ну то есть кликаю на ячейку <td> 12345 </td> , внутрь td вставляется input <td><input type="text" value=" 12345 " ></td>

Все работает отлично, но если нажать еще раз туда, то появляется хрень))

Но, если у Вас будет выборка из 5 таблиц, при этом выборка нужны двух столбцов из четвёртой и пятой по одному.... Вы представляете сколько данных Вы будете клиенту отправлять? Это куча трафика, и длительное время выполнения.... Так что все фильтры и сортировки лучше делать в mysql напрямую, а уже обрабатывать отфильтрованные и отсортированные данные...
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382124
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,
Спасибо! А как лучше настроить элементы таблицы для последующей с ней манипуляцией?
Имею в виду наследование типов данных.
Есть к примеру несколько основных типов (не копаем глубже, ) в моем понимании:

- целочисленный
- с плавающей точкой
- логический
- текстовый
- дата

Остальные типы не трогаю (которых на сервере великое множество), ибо для моих целей указанной выше классификации за глаза и по уши хватит.

Хочу спросить, могу ли я в качестве пользовательских типов, при генерации тегов td в качестве атрибута использовать свои наименования?

Ну к примеру в инпут у меня атрибут type будет = int , float , bol , strn , dte в зависимости от типа переменной.
Атрибут class в тегах таблицы я зарезервирую именами под Row (для tr ) и Col (для td ). А атрибуды ID и Name понадобятся для других целей.


Кстати нашел и потестировал пару неплохих JqGrid. Соблазн был велик. Но снес их. Так как хочется самому понять ,как это все работает. JqGridы c плагинами и виджетами это конечно здорово, но есть жгучее желание самому досконально раскопать как это все работает.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382178
интересно, а как всё это связано с ПэХаПэ!?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382192
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноинтересно, а как всё это связано с ПэХаПэ!?

Это связано с PHP следующим образом, есть ключевой момент, где необходимо будет принимать решение- делать скелет работы с фильтрами и обработке типов данных полей при помощи PHP или при помощи JS.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382361
Есть клиент, есть сервер... Всё что ты сейчас оcваиваешь - JS HTML - клиентская часть!
http://www.sql.ru/forum/html-javascript-css или неа? ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382528
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловПрограмёр,
Спасибо! А как лучше настроить элементы таблицы для последующей с ней манипуляцией?
Имею в виду наследование типов данных.
Есть к примеру несколько основных типов (не копаем глубже, ) в моем понимании:

- целочисленный
- с плавающей точкой
- логический
- текстовый
- дата

Остальные типы не трогаю (которых на сервере великое множество), ибо для моих целей указанной выше классификации за глаза и по уши хватит.

Хочу спросить, могу ли я в качестве пользовательских типов, при генерации тегов td в качестве атрибута использовать свои наименования?

Ну к примеру в инпут у меня атрибут type будет = int , float , bol , strn , dte в зависимости от типа переменной.
Атрибут class в тегах таблицы я зарезервирую именами под Row (для tr ) и Col (для td ). А атрибуды ID и Name понадобятся для других целей.


Кстати нашел и потестировал пару неплохих JqGrid. Соблазн был велик. Но снес их. Так как хочется самому понять ,как это все работает. JqGridы c плагинами и виджетами это конечно здорово, но есть жгучее желание самому досконально раскопать как это все работает.

Типы - это не более чем просто валидация данных (ведь по сути всё, что вводит пользователь - это строки... а Вы их валидируете и если всё сходится - выполняете действие)... Валидацию лучше проводить на сервере тоже (так как я Вам что угодно с клиента могу отправить и сказать что всё провалидировал... это не безопасно). Для валидации можно предусмотреть определённый класс (от которого будут наследоваться). В нём обязательно есть метод validate (сама логика валидации), который принимает на вход нужную для валидации строку... Всё остальное неважно (пускай себе реализует что хочет... главное что бы validate был...)

По поводу грида - есть таблица (table, tr, td)... хотя лучше дивами делать... Таблица при вставке данных (или их удалении/изменении пересчитывает ширину столбцов, а это может быть очень долгий процесс, если данных много). Итак, в каждой ячейке любой текст заключён в span... При клике на ячейку спан меняется на инпут... теперь, по поводу смены:
что бы не записать данные не туда, куда надо, нам требуется знать таблицу, в которую будем писать, название столбца и значение primary key. эти 3 значения мы пишем в аттрибуты data-table, data-col и data-pk соответственно. И когда готовы отправить введённые данные, мы дёргаем эти значения и отправляем их вместе с введёным текстом... Тогда на сервере мы будет точно знать что и куда писать :)

Гуляние по гриду - это чисто js :) Вверх, вниз. влево, вправо - переход по ячейкам (сделать не сложно)... при нажати 2 раза на ячейке режим правки (тоже не сложно)... при нажатии энтер в поле ввода или кнопки таб например сохранение данных и переход на ячейку вправо (думаю тоже не сложно)... Сложно - это выделение ячеек мышкой, так как надо читать координаты, самому иммитировать выделение и всё такое, но и это за денёк думаю можно освоить в полной мере... не знаю, вроде всю идею (свою) высветит, как и что делается... если решите делать как я советую и что-то не будет получаться - пишите... )) постараюсь помочь.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382567
Програмёр
ты писал когда-нибудь распределённые системы?!
сидят два оператора с твоей таблицей в 65к ячеек и потихоньку вносят изменения...
как вариант - один удалил строку а второй пытается внести туда изменения...
или один обновил данные, а второй, невидя этого, перезаписал туда старые данные...

предложи вариант решения? ;)
авторно и это за денёк думаю можно освоить в полной мере...
добрый совет ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382645
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересно,

Я как раз и писал БД расчитанные на одновременные пользования > 30 человек. Сделал три серьезных проекта MS Access + MS SQL server 2005. Один для транспортной компании, один для фабрики по производству литейной продукции, один для мобильного салона связи. Со всем фаршем в виде доступа по типу логин/пароль,ролями и.т.д. Плюс у меня на работе крутятся две базы (правда обычные разделенные части MS Access по типу клиент-сервер) в которых трудятся единовременно более 40 человек. Там есть таблицы порядка 60000 строк. Никаких проблем с правкой строк/залипаний логики не наблюдал. Операторы сидят и правят. Бывает что и одну строку, только разные поля единовременно. не вижу никаких проблем. Опыт есть. Опыт создания велосипедов в данном направлении есть, только десктопный.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382655
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И за денек можно освоить, самое главное чтобы интересно было:) С валидацией переменных в JS и PHP начал разбираться. В PHP гораздо почётче и построже это все. Более привлекателен именно вариант с PHP.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382697
авторОпыт создания велосипедов в данном направлении есть, только десктопный.
web - это не десктоп! здесь не канают общепринятые подходы в разработке десктопных приложений!!!
жаль, что ты увлёкся визуальной частью разработки - и пренебрегаешь изучением принципов взаимодействия клиента и сервера...
почитай на эту тему, что-нибудь - может осенит!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382704
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересно Програмёр
ты писал когда-нибудь распределённые системы?!
сидят два оператора с твоей таблицей в 65к ячеек и потихоньку вносят изменения...
как вариант - один удалил строку а второй пытается внести туда изменения...
или один обновил данные, а второй, невидя этого, перезаписал туда старые данные...

предложи вариант решения? ;)
авторно и это за денёк думаю можно освоить в полной мере...
добрый совет ;)

не актуально в рамках данного топика по сути )) тут вот какое дело, если один оператор удалил поставку, то другой уж точно её править не будет ))) Это не логично и говорит об нарушении организации :) Ну, это моё мнение...

А вообще должна быть кнопочка "обновить", которая позволит загрузить все новые правки с сервера... Если я стараюсь записать строку, которой уже нету - я должен получить сообщение об ошибке... Что бы избежать жуткого переплетания работы (не знаю, мне так удобнее по крайней мере, да и прогать легче, ещё никто не жаловался), можно все изменения в базе писать единной транзакцией.. То есть, внизу сделать кнопочку "сохранить изменения на сервере"... пока мы меняем данные (добавляем/удаляем ячейки, меняем тексты) все запросы (в виде логированных изменений) скапливаются где-то... а когда жмём кнопочку - данные действия переводятся в запросы и выполняются (отправляются в базу)... если какой-то запрос заканчивается ошибкой - пользователю можно предложить например отказаться от изменения данных (которые не могут быть изменены), или предпринять другие действия (например добавить (в данном случае вернуть) отсутствующий столбец, строку или таблицу)... Кстати, перед записью надо повторно валидировать данные :) ведь они могут измениться (то есть кто-то мог изменить тип столбца)... И при провале валидации предлагать пользователю поправить значения этих полей.

А какой Вы предложите вариант решения? (мало ли, может я и не прав... если так, то поясните)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382738
http://dr-magic.blogspot.com/2010/01/3.html - шеф всё уже давно украдено до нас!
автор если какой-то запрос заканчивается ошибкой - пользователю можно предложить например отказаться от изменения данных (которые не могут быть изменены)
О как! То есть сервер сам толкнёт клиента?
авторНикаких проблем с правкой строк/залипаний логики не наблюдал.
кстати, расскажи, какие действия ты предпринимал для того, что бы два пользователя не могли править одновременно одно и тоже поле? Интересно послушать... ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382763
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересно,

Второй вопрос видимо адресуется мне? Первое цитирование Программеру, а второе это моя реплика.

По своей реплике могу ответить,что такие запреты в VB+Ms SQL server очень просто отловить.


свойство — LockType. Это свойство определяет тип блокировок, которые будут наложены на записи на источнике, помещенные в Recordset. Можно использовать следующие значения:
adLockReadOnly — записи в Recordset будут доступны только на чтение, вы не сможете их изменять. Это значение используется по умолчанию.
adLockPessimistic — наиболее надежный с точки зрения целостности данных вид блокировки. Вы можете изменять записи в Recordset, но при начале изменения записи она блокируется на источнике таким образом, что другие пользователи не смогут обратиться к ней ни на чтение, ни на запись, пока вы не вызовете методы Update() или CancelUpdate().
adLockOptimistic — это значение позволяет выиграть в производительности за счет проигрыша в надежности обеспечения целостности данных. Запись на источнике блокируется только на время выполнения метода Update(). Остальные пользователи могут одновременно с вами читать и изменять данные на источнике.
adLockBatchOptimistic — то же самое, что обычное оптимистичное, но вместо немедленного обновления по одной записи используется пакетное обновление. В ситуации, когда изменяется большое число записей, такое решение позволяет выиграть в производительности.


Вот это свойство и не позволяет двум пользователям одновременно править одно поле. Это в VBA. Это как раз тот случай когда сервер толкнет клиента. Это в моих старых проектах на VBA. Мои проекты в формате VBA+ADP как раз и предполагают,что очень много event и процессов с клиентской части будут мониториться серверной частью. Это фишка ADP.


По первой реплике вам сможет ответить Программер . Вроде как наши ответы в принципе перекликаются.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382764
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересно http://dr-magic.blogspot.com/2010/01/3.html - шеф всё уже давно украдено до нас!
автор если какой-то запрос заканчивается ошибкой - пользователю можно предложить например отказаться от изменения данных (которые не могут быть изменены)
О как! То есть сервер сам толкнёт клиента?

Вы меня видимо не поняли... зачем сервер толкнёт клиента (в принципе я даже не знаю как, ведь на то он сервер, что бы его клиенты толкали)... А предложить клиенту отказаться от изменений по нажатию кнопки "сохранить изменения в базе". То есть, он нажал, сервер начал обработку... в случае возникновения ошибок, запомнил их... сверил с действиями, повлекшими ошибки и обработал причину ошибок, на основании этого отправляет клиенту возможные варианты решения проблемы... js это выводит клиенту, тот предпринимает одно из предложенных действия и даёт "перезапрос"... сервер снова его выполняет... если появляются ошибки, снова спрашивает как поступить с несохранёнными данными... и так пока не сохранит данные :)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382795
авторRecordset
!!! так вот этот самый Recordset тебе придётся самостоятельно реализовать для решения подобного рода коллизий ;)
если вдруг подобное решение тебе покажется громоздким или оч сложным, тебе придёт в голову, что править строку можно не напрямую в общей таблице с данными, а выбрав её последнюю версию непосредственно запросом на страницу правки записи!!!
и залочить ОДНУ единственную строку от других! а не все строки таблицы!

Програмёр
ОМГ! теория обновления данных по ЭНТЕР при изменении в отдельно взятом инпуте, вероятно разрушилась?
как и теория перехода по ячейкам таблицы с кучей инпутов стрелочками! Следущая на очереди - <span> в каждом диве или ячейке таблицы? ;)
хорошо! как в таблицу из 65к ячеек получить изменённые др пользователем данные?
авторкнопочка "обновить"
? ;) как часто её будет нужно нажимать?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382801
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрпросто интересно http://dr-magic.blogspot.com/2010/01/3.html - шеф всё уже давно украдено до нас!
пропущено...

О как! То есть сервер сам толкнёт клиента?

Вы меня видимо не поняли... зачем сервер толкнёт клиента (в принципе я даже не знаю как, ведь на то он сервер, что бы его клиенты толкали)...

Именно так и толкнет:) Если вы разрабатываете проект в формате ADP, то много процессов, которые делает пользователь на клиентской части приложения мониторятся сервером. На сервере хранятся основные обработчики событий (да да!), а в клиентской части есть так называемые системные таблицы,которые в обычном режиме пользователь не видит. Информация в них скрыта постороннему глазу и генериться автоматически при создании проекта ADP + MS SQL server. За счет взаимопроникновения клиентской и серверной части друг в друга связка ADP и позволяет интерактивный обмен не только на уровне Клиент->Сервер, но и Сервер->Клиент.
Могу уточнить,когда происходит проверка возможности редактирования записи на форме,в строке,таблице. Она происходит обычно на событие "текущая запись". Это когда вы переходите в таблице на новую строку клиентская часть отправляет запрос на сервер, который проверяет,никто ли сейчас не правит текущую строку, если правит-то locked, если не правит-то соответственно unlocked.

В базовом варианте настройки (про наших баранов с лочкой записей) такой механизм по умолчанию действует на следующем уровне - выскакивает не ошибка, а msgbox ( ну то бишь alert либо echo если берем web) который говорит, что за это время текущая запись была изменена другим пользователем, выберите действия которые вы хотите осуществить , оставить свои правки в строке, или принять изменения ,внесенные другим пользователем

Механизм работы клиент сервер конечно идентичен с веб, да и вообще по концепции. Просто майкрософт добавил немного трэша, и сделал незаметными глазу процессы клиент-сервер, за счет увеличения объема скрытых процессов,выполняемых клиентской стороной. Преимущество- не надо париться с диалогами с серверной частью. Недостаток-Рост процессов,выполняемых клиентской частью, рост кэша за счет постоянно висящих линкованных временных таблиц в памяти приложения. Так поэтому то я пытаюсь подружиться и с php и с JS)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382805
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Название топика- краткость сестра таланта уже потеряла свою актуальность :D
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382813
авторМеханизм работы клиент сервер конечно идентичен с веб, да и вообще по концепции.
ну попробуй заставить веб-сервер без запроса клиента прислать тебе данные!!!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382959
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавторRecordset
!!! так вот этот самый Recordset тебе придётся самостоятельно реализовать для решения подобного рода коллизий ;)
если вдруг подобное решение тебе покажется громоздким или оч сложным, тебе придёт в голову, что править строку можно не напрямую в общей таблице с данными, а выбрав её последнюю версию непосредственно запросом на страницу правки записи!!!
и залочить ОДНУ единственную строку от других! а не все строки таблицы!

Програмёр
ОМГ! теория обновления данных по ЭНТЕР при изменении в отдельно взятом инпуте, вероятно разрушилась?
как и теория перехода по ячейкам таблицы с кучей инпутов стрелочками! Следущая на очереди - <span> в каждом диве или ячейке таблицы? ;)
хорошо! как в таблицу из 65к ячеек получить изменённые др пользователем данные?
авторкнопочка "обновить"
? ;) как часто её будет нужно нажимать?

Ваш вариант так и не был озвучен :) Если Вы решили подержать его на последок - уже начинаете передерживать... Начинает складываться впечатление что его или нету, или он уступает одному из озвученных... Расскажите, как бы Вы это решали.

По поводу Энтер - ничего не разрушилось, я всего лишь предложил альтернативу, которая позволила бы так часто не пересекать работу двух операторов... Один сохранил изменения, второй после него попробовал сохранить конфликтирующие данные, запрос отвалился... первый продолжает что-то менять... снова сохранил... всё ок... второй всё исправил, сохранил... первый попробовал сохранить, у него конфликт... исправил, сохранил... А теперь представляете, если несколько операторов одновременно и у них каждое второе поле в конфликте?.. Это как в гитхабе... Вы работаете в своей ветке... когда работу закончили - слили в мастер, если наткнулись на конфликт - решили и закомитили результирующий вариант... А теперь представляете, если бы Вам пришлось решать конфликты по каждому коммиту? ... а теперь представляете, если Вы конфликт решили, а на сервере уже новый коммит появился... и Вы снова конфликт решаете... так его можно решать 2 месяца )) будете не рады такой системе и быстренько с неё спрыгните.

Итак, ждём Ваш вариант :) просветляйте нас пожалуйста...
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382964
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть сформулировать мою идею можно так:
я предложил избавиться от процесса прямой записи в базу и просто "сливать" изменения на основной сервер... как в гите... только вместо своей ветки, Вы создаёте временную таблицу (виртуально... просто в сессию нотируете свои изменения)... когда Вы решаете, что всё готово - вливаете в основную таблицу свои правки, если возникают конфликты, процесс вливания отменяется, Вам предлогается решить конфликт, после чего Вы можете повторить вливание...

Вроде всё просто, а принцип уже давно изучен и уже используется очень удачно :)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38382986
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавторМеханизм работы клиент сервер конечно идентичен с веб, да и вообще по концепции.
ну попробуй заставить веб-сервер без запроса клиента прислать тебе данные!!!

Предлагаете топикстартеру освоить какой-нибудь Message_Queuing? Или пилить самому - ради опыта :) ?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383008
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga,
Давайте не будем передергивать))) топикстартер просто переползает с десктопа на веб. И опыт в практическом программировании в сумме зачастую перекрывает срок, с которого у некоторых участников данного форума начались проявляться вторичные половые признаки.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383014
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ЛаловBagaBaga,
Давайте не будем передергивать))) топикстартер просто переползает с десктопа на веб. И опыт в практическом программировании в сумме зачастую перекрывает срок, с которого у некоторых участников данного форума начались проявляться вторичные половые признаки.

Хм... :) А в чём Вы видите проблему такого перехода? :) Проблемы обычно бывают при переходе в обратную сторону... Ну разве только привыкнуть к структуре клиент-сервер, но в принципе, любое приложение работающее с основным ресурсом в сети работает по такому принципу... разница лишь в том, что браузер не удерживает соединение после окончания загрузки страницы (то есть по сути связь односторонняя, а для двусторонней уже приходится играться) :) Не знаю... это как создание gui под уже давно написанное консольное приложение )) Только приложение - это серверная часть, а gui - клинтская (js, html, css). Если у Вас огромный опыт разработки, Вам это должно быть как 2 пальца.... ;)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383015
авторПредлагаете топикстартеру освоить какой-нибудь Message_Queuing? Или пилить самому - ради опыта :) ?
хотел ему подкинуть идею о том, что если бы так легко переносились десктоп приложения с их контролами на веб, то, вероятнее всего, кто-то уже придумал бы необходимый ему (похожий на MS Access) грид! хотя, конечно может и запилить! ;)
авторИтак, ждём Ваш вариант :)
http://wiki.apache.org/couchdb/HTTP_Document_API почитай - зачем нужны "_revisions" ;)
авторВроде всё просто, а принцип уже давно изучен и уже используется очень удачно :)
уверен, что не тобою! это называется Recordset в десктопе! в веб всё это можно организовать даже на клиенте http://htmlbook.ru/html5/storage
Вопрос один - ЗАЧЕМ? ради того что бы затянуть на клиента 40к строк из таблицы БД и вкорячить в супер-грид???
кнопочка "обновить"
ПыСЫ - эта кнопочка уже есть во всех броузерах - "Reload current page"
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383021
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавторПредлагаете топикстартеру освоить какой-нибудь Message_Queuing? Или пилить самому - ради опыта :) ?
хотел ему подкинуть идею о том, что если бы так легко переносились десктоп приложения с их контролами на веб, то, вероятнее всего, кто-то уже придумал бы необходимый ему (похожий на MS Access) грид! хотя, конечно может и запилить! ;)
авторИтак, ждём Ваш вариант :)
http://wiki.apache.org/couchdb/HTTP_Document_API почитай - зачем нужны "_revisions" ;)
авторВроде всё просто, а принцип уже давно изучен и уже используется очень удачно :)
уверен, что не тобою! это называется Recordset в десктопе! в веб всё это можно организовать даже на клиенте http://htmlbook.ru/html5/storage
Вопрос один - ЗАЧЕМ? ради того что бы затянуть на клиента 40к строк из таблицы БД и вкорячить в супер-грид???
кнопочка "обновить"
ПыСЫ - эта кнопочка уже есть во всех броузерах - "Reload current page"


Ну так Вы просто прокоментили мой вариант, что да, это есть и это можно запилить... Но я ведь это и говорил... о чём Вы тогда спорили? :)

По поводу запилить логику на клиенте - интересно... а как клиент будет с сервера получать инфу о том, что были измененены определённые поля?... Вообщем, возможно конечно так можно сделать (думаю не без гемора), но я бы не стал... Пояснение в прошлом сообщении (сервер - логика, клиент - интерфейс)...

А я и не предлагал 40к строк тянуть... Фильтры для того и обсуждались, что бы не тянуть лишнего... и именно по той причине я и советовал фильтровать всё на уровне базы (и сортировать тоже)... То есть если нам нужна выборка из трёх полей, по значению одного из полей и отсортировано в порядке возрастания второго из полей, так мы в итоге именно это и дёрним из базы... и получится например 200 строк из трёх столбцов по возрастанию второго поля :)

Так о чём же Вы спорили, когда говорили, что фигня это всё (когда угнетали мой вариант )?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383026
Сергей Лалов
зря обижаешься! ты сам поднял планку - 14746406
тебе намекнули - 14748584 но ты упрямый, вместо изучения основ веб-а почему-то решил начать с коддинга web-UI!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383031
авторТак о чём же Вы спорили, когда говорили, что фигня это всё (когда угнетали мой вариант )?
какой вариант?! сохранить все сделанные пользователем изменения и одним махом отправить их в БД?
обрыв соединения?! три часа внесения изменений насмарку! неа ;)
авторА я и не предлагал 40к строк тянуть...
14755439 - за тебя предложили...

мне трудно с тобою разговаривать - ты всё это как-то нащупываешь\придумываешь, вместо того, что бы сесть и попробывать сделать!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383046
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, спасибо за ссылки! Вовсю штудирую. Спор на самом деле не о чем. Действительно сейчас смотрю что более понятней, фреймворки готовые действительно более проще к восприятию. Сделаю грид, выложу. Из плагинов пожалуй все таки заберу себе привязку календаря и маску ввода для типов данных ввода даты и чисел типа плавающих с точкой с запятой. Про отношения типа клиент сервер как смогу так и реализую на уровне строк, набора записей.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383076
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавторТак о чём же Вы спорили, когда говорили, что фигня это всё (когда угнетали мой вариант )?
какой вариант?! сохранить все сделанные пользователем изменения и одним махом отправить их в БД?
обрыв соединения?! три часа внесения изменений насмарку! неа ;)
авторА я и не предлагал 40к строк тянуть...
14755439 - за тебя предложили...

мне трудно с тобою разговаривать - ты всё это как-то нащупываешь\придумываешь, вместо того, что бы сесть и попробывать сделать!

Ну так я же предлагаю разные варианты, которые понятное дело могут иметь свои минусы, которые сам и описываю... Пожалуйста, хотите что бы при обрыве данные об изменениях не терялись - пишите не в сессию, а во временную таблицу :) Это не суть важно... об обрыве соединения как таковом не задумывался, так как обойти несложно....

Однако, по Вашим словам есть какой-то механизм, который позволяет избавиться от всех возможных минусов (такой себе идеал), однако Вы его не рассказываете... Что же мы тогда обсуждаем... То есть сейчас ощущение, что Вы не помочь стараетесь, а просто бракуете то, что я предлагаю, вместо того, что бы потритить 10 минут и написать сюда метод решения, который я и сам возможно признаю лучше своих и буду пользовать в будущем... Но пока ничего не написали, лучшие варианты решения вопроса остаются мои (пока они единственные, так что в любом случае лучшие )

Сергей Лалов, учитывая что Вы решили использовать готовые фреймворки для решения задачи, вопрос снимается? ))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383143
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрПожалуйста, хотите что бы при обрыве данные об изменениях не терялись - пишите не в сессию, а во временную таблицу :) Это не суть важно... об обрыве соединения как таковом не задумывался, так как обойти несложно....

обрыв соединения с БД в бэкенде, во временную не записалось =)

блин, для веба сходу можно придумать минимум 3 варианта, как не допустить коллизий. разной степени замороченности, но так или иначе решающих проблему.

просто интересно

а по поводу сервер сам пнет, если надо будет, то пнет клиента в ответ на его запрос =) каким образом, сам думай.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383152
Програмёр
мне просто интересно было посмотреть - делал ли ты в реальной жизни нечто подобное - исходя из того, что для тебя это "часик подумать"... оказалось - НЕТ!!! ничего подобного ты не делал, тк. придумываешь на ходу и думаешь уже не один час!
авторкоторый позволяет избавиться от всех возможных минусов
от всех возможных минусов избавиться помогает один способ - не притрагиваться к клавиатуре... ;)
1. на клиента тянется минимальное кол-во строк
2. эдит строки с нового запроса
3. _revisions

Karbafos
вот ты и подумай!!! http://en.wikipedia.org/wiki/Push_technology
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383177
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересно Програмёр
мне просто интересно было посмотреть - делал ли ты в реальной жизни нечто подобное - исходя из того, что для тебя это "часик подумать"... оказалось - НЕТ!!! ничего подобного ты не делал, тк. придумываешь на ходу и думаешь уже не один час!
авторкоторый позволяет избавиться от всех возможных минусов
от всех возможных минусов избавиться помогает один способ - не притрагиваться к клавиатуре... ;)
1. на клиента тянется минимальное кол-во строк
2. эдит строки с нового запроса
3. _revisions

Karbafos
вот ты и подумай!!! http://en.wikipedia.org/wiki/Push_technology

Ой, ладно не делал... Делал... revisions не использовал (сорри, читать лень :) там много, дак ещё и по-английски, приходится напрягаться)... По поводу push технологии - делал. Захватывал соединение сервером, так делал на сайте, который сейчас разрабатываю. Использовал в модуле работы с письмами... То есть, мне нужен был моментальный отклик с сервера о том, что кто-то отправил письмо, что бы 2 оператора не отправили одному и тому же человеку письма с одинаковым содержанием :)... Но, как я говорил, это неправильная структура работы. Потом мы доработали на сайте систему очереди обработки заказов и от захвата соединения сервером отказались (как ни как, а держать 20-30 открытых постоянно соединений - это не круть). Ведь теперь у нас работа операторов не пересекается... То есть, если один оператор работает с заказом, то другому этот заказ не покажится как приоритетный... А значит другой оператор не возьмёт заказ на обработку.

Насчёт думаю больше часа ))... Не думаю... Я на каждое письмо отвечаю сразу после прочтения, без раздумий... Вы мне указываете на проблему - я сразу пишу ответ как её избежать... Так что в общей сложности я думал минут наверное.... 10 :)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383179
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KarbafosПрограмёрПожалуйста, хотите что бы при обрыве данные об изменениях не терялись - пишите не в сессию, а во временную таблицу :) Это не суть важно... об обрыве соединения как таковом не задумывался, так как обойти несложно....

обрыв соединения с БД в бэкенде, во временную не записалось =)

блин, для веба сходу можно придумать минимум 3 варианта, как не допустить коллизий. разной степени замороченности, но так или иначе решающих проблему.

просто интересно

а по поводу сервер сам пнет, если надо будет, то пнет клиента в ответ на его запрос =) каким образом, сам думай.

Обрыв соединения во время работы с БД... данные не сохранились... какая разница? ))) То есть, Вам будет легче, если они не сохранятся в основную таблицу, чем если они же не сохранятся во временную? Не понимаю фишки ))
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383197
автор(как ни как, а держать 20-30 открытых постоянно соединений - это не круть)
а прыгать в гриде по 100к ячеек, вызывая при этом запрос сервера на версионность ячейки в текущий момент и, при нажатии ЭНТЕР посылать запрос на обновление данных - это круть!!!
авторОбрыв соединения во время работы с БД... данные не сохранились... какая разница? ))) То есть, Вам будет легче, если они не сохранятся в основную таблицу, чем если они же не сохранятся во временную? Не понимаю фишки ))
фишка в обновлении одной единственной строки (которая не обновилась при разрыве)! и обновлении большой таблицы данных, над исправлениями в которой ты потратил 3 часа!!!

ты как из ДС - кнопочка "обновить"!!! вроде что-то делал, а элементарных вещей незнаешь или "не задумывался"

...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383200
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавтор(как ни как, а держать 20-30 открытых постоянно соединений - это не круть)
а прыгать в гриде по 100к ячеек, вызывая при этом запрос сервера на версионность ячейки в текущий момент и, при нажатии ЭНТЕР посылать запрос на обновление данных - это круть!!!
авторОбрыв соединения во время работы с БД... данные не сохранились... какая разница? ))) То есть, Вам будет легче, если они не сохранятся в основную таблицу, чем если они же не сохранятся во временную? Не понимаю фишки ))
фишка в обновлении одной единственной строки (которая не обновилась при разрыве)! и обновлении большой таблицы данных, над исправлениями в которой ты потратил 3 часа!!!

ты как из ДС - кнопочка "обновить"!!! вроде что-то делал, а элементарных вещей незнаешь или "не задумывался"



1. Я не говорил, что при переходе между ячейками надо запрашивать версионность... А если даже и нужно было, удерживание соединения сервером - это то же самое... Сервер может ответить только единожды, после чего соединение закрывается (как помним в целях безопасности мы не можем создавать keep-alive соединения). Потому перезапрос будет происходить даже при push запросах.

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

3. За ссылки спасибо, чуть позже почитаю... Уехать надо )) Завтра утром постараюсь прокоментировать то, что вычитаю :)
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383209
авторТак лучше думаете?
14779585 - вот так я думаю... для веб вполне эффективно и нересурсоёмко!!!
автор При обрыве соединения мы получим ошибку, а изменения применены не будут никакие, после возобновления связи мы делаем перезапрос на запись и вносим все изменения одним разом....
год прошёл!!! все данные изменены уже сотню раз другими людьми - а мы перезаписали своими прошлогодними данными!!!
Уехать надо ))
СБ!!!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383211
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноот всех возможных минусов избавиться помогает один способ - не притрагиваться к клавиатуре... ;)
1. на клиента тянется минимальное кол-во строк
2. эдит строки с нового запроса
3. _revisions

Karbafos
вот ты и подумай!!! http://en.wikipedia.org/wiki/Push_technology

а что тут думать, делать надо! =)
можно и лонг поллинг заюзать, либо самодельного ТМ сделать(делается 1 раз для 99% задач)

к тому же, даже не используя все это, можно делать всякие проверки, на основе как раз ревизий + обмен служебной инфой до, во время и после сохранения, чтобы убедится в том, что данные лежат там, где нужно и как нужно.
можно одними ajax'ами обойтись, а модель поведения при конфликтах уже из области как больше нравится
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383226
Karbafos
ну и! в отличии от этого 14776823 оппонента - ты это делал!
ТС-у изначально рекомендовали не заморачиваться на UI а изучить основы веб, дабы не тратить время впустую!
ИМХО - он это понял, в процессе прочтения топа!
все счастливы, все довольны! что ещё?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383315
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто интересноавторТак лучше думаете?
14779585 - вот так я думаю... для веб вполне эффективно и нересурсоёмко!!!
автор При обрыве соединения мы получим ошибку, а изменения применены не будут никакие, после возобновления связи мы делаем перезапрос на запись и вносим все изменения одним разом....
год прошёл!!! все данные изменены уже сотню раз другими людьми - а мы перезаписали своими прошлогодними данными!!!
Уехать надо ))
СБ!!!


Значит об актуальности данных должна судить система? )) приколько ... То есть я выбрал ячейку, система знает, что она актуальна... я её меняю... система знает что данные актуальны... кто-то удаляет данное поле, клиентская часть (не важно как) узнаёт об изменении структуры... как ей поступить? Обламись поля нету, я его удаляю? :) или как? всёровно проверка будет только до и после... и если есть конфликт - он должен решаться...

Вообщем ладно, спор заходит в тупик, так как подходы у нас разные .... очень разные :)... приятно было пообщаться... удачи всем
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383567
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот кстати ребят, есть вопрос по поводу одной процедуры, который предложил skyANA , чтобы продемонстрировать юзабельность фокуса и вставки инпута в таблицу в контейнер span.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$('table').on('blur', 'td input', function(event) {
  var input = $(this), parent = input.parent();
        
  parent.html('<span tabindex="1">' + input.val() + '</span>');
});
      
$('table').on('focus', 'td span', function(event) {
  var span = $(this), parent = span.parent();
        
  parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
  parent.children('input').focus();
});




Все супер, скрипт отлично отрабатывает , с логикой работы разобрался. Но есть один неприятный момент. Что после где то шестого седьмого клика процедура перестает отвечать, и чтобы заново все заработало необходимо чуть чуть подождать и потыкать в свободное пространство документа. То есть перестает становиться юзабельной, пригодной для вставки таблица. Есть какой то лимит по выделяемой памяти на event события, или что? Такое ощущение что память забивается.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383612
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, что-то не замечаю такого поведения, что за браузер?

И перепишите сей говнокод: анонимные функции - плохо
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    $('table').on('blur', 'td input', onCellEnter);      
    $('table').on('focus', 'td span', onCellLeave);
    
    function onCellEnter(event) {
      var input = $(this), parent = input.parent();
        
      parent.html('<span tabindex="1">' + input.val() + '</span>');
    }
    
    function onCellLeave(event) {
      var span = $(this), parent = span.parent();
        
      parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
      parent.children('input').focus();
    }
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383628
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Ну по первому варианту он плохо отрабатывал в опере, хроме и эксплорере. То есть это не связано было видимо с браузером. Смысл в следующем, была таблица 7 полей, 5 строк и я поэксперементировал с вашим первоначальным вбросом. Если понажимать на ячейки курсором, то где то с седьмого клика вставка инпута прекращается и ячейки перестают реагировать на вход.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383663
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, в моём варианте нет обработки нажатия курсорных клавиш. И нет, описываемых Вами проблем в Хроме.
Может покажете свой код?
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383679
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Я не имею в виду событий на стрелки. Ваш имею в виду именно тот который про фокус. Сейчас доберусь до стационарного компа , покажу.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38383711
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
<!DOCTYPE HTML>
<html>
<head>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  <style>
    table {
      border-collapse: collapse;
    }
      
    th, td {
      border: 1px solid gray;
    }
      
    td span, td input{
      border: none;
      display: block;
      margin: 0;
      padding: 0;
      outline: none;
      overflow: hidden;
      width: 148px;
    }
  </style>
</head>
<body>
  <table>
    <tr>
      <th>Container</th>
      <th>Forwarder Name</th>
      <th>ArrivingDate</th>
      <th>LeavingDate</th>
      <th>WarehouseName</th>
      
    </tr>
    <tr>
      <td><span tabindex="1">MSKU5214574</span></td>
      <td><span tabindex="1">SEA LINE</span></td>
      <td><span tabindex="1">29.09.2013</span></td>
      <td><span tabindex="1">05.10.2013</span></td>
      <td><span tabindex="1">DOMODEDOVO</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">MSCU5782361</span></td>
      <td><span tabindex="1">FREIGHT BUILDER</span></td>
      <td><span tabindex="1">19.09.2013</span></td>
      <td><span tabindex="1">12.10.2013</span></td>
      <td><span tabindex="1">KAZAN</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">MSCU5782361</span></td>
      <td><span tabindex="1">WORLD CARRIER</span></td>
      <td><span tabindex="1">12.08.2013</span></td>
      <td><span tabindex="1">01.10.2013</span></td>
      <td><span tabindex="1">ROSTOV</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">TRLU5782361</span></td>
      <td><span tabindex="1">FORWARDER №1</span></td>
      <td><span tabindex="1">25.08.2013</span></td>
      <td><span tabindex="1">16.10.2013</span></td>
      <td><span tabindex="1">SAINT PETERSBURG</span></td>
    </tr>
  </table>
  <script>
    $('td').on('blur', 'input', function(event) {
      var input = $(this), parent = input.parent();
        
      parent.html('<span tabindex="1">' + input.val() + '</span>');
    });
      
    $('td').on('focus', 'span', function(event) {
      var span = $(this), parent = span.parent();
        
      parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
      parent.children('input').focus();
    });
  </script>
</body>
</html>




почему то если долго гонять иногда при выходе из ячейки остается вставленный инпут. и иногда залипает клик, и при нажатии на ячейку новую инпут наоборот не вставляется.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38384221
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почистил кэш, все заработало. Там в более раннем коде стояли ссылки на другие версии Jquery. Пардоньте!
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38399276
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, в продолжении текущей ветки хочу задать вопрос SkyAna.
Проанализировал коды ввода и отмены фокуса. Проанализировал коды перемещения по таблицы по стрелкам клавиатуры.
Создал и осмыслил по последней процедуре сам некое подобие функции перемещения:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
<script type="text/javascript">
$(document).ready(function(){
    
 $('table').on('focus', 'td span', onCellEnter);    
$('table').on('blur', 'td input', onCellLeave); 
 $('table').on('keydown', 'input', navigateKeys);    
      
    function onCellEnter(event) {
      var span = $(this), parent = span.parent(); 
      parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
      parent.children('input').focus();
    }
    
    function onCellLeave(event) {
      var input = $(this), parent = input.parent();
      parent.html('<span tabindex="1">' + input.val() + '</span>');
    }
   
   function navigateKeys(event){
   
   var keyEvent=event.which;
   
   switch(keyEvent){
   
    case 37:
    // влево
    var tdIndex=$(this).parent('td').index('td');
    $('td').eq(tdIndex-1).children('span').focus();
    break;
    
    case 39:
    //вправо
    var tdIndex=$(this).parent('td').index('td');
    $('td').eq(tdIndex+1).children('span').focus();
    
    break;
    
    case 40:
 // вниз
      var tdIndex=$(this).parent('td').index('td');
     var trIndex=$(this).parent('tr').index('tr');
     $('tr').eq(tr-1).find('td').eq(td).children('span').focus();   
      break;
    
     case 38:
   //вверх

    break;
   }
   }
      
 
});      

</script>



С реализацией горизонтального перемещения влево вправо при помощи стрелок клавиатуры разобрался. С индексами тега <td> проблем нет, они в наборе по умолчанию принимают каждый приращение на 1. Зацепиться с помощью eq() и find() не составило сложности.

А вот с кнопками вниз case 40: и вверх case 38: возникло небольшое затруднение. Индекс у строки <tr> в таблице один на всю таблицу?
Помогите пожалст, немного не дожал вертикальные перемещения. Хочу именно по своему примеру.

Вот этот кусок срабатывает некорректно:
Код: javascript
1.
2.
3.
4.
5.
6.
case 40:
 // вниз
      var tdIndex=$(this).parent('td').index('td');
     var trIndex=$(this).parent('tr').index('tr');
     $('tr').eq(tr-1).find('td').eq(td).children('span').focus();   
      break;



Перемещение указателя идет один раз вниз,а последующее уже не происходит.
...
Рейтинг: 0 / 0
небольшой вопрос по краткости-сестре таланта)
    #38399467
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Я конечно не знаток jQuery, но как-то так:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
<!DOCTYPE HTML>
<html>
<head>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
  <style>
    table {
      border-collapse: collapse;
    }
      
    th, td {
      border: 1px solid gray;
    }
      
    td span, td input{
      border: none;
      display: block;
      margin: 0;
      padding: 0;
      outline: none;
      overflow: hidden;
      width: 148px;
    }
  </style>
</head>
<body>
  <table>
    <tr>
      <th>Tab - вперёд</th>
      <th>Shift + Tab - назад</th>
    </tr>
    <tr>
      <td><span tabindex="1">11223</span></td>
      <td><span tabindex="1">34455</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">66778</span></td>
      <td><span tabindex="1">99001</span></td>
    </tr>
    <tr>
      <td><span tabindex="1">12233</span></td>
      <td><span tabindex="1">44556</span></td>
    </tr>
  </table>
  <script>
    $('table').on('blur', 'td input', onCellEnter);      
    $('table').on('focus', 'td span', onCellLeave);
    $('table').on('keydown', 'td input', onInputKeyDown);
    
    function onCellEnter(event) {
      var input = $(this), parent = input.parent();
        
      parent.html('<span tabindex="1">' + input.val() + '</span>');
    }
    
    function onCellLeave(event) {
      var span = $(this), parent = span.parent();
        
      parent.html('<input tabindex="1" type="text" value="' + span.text() + '"/>');
      parent.children('input').focus();
    }
    
    function onInputKeyDown(event) {      
      var cell = $(this).closest('td'), row = cell.closest('tr'),
          cellIndex = row.children('td').index(cell);
   
      switch (event.which) {
        // Left
        case 37:
          cell = cell.prev('td');
          break;
        // Up
        case 38:
          cell = row.prev('tr').children('td').eq(cellIndex);
          break;
        // Right
        case 39:
          cell = cell.next('td');
          break;
        // Down
        case 40:                    
          cell = row.next('tr').children('td').eq(cellIndex);
          break;
      }
      
      cell.children('span').focus()
    }
  </script>
</body>
</html>
...
Рейтинг: 0 / 0
113 сообщений из 113, показаны все 5 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / небольшой вопрос по краткости-сестре таланта)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]