Модифицировал скрипт. Теперь при щелчке на аву пнг перетаскивается. Тебе осталось только сделать кнопку "Обрезать", при щелчке на которую будет срабатывать пхп скрипт обрезания картинки по координатам. Code: <html> <head> <script> function gebi(el) { return document.getElementById(el); } // функция вычисляет координаты объекта function pos(el) { var r = { x: el.offsetLeft, y: el.offsetTop }; if (el.offsetParent) { var tmp = pos(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; } // устанавливаем координаты для пнг картинки function setPos() { // вычислим координаты нашей авы var p=pos(gebi('kn')); // переместим картинку на эти же координаты gebi('kv').style.left=p.x; gebi('kv').style.top=p.y; // показываем ее gebi('kv').style.display='block'; } // положение курсора function getCursorPosition(e) { var IE = document.all?true:false; var tempX = 0; var tempY = 0; if (IE) { tempX = event.clientX + document.body.scrollLeft; tempY = event.clientY + document.body.scrollTop; } else { tempX = e.pageX; tempY = e.pageY;} if (tempX < 0) {tempX = 0;} if (tempY < 0) {tempY = 0;} return {"x":tempX, "y":tempY}; } // функция перемещает пнг при событии онклик на картинке function newsetpng(cur) { // вычислим новые координаты пнг картинки var left=cur.x-gebi('kv').offsetWidth/2; var top=cur.y-gebi('kv').offsetHeight/2; // если новые координаты вылазят за пределы авы - сдвигаем ее максимум к краю var p=pos(gebi('kn')); if (left<p.x) left=p.x; if (top<p.y) top=p.y; if (left>p.x+gebi('kn').offsetWidth-gebi('kv').offsetWidth) left=p.x+gebi('kn').offsetWidth-gebi('kv').offsetWidth; if (top>p.y+gebi('kn').offsetHeight-gebi('kv').offsetHeight) top=p.y+gebi('kn').offsetHeight-gebi('kv').offsetHeight; // применяем координаты gebi('kv').style.left=left; gebi('kv').style.top=top; } </script> </head> <body onLoad='setPos();'> <img src='img/avafon.png' style='display: none; position: absolute; top: 0px; left: 0px;' id='kv' onClick='var cur=getCursorPosition(event); newsetpng(cur);'> Content Content Content Content<br> Content Content Content Content<img src='img/ava.jpg' id='kn' onClick='var cur=getCursorPosition(event); newsetpng(cur);'> </body> </html>
Вырежи строку Code: if (event.button==0) moveEnd(); осталась из другого скрипта у меня когда функцию копипастил =)
API - интерфейс для программирования приложений. PHP обеспечивает средства для реализации собственных API или использования других (например WinAPI с помощью соответствующего расширения). Поясни, что ты имел в виду под API в PHP.
почитай: http://www.webmakerslounge.com/useful-scripts/png-ie-fix/ ссылка на htc: http://www.webmakerslounge.com/files/iepngfix.htc на blank.gif: http://www.webmakerslounge.com/files/blank.gif
Встала такая задача нужно написать небольшой скриптик который будет взависимоти от уровня доступа пользователя разрешать ему доступ к редактированию конкретных разделов либо наоброт запрещать. Такой вопрос...как это лучше реализовать? пока алогритм такой пользователь логинится,в сесиии деожу его уровень доступа,на кажой паге которая нужна проверяю нужный уровень доступа либо да либо нах ) безопасно ли хранить в сесии? есть другой какойнить способ? может там класс писать или функцию спс.
Если узеры храняться в муслке,просто добавь ячейку с названием скажем "Group" или что-то в этом роде и в дальнейшем при заходе на определенную страницу берешь оттуда его уровень доступа и пускаешь или наоборот не пускаешь...
если нет http-авторизации, неважно, где ты будешь хранить уровень доступа, в сессии напрямую или каждый раз брать из базы (что на мой взгляд гораздо хуже, каждый F5 - новый запрос к базе, лишняя нагрузка). Если перехватят куки - так или иначе почитают, что скрыто. Независимо от метода проверки. Вывод - конечно в сессии проще хранить, или в любом другом параметре кукисов. Другое дело просто хранить можно так, чтобы не было понятно, что эта цыферька означает. Хотя и это тоже при перехвате кук никакого особого значения уже иметь не будет. Главное админку грамотно запрятать и защитить (исключительно http-авторизация, через .htaccess и .htpasswd
Юзай принцип ACL (Access Control List). На каждое атомарное действие (view/insert/update/delete) над каждым объектом задай уровни доступа, которые будут опираться на GroupID юзера и храниться в базе. Затем одним простым запросом вытаскивай всю таблицу ACL и сверяй права. Можешь реализовать кэширование, если напрягает постоянное обращение к базе. http://ru.wikipedia.org/wiki/ACL - оно. Применяй эту концепцию к ООП. UPD: Данный подход позволяет в дальшейшем легко управлять правами групп через админский интерфейс, не редактируя исходники. UPD2: Надеюсь ты в своей CMS используешь ООП, в противном случае я тебе сочувствую.
Всё верно говоришь, только я бы не стал задавать уровни доступа над каждым объектом - слишком много мета-описания для однотипных объектов... Слишком этом громоздко в каждой странице проверять права доступа и т.д.). Лучше хранить уровни доступа для групп объектов - ну там статьи, новости, файлы, профили пользователей и т.д., т.е. права определяют не отдельные объекты, а группу однотипных объектов.
данные о правах PHP: $query = "SELECT users.user_id,users.right_id,rights.* FROM users,rights WHERE users.right_id=rights.right_id and login='$name'"; $res = mysql_query($query) or trigger_error(mysql_error().$query); if ($row = mysql_fetch_assoc($res)) { $_SESSION['user_id'] = $row['user_id']; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; $_SESSION['priv']=$row['right_id']; } в header.inc.php прописываю конкретно какие права у юзера PHP: mysql_connect('localhost','calendar','123123') OR DIE("Не могу создать соединение "); mysql_select_db('smart_calendar') or die(mysql_error()); $query = "SELECT * FROM `rights` where right_id='$_SESSION[priv]'"; $res=mysql_query($query) or die(mysql_error()); while($row=mysql_fetch_array($res)){ $_SESSION['rights']=$row['rights']; $_SESSION['holidays']=$row['holidays']; $_SESSION['structure']=$row['structure']; $_SESSION['users']=$row['users']; а далее на каждой странице идет проверка PHP: if($_SESSION['holidays']=='1'){ это вообще правильно все? З.Ы. это не кмска )