Из БД в <img> а их розмещаем по слоям
Товарищи программисты, прошу Вас о помощи!
Есть бд, в ней допустим 10 строк...все данные перегоняются в 10 картинок с им принадлежащими данными которые беру из БД ($all) Все выводит хорошо, но нужно выводить картинки ($all) так чтобы они были по своим слоям..т.е если $y первого id равен 100 а $y второго id равен 110, то id1 выводит в $isbnTextq3 = $dom->createTextNode($all); (смотреть ниже), а id2 выводит в $isbnTextq1...и если id1.y = id2.y то в $isbnTextq2. Тоесть есть три слоя ($one, $two и $three) и нужно все картинки автоматически роспихивать по своим слоям...и причем чтобы все картинки брали участие в сравнении Y... Очень прошу помочь... ... //гребем данные из БД $mybase = mysql_query("SELECT * FROM customers WHERE id!='$pid'"); while($db = mysql_fetch_array($mybase)) { $id = $db['id']; $name = $db['name']; $x = $db['x']; $y = $db['y']; $loc = $db['loc']; //запихиваем данные из строк в <img> $all = "<img src='$loc' width='50' height='50' id='$name' name='$name' style='position: absolute; left:$x; top:$y'></img>"; //слой первый $isbnTextq1 = $dom->createTextNode($all); $one->appendChild($isbnTextq1); //слой второй $isbnTextq2 = $dom->createTextNode($all); $two->appendChild($isbnTextq2); //и нижний слой $isbnTextq3 = $dom->createTextNode($all); $three->appendChild($isbnTextq3); } ... |
((please help!
|
выбери все элементы и отсортируй их по y координате потом просто цилклом примени элементы. я так понял?
|
ну да...только если добавляется новый...11-й элемент, то он тоже принемает учатсие в сортировке автоматически)))
|
как этот код описать(((???
|
$mybase = mysql_query("SELECT * FROM customers WHERE id!='$pid'"); $y = array(); while($db = mysql_fetch_assoc($mybase)) $y[$db['y']] = $db; ksort($y); foreach ($y as $_y=>$db){ //запихиваем данные из строк в <img> $all = "<img src='{$db['loc']}' width='50' height='50' id='{$db['name']}' name='{$db['name']}' style='position: absolute; left:{$db['x']}; top:$_y'></img>"; //слой $isbnTextq1 = $dom->createTextNode($all); $one->appendChild($isbnTextq1); } |
:blink: хм, интрестинг) сейчас попробую
|
СПАСИБО ОГРОМНОЕ ТЕБЕ МИРНЫЙ КОДЕР))))
О_о работает, но они все в одном слое...надо чтобы на три слоя (см.ниже) розбивало.. а сейчас оно просто в одном сортирует какой обьект выше а какой иже) //слой первый $isbnTextq1 = $dom->createTextNode($all); $one->appendChild($isbnTextq1); //слой второй $isbnTextq2 = $dom->createTextNode($all); $two->appendChild($isbnTextq2); //и нижний слой $isbnTextq3 = $dom->createTextNode($all); $three->appendChild($isbnTextq3); |
непойму каким мокаром распределять элементы по слоям. обьясни доходчивей.
|
Вот смотри, есть три слоя (которые читает AJAX код...а этот php создает xml)...верхний слой называется -> "isbnTextq1" (картинки отобрадает над всеми остальными), средний -> "isbnTextq2" (картинки которые по y равны меж собой розмещаются здесь), нижний -> "isbnTextq3" (картинка в этом слое розмещается под всеми слоями (картинками в нем)).
//слой первый $isbnTextq1 = $dom->createTextNode($all); $one->appendChild($isbnTextq1); //слой второй $isbnTextq2 = $dom->createTextNode($all); $two->appendChild($isbnTextq2); //и нижний слой $isbnTextq3 = $dom->createTextNode($all); $three->appendChild($isbnTextq3); |
т.е. в первом и последнем слое размещаются по одной картинке ? ед что понял что во втором слое находятся картинки с равными у а какие находятся в первом и третем... как их разделять? от тех что равны между собой y координатой?
Короче пример: есть y=1,1,2,3,4,4,5,5,6,6,7,8,9,10 как распределить эти цифры в слои: 1 слой: 2 слой: 3 слой: напиши какие цифры додны быть в каком слое. цифры с потолка взял можешь привести свои. |
Описываю полностью:
Есть БД, в ней табличка customers и objects. Из них скрипт достает данные и делает из данных картинки которые розмещаются в слоях (элементах DOM см.ниже $one, two и three), в средний слой и только в средний выводятся картинки из таблички objects и они в слое $two находятся всегда! Но если у картинки из этого слоя y больше чем у другой то она стоит впереди другой))) тоесть выводиться познее и соответственно она будет над другой картинкой с меншим Y..также и в customers картинки меж собой работают....Но те картинки, которые выводит из БД таблички customers должны перемещатся либо в слой $one (отображает в нем картинки выше картинок из среднего и трейтего слоя) либо в трейтий слой ($three)...в зависимости от Y object и Y customers картинок, и все картинки из customers тоже меж собой работают и меряют Y и помещаются в слои.....тоесть еть допустим такой набор данных в БД: |objects| |id|img |y |x | |1|1.gif|100|200| |2|1.gif|300|300| |3|1.gif|100|700| |customers| |id|loc |y |x | |4|2.gif|50 |200| |5|2.gif|50 |400| |6|2.gif|500|700| |7|2.gif|500|300| |8|2.gif|200|600| |9|2.gif|300|600| Картинки в слоях код розмещает так (все картинки соответственно id в базе здесь опишу): <one> 4, 5, </one> <two> 1, 3, 2 </two> <three> 8, 9, 6, 7 </three> вобщемь...вся картина нынешней ситуации: ... //создаем dom $dom = new DOMDocument(); //в нем главный каталог $response = $dom->createElement('response'); $dom->appendChild($response); //в response делаем три слоя (one, two, three) $one = $dom->createElement('one'); $response->appendChild($one); $two = $dom->createElement('two'); $response->appendChild($two); $three = $dom->createElement('three'); $response->appendChild($three); //загружаем картинки из бд в средний слой $myobj = mysql_query("SELECT * FROM objects"); while($obj = mysql_fetch_array($myobj)) { $imgobj = $obj['img']; $yobj = $obj['y']; $xobj = $obj['x']; $allobj = "<img src='$locp' style='position: absolute; left:$xobj; top:$yobj'></img>"; //пыжуем картинки в средний (второй) слой... $Objects = $dom->createTextNode($allobj); $two->appendChild($Objects); } $mybase = mysql_query("SELECT * FROM customers"); while($db = mysql_fetch_array($mybase)) { $id = $db['id']; $x = $db['x']; $y = $db['y']; $loc = $db['loc']; $all = "<img src='$loc' id='$id' style='position: absolute; left:$x; top:$y'></img>"; //пыжуем картинки в первый слой...но все картинки будут всегда над средним слоем $AllUser = $dom->createTextNode($all); $one->appendChild($AllUser); ... |
если что не понятно - спрашивай, а то я может чет не так написал...ибо у меня уже с этим кодом еще и в такое время...голова квадратная! Ночь не спал...не могу решить этот вопрос((( Пожалуйста помогите!
|
т.е. я так понял: во втором слое все картинки из objects. в первом все картинки из customers у которых y < всех Y из 2го слоя, в третьем соответсвенно все из customers, у которых y >= всех y из 2го слоя?
так я понял? или если custemers.y == одному из objects.y то его перекидывать во 2ой слой? |
Вот так:
во втором слое все картинки из objects. в первом все картинки из customers у которых y < всех Y из 2го слоя, в третьем соответсвенно все из customers, у которых y >= всех y из 2го слоя и во второй не надо ниче кидать) |
$mybase = mysql_query("SELECT * FROM objects WHERE id!='$pid' ORDER BY y ASC"); $min2y=$max2y=null; while($db = mysql_fetch_assoc($mybase)) { $y[$db['y']] = $db; $allobj = "<img src='{$db['img']}' style='position: absolute; left:{$db['x']}; top:{$db['y'}'></img>"; //пыжуем картинки в средний (второй) слой... $Objects = $dom->createTextNode($allobj); $two->appendChild($Objects); $max2y = $max2y!==null ? max($max2y,$db['y']) : $db['y']; $min2y = $min2y!==null ? min($min2y,$db['y']) : $db['y']; } $mybase = mysql_query("SELECT * FROM customers WHERE id!='$pid' ORDER BY y ASC"); while($db = mysql_fetch_assoc($mybase)) { //запихиваем данные из строк в <img> $all = "<img src='{$db['loc']}' width='50' height='50' id='{$db['name']}' name='{$db['name']}' style='position: absolute; left:{$db['x']}; top:{$db['y']}'></img>"; $isbnTextq = $dom->createTextNode($all); $lay = $db['y']<$min2y ? $one:$three; $lay->appendChild($isbnTextq); } А что если customers.y > min2y и customers.y <max2y ? я сделал что если не меньше всех во втором слое, то кидаем в слой 3 в не зависимости от того находится ли customers.y в промежутке слоя 2. |
В one не добавляется ничего совсем...хотя должно если в БД посмотреть... Но в two и three все работает чудесно!!! И за это тебе огромнийшое СПАСИБО)!:yes:
|
вот так сейчас все отображается:( :
|
исправил прошлый пост. попробуй ща должно все ок.
дык тебе еще каждый слой надо по y сортировать?? |
та да, customers и object обьекты меж собой y меряют...надо не по max и min обьектов..а каждого отдельно взятого...как customers'ы меж собой работают..так и все обьекты с обеих таблиц должны меж собой работать((
Изменил код, ну на max и min работет... обьекты и в one и d three заносятся... |
ну? и что еще надо? в первом слое все что меньше всех objects.y во втором все objects в третьем все остальные customers. все три слоя сортируются по y.
может еще надо приоритет вставить ? например, customers должны быть выше objects если у них Y равны в не зависимости от слоя? |
если у customers Y обьекта меньше чем у objects Y обьекта, то customers обьект (картинка) находиться под objects обьектом) а если какой-то другой обьект в customers выше по игрику чем objects.y обьект то над обьектом из objects
|
http://doobiz.co.cc/lamer.php погляди сюда...отак оно сейчас выглядит)
|
Ну допустим рисунок с числом 1 и все кружки это customers и рисунок с числом 1 быть накрыт рисунков с objects...даже двумя рисунками, те что возле него но по y они его выше. Рисунок с цифрой 2 должен быть ниже рисунка из objects....а там все наоборот..:help:
|
Задача изначально неправильно пошла решением. Тебе тут надо всего один слой. и в нем должны быть расположены обьекты отсортированных по y причем object'ы имеют меньший приоритет если у objects.y==customers.y следовательно у тя в любом случае будут обьекты надо customers если customers.y < objects.y и всегда objects ниже customers, если customers.y>=objects.y при чем при равных "y" должны сначала следовать все обьеты потом все customers
так привожу пример по y: буква - тип, цифра - значение y objects: o1 o2 o2 o3 o3 o4 o5 o6 o10 o15 o15 o16 o17 customers: с2 с3 с4 с4 с5 с6 с6 с7 с10 с10 с15 с16 с17 с17 результат: o1 o2 o2 c2 o3 o3 o4 c4 c4 o5 c5 o6 c6 c6 c7 o10 c10 c10 o15 c15 o16 c16 o17 c17 c17 т.е. o.y<=c.y обьект раньше создается равенствующему customers п.с. я так понял это чето типо игры? и ты хочешь показать псевдо 3d ? |
Три раза прочел и не могу собрать это в голове...только с пар приехал...башка квадратная....да нет, не игра...хотя в каком-то смысле и игрой назвать можно....вид там isometric)))) будут персональные рисунки...вообще анимации должны будут быть пожжей , как личные окошки...ну суть уже не в этом я уже основную задачу отложил((( (основную цель обьясню пожжей) хочу полностью это понять и решить этот вопрос...и ты мне с этим оч оч оч помогаешь, спасибо..
|
Дык а че здесь менять надо? Допустим все впихнем в one слой...
как-то так чтоли?:blink: $mybase = mysql_query("SELECT * FROM objects ORDER BY y ASC"); while($db = mysql_fetch_assoc($mybase)) { $y[$db['y']] = $db; $allobj = "<img src='{$db['img']}' style='position: absolute; left:{$db['x']}; top:{$db['y']}'></img>"; $Objects = $dom->createTextNode($allobj); $one->appendChild($Objects); } $mybases = mysql_query("SELECT * FROM customers ORDER BY y ASC"); while($dbs = mysql_fetch_assoc($mybases)) { $all = "<img src='{$dbs['loc']}' width='50' height='50' id='{$dbs['id']}' name='{$dbs['name']}' style='position: absolute; left:{$dbs['x']}; top:{$dbs['y']}'></img>"; $Cust = $dom->createTextNode($all); $one->appendChild($Cust); } |
:(
|
ты мне лучше скажи. objects могут быть ниже ТОЛЬКО если customers.y>=objects.y ?
или customers всегда выше objects вне зависимости от их "y" ? другими словами: в каких случаях objects могут накрывать собой customers ? и наоборот? ходим с тобой вокруг да около... |
if (customers.y>=objects.y) { customers обьект накрывает собой object картинку}
if (customers.y<=objects.y) { object обьект накрывает собой customers картинку} надо не max и min Y всех object'ов сравневать с customers а все картинки object'ов Тоесть есть один кустомер накрывает какой-то обжект то в то же время какойто кустомер может быть под обжектом.... так норм обьяснил? иль может подробней росписать? я наверное скоро ноги протяну за этим скриптом(((( от недосыпания) |
$mybase = mysql_query("(SELECT img, x, y,name,0 AS t FROM objects WHERE id!='$pid') UNION (SELECT loc as img,x,y,name,1 AS t FROM customers WHERE id!='$pid') ORDER BY y ASC,t ASC"); while($db = mysql_fetch_assoc($mybase)) { //запихиваем данные из строк в <img> $all = "<img src='{$db['img']}' width='50' height='50' id='{$db['name']}' name='{$db['name']}' style='position: absolute; left:{$db['x']}; top:{$db['y']}'></img>"; $isbnTextq = $dom->createTextNode($all); $one->appendChild($isbnTextq); } Вопрос: есть ли в objects столец name? если да то все ок. если нет то надо будет переделать запрос... |
нету( лучше наверное по id....и в objects будет еще куча столбцов которые нужно будет выводить))
Вроде и работает но еще очень плужит...http://doobiz.co.cc/lamer.php - посмотри, сделал управление customer'сами кнопками WASD...введи в поле число от 1 до 5 - id кустомерсов....попередвигай их и ты все увидишь..... вот так розмещаются картинки: О_о и этот код не работает в IE! ))) |
переделал немного прошлый пост. попробуй ща.
|
$mybase = mysql_query("(SELECT img,x,y,id,t=0 FROM objects) UNION (SELECT loc as img,x,y,id,t=1 FROM customers) ORDER BY y ASC,t ASC"); while($db = mysql_fetch_assoc($mybase)) { //************************* $all = "<img src='{$db['img']}' width='50' height='50' id='{$db['id']}' name='{$db['name']}' style='position: absolute; left:{$db['x']}; top:{$db['y']}'></img>"; $Display = $dom->createTextNode($all); $one->appendChild($Display); } :( не работает...ошибка не может найти в базе t я так понял Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource on line 29 29: while($db = mysql_fetch_assoc($mybase)) { Что это за t вообще? |
я вродебы понял....оно меряет y верха картинки....надо задавать y + height этой картинки
тогда на пол-картинки objecta нельзя будет зайти... |
аа блин голова уже не варит. изменил пост. попробуй ща.
|
:-? извини за то, что напрягаю...сейчас попробую
|
да вродь все работает но оно меряет не по y max именно отдельного рисунка а читает просто его у тоесть верхнюю точку рисунка....от посмотри на doobiz.co.cc/lamer.php там черный прямоугольник....он должен быть перед тем ящиком..но все наоборот а если написать как-то
y+this.img.height ))) то все будет гуд....т.е надо чтобы игрик брало внизу рисунка но как это так оформить да правильно росписать...я не могу понять...да я и не знаю наверное( |
для этого надо знать высоту рисунка... на сервере или можно например в клиенте корректировать координаты... но это нагрузка на клиент
= |
т.е мне надо чтобы в БД в записях были записаны высота и ширина рисунка???(( хотелось бы автоматизма добится какого-то..
а если в клиенте (js) при приеме данных как-то фасовать картинки...так возможно? ну написал в БД w и h ....высота и ширина, так пашет: $mybase = mysql_query("(SELECT img,x,y,w,h,id,0 AS t FROM objects) UNION (SELECT img,x,y,w,h,id,1 AS t FROM customers) ORDER BY y+h ASC,t ASC"); while($db = mysql_fetch_assoc($mybase)) { $all = "<img src='{$db['img']}' width='{$db['w']}' height='{$db['h']}' id='{$db['id']}' style='position: absolute; left:{$db['x']}; top:{$db['y']}'></img>"; $Display = $dom->createTextNode($all); $one->appendChild($Display); } |
Часовой пояс GMT +3, время: 04:31. |