Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Вопросы по сайту (http://forum.oszone.net/showthread.php?t=85056)

pasha4ur 06-06-2007 17:38 596034

Вопросы по сайту
 
Всем привет. ;)
Первый раз увидел этот раздел и был приятно удивлен (даже очень), потому что последние месяца 4 я этим стал заниматься/учить.
Я делаю сайт на диплом в техникуме (почти сделал) и есть пару вопросов:
вот они

Vlad Drakula 06-06-2007 17:44 596039

pasha4ur
давать ссылки с вопросам на другой форум вроде запрещено!

pasha4ur 06-06-2007 18:19 596050

Ок. Перепечатаем:( пару постов.
Цитата:

<?php
$mes="$mestext";
if($mes=="")
{
echo("<div align=center><p class=стиль5><font color=ff0000>Ваше сообщение не отправлено!</font></p><p class=стиль5>Введите текст сообщения.</p></div>");
}
else
{
echo ("<div align='center'><p class='стиль5'>Спасибо!<br>Ваше сообщение отправлено.</p></div>");
mail("…..mail.ru", "OnLine-Сообщение", $mes);
echo ("<table width=300 align=center border=0 cellpadding=5 cellspacing=4><tr><td align=center background=../assets/bg_1.gif><font face=Verdana color=#000000 size=2><b>Текст сообщения</b></font></td></tr>
<tr><td bgcolor=#CCFFFF><p class=стиль3 align=justify>"."$mes"."</p></td></tr></table>");
}
?>
Запускал все через Денвер, Интернет был включен. Почему письма не приходят?
P.S. Своё е-мейл скрыл, чтоб спамеры не заваляли письмами

Цитата:

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

Coutty 06-06-2007 18:38 596060

Цитата:

Почему письма не приходят?
В составе Денвера есть sendmail? Без него не должны ходить письма. Посмотри в логах апача что пишут.

По таблице - можно пример посмотреть? Просто я мог бы предложить такой вариант, но вдруг не устроит. Там на CSS и без таблицы, хотя немного похоже ~
Vlad Drakula, не ругай мой поганенький сайтец лишний раз)))

pasha4ur 06-06-2007 19:00 596072

Цитата:

В составе Денвера есть sendmail? Без него не должны ходить письма. Посмотри в логах апача что пишут.
Знал бы я что да как смотреть. Я в дебри Апача и Денвера пока еще не лазил.
Цитата:

По таблице - можно пример посмотреть?
На счет смены цветов ячейки сделал так.
Стили:
Код:

#tab:hover { background:#FF6666}
#tab:link,a:visited {background:#C8E6F9}

Код:
Код:

<table align="center" width="350" cellpadding="4" border="0" cellspacing="2" bordercolor="#FFFFFF" >
          <tr id="tab" bgcolor="#C8E6F9"><td  width="190" class="стиль3" >Производитель процессора</td>
          <td align="left"><select class="стиль3" name="CPU1"><option value="AMD" selected="selected">AMD</option>
          <option value="Intel">Intel</option></select></td></tr>
          <tr id="tab" bgcolor="#C8E6F9"><td class="стиль3">Производитель чипа видеокарты</td>
          <td  align="left"><select class="стиль3" name="GPU1"><option value="AMD-ATI Radeon" selected="selected">AMD-ATI Radeon</option>
          <option value="nVidia GeForce">nVidia GeForce</option></select></td></tr><tr><td colspan="2" align="center"><input type="submit" value="Ok"></td></tr></table>

Работает в ФаерФоксе и Опере. Как сделать, чтоб в Интернет Эксплоуере работало. Диплом ведь на нем принимают

Coutty 06-06-2007 19:06 596079

Цитата:

Знал бы я что да как смотреть.
Файл конфигурации - httpd.conf. В нём есть строчка "Error Log имя_файла". Вот в этом файле, который указан и надо бы посмотреть.
А sendmail можно просто поиском по папке найти, если есть там он))

По таблице пока не даю комментариев. Некогда проверять (тем более в IE=( )
Сходу разве только: попробуй в стиле вместо background написать background-color. Вдруг заработает?))

pasha4ur 06-06-2007 20:31 596100

Цитата:

Сходу разве только: попробуй в стиле вместо background написать background-color. Вдруг заработает?))
Не помогло :(

mar 06-06-2007 20:51 596113

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

pasha4ur 07-06-2007 11:19 596309

Да действительно есть такая папка :)
Там были письма
Код:

X-Sendmail-Cmdline: sendmail_stub.pl -t -i 
To: pasha4ur@mail.ru 
Subject: OnLine-заказ   
AMD\ Сокет процессора-939\ Процессор-AMD Athlon 64 3200+ Tray\ Материнская плата-Biostar GeForce 6100 M9\ Объем памяти-128Mb\ Кол-во планок-1\ AMD-ATI Radeon\ Видеокарта-ASUS EAX1300PRO TD PCX Radeon 1300PRO 256MB\ Привод-CD-ROM Asus 52x Box\ Флоппик-Дисковод 3.5"  NEC 1.44Mb\ Корпус-ASUS TА651 350W/S/PFC, WSW, BLACK-SILVER\ Дополнительные параметры-1\ Покупатель-1\ Телефон покупателя-1

А как на счет 2 вопроса?

mar 07-06-2007 14:57 596412

Пример со сменой фона ячейки таблицы на JavaScript
Пример очень старый, сейчас можно спокойно оставить только то, что внутри if, а еще лучше использовать полностью css
PHP код:

<html>                 
<
head>
<
title>TD BackGround color</title>
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<
META NAME="author" CONTENT="Maryanna Nesina Email: webmaster@mail.bio.pu.ru">

<
script language="JavaScript">
<!-- 

// Maryanna Nesina

// http://www.webprogramming.boom.ru
// This script allows to change <td> BackColor while pointer moves over the table cell
// Скрипт меняет цвет ячейки при проведении над ней курсора мыши
// One function thar get cell id and color to use
// Usage onMouseOver="ChangeBgColor('your_cell_name','color_you_want')"
//       onMouseOut="ChangeBgColor('your_cell_name','color_you_want')"
// Использование: onMouseOver="ChangeBgColor('имя_ячеки','нужный_цвет')"
//       onMouseOut="ChangeBgColor('имя_ячеки','нужный_цвет')"
// As for NN4 it is better to use Layers (you can convert tables to Layers via shareware Dreamweaver)
// Что касается NN4 - используйте Layers (таблицу можно перевести в слои при помощи shareware Dreamweaver)
function ChangeBgColor(id,color){
  
//
   
if (document.getElementById) { //IE5,6 , NN6, Mozilla - DOM LAYER1
         
var td document.getElementById(id); 
         
td.style.backgroundColor=color;
    }
   if (
document.alldocument.all[id].style.background=color//IE4, Opera5
}
// -->
</script>
</head>
<body>
<table border="3">
<tr>
 <td id="a" onMouseOver="ChangeBgColor('a','red')" onMouseOut="ChangeBgColor('a','blue')" bgcolor="blue">
Для  броузеров, поддерживающих DOM Layer1 - IE5,6 , NN6, Mozilla 
<br>и имеющих понятие о document.all IE4, Opera5

</td>
</tr>
<tr>
 <td id="b" onMouseOver="ChangeBgColor('b','blue')" onMouseOut="ChangeBgColor('b','red')" bgcolor="red">
Проведите мышкой над ячеками таблицы
<br>
</td>
</tr>

</table>
</body>
</html> 


pasha4ur 07-06-2007 15:56 596456

Спасибо попробую.
Цитата:

а еще лучше использовать полностью css
Я пробовал. Вверху код даже есть, но почему-то в Интернет Эксплоуере не пашет, а в Опере и ФФ пашет

pasha4ur 10-06-2007 13:18 597664

Хотел еще спросить.
Я сделал «типа» гостевую книгу. РНР просто выбирает в таблицу записи из БД, но со временем эта таблица становиться до неприличия длинной.
Как можно сделать, чтоб все делилось на страницы 1, 2, 3…. Намекните, только очень сильно :)

Coutty 10-06-2007 14:37 597688

В запросе к базе данных добавляешь ограничение:
"SELECT * FROM `guestbook` ORDER BY `time` DESC LIMIT 0 , 20"
Начало расписывать не буду.
ORDER BY `time` - сортировка по колонке time
DESC - в обратном порядке
LIMIT 0, 20 - ограничить выдаваемый результат двадцатью строками, начиная с нулевой.
Если по страницам, то вместо 0 пишешь, например, $_GET['page']*20. Соответственно, строка, с которой надо начинать выборку будет определяться как "номер страницы * 20 (записей на страницу)". Второе число после LIMIT прямо так и пишется - 20.
Ну, а как генерировать ссылки на страницы, надеюсь, догадаешься. Если нет, то я помогу догадаться. Но лучше - подумай сам)))

pasha4ur 10-06-2007 18:21 597731

Да надо подумать, как для следующей страницы выборку делать :)
Цитата:

начинать выборку будет определяться как "номер страницы * 20 (записей на страницу)
Тогда для следующей начнется с 40.
Наверное, что-то такое
<a href="1.php?<?php $page?>">2</a>
$page_st=$page*2+1;
$page_en=$page*2+20;
"SELECT * FROM `guestbook` ORDER BY `time` DESC LIMIT '$page_st' , '$page_en'"

Что-то Limit не фурычит
Warning: odbc_exec(): SQL error: [Microsoft][Драйвер ODBC Microsoft Access] Ошибка синтаксиса в предложении ORDER BY., SQL state 37000 in SQLExecDirect in z:\home\proba.ru\www\html\q.php on line 153

$q=odbc_exec($connect_id, "Select * from book ORDER BY Dat DESC LIMIT 0, 20");

До добавления Лимит фурычило :(

Coutty 10-06-2007 19:14 597750

pasha4ur, что ж ты сразу не сказал, что у тебя какой-то там MS Access? Я-то для MySQL писал)) Странно, конечно, что Access не весь SQL держит.
Цитата:

Ошибка синтаксиса в предложении ORDER BY., SQL state 37000
А точка там откуда взялась?

Цитата:

Тогда для следующей начнется с 40.
Значит надо добавить "-1" в нужном месте.

Цитата:

"SELECT * FROM `guestbook` ORDER BY `time` DESC LIMIT '$page_st' , '$page_en'"
Нет, ну не $page_en, а 20. Это показывает не конечный номер строки, а количество строк от начала выборки.
И, пожалуй, даже и не DESC. А то самое старое сообщение наверху окажется...

Цитата:

<a href="1.php?<?php $page?>">2</a>
Ничего не понял... Что тут происходит?))

Ну, всё равно, раз не хочет работать с лимитом. Тогда попробуем сделать выборку на все строки и разобрать их скриптом.
Например так (предполагаю, что скрипт называется guestbook.php и передаются параметры вида guestbook.php?page=2):
PHP код:

$post_on_page=20// определяем, сколько записей на страницу выводить
$q odbc_exec($connect_id"Select * from book ORDER BY Dat DESC"); // шлём запрос к БД на всю таблицу
$num_rows считать_количество_строк($q); // в MySQL это было mysql_num_rows($q). В ахсексе не знаю.
$row_start = ($_GET['page']-1) * $post_on_page// начальная строка будет определяться как номер страницы (начиная с нуля - поэтому ставим "-1") умножить на количество постов на страницу

for ($i $row_start$i < ($row_start $post_on_page); $i++)  // может неоптимально, но всё же. Циклом проходим по строкам, которые будут выводиться. В $i записывается номер текущей строки
  
{
  
$result=mysql_fetch_assoc($q); // опять же, как в ахсексе - не знаю. Разбиваем строку. Т.е. в $result будет содержаться массив.
  
echo "<p><b>".$result['autor']."</b><br />".$result['message']."</p><hr />"// выводим сообщение в нужном нам виде. Предполагается, что autor и message - это столбцы из базы данных. Они были внесены в массив предыдущей командой. Тегами по вкусу можно разбавить.
  
}

// после цикла все сообщения со страницы выведены. Теперь список страниц внизу сделаем. Можно и перед сообщениями ещё. Если делаем и там, и там, то можно записать вывод в переменную, а потом два раза её использовать.

$num_pages $num_rows $post_on_page// определяем, сколько страниц можно получить при таком количестве сообщений. Наверное, надо округлить вверх, но я не помню функцию.
for ($i 1$i <= $num_pages$i++)  // для каждой страницы своя ссылка будет. По поводу сравнения сомневаюсь - то ли строго меньше, то ли меньше-равно.
  
{
  echo 
"$nbsp;<a href='guestbook.php?page=$i'>$i</a>"// проще простого
  


Ну и всё, пожалуй. На работоспособность не проверял. Будут ошибки - сообщи, попробую поправить.

UPD: Ой, какая красивая разноцветная картинка получилась. Гламурненько =^_^=

pasha4ur 10-06-2007 20:21 597764

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

pasha4ur 11-06-2007 09:41 597895

Цитата:

<?php
define("CONNECTION_STRNG", "DBQ=C:\\WebServers\\home\\dip.ru\\www\\data\\Quest.mdb; DRIVER={Microsoft Access Driver (*.mdb)};");
// Підключення до бази даних
$connect_id = odbc_connect(CONNECTION_STRNG, "", "");
$page=settype($page, 'integer');
if(!$connect_id)
echo "Ошибка соединения с базой данных...";
$post_on_page=5;
$q=odbc_exec($connect_id, "Select * from book ORDER BY Dat DESC");
$num_rows = odbc_num_rows($q);
$row_start = ($_GET['page']-1) * $post_on_page;
for ($i = $row_start; $i < ($row_start + $post_on_page); $i++)
{
odbc_fetch_into($q, $result);
//do{
if (odbc_fetch_row($q)){
echo"<tr><td align=center><font face=verdana size=1>".$result['3']."</font></td>";
echo"<td align=center><font face=verdana size=2>".$result['1']."</font></td>";
echo"<td align=justify><font face=verdana size=2>".$result['2']."</font></td></tr>";
}
//}
//while (odbc_fetch_row($q) and $i < ($row_start + $post_on_page));
}

$num_pages = $num_rows / $post_on_page;
echo ("<tr><td colspan=2 align=center>");
for ($j = 1; $j <$num_pages; $j++)
{
echo "$nbsp;<a href='Q.php?page='$j''>'$j'</a>";
}
echo ("</td></tr></table>");
echo "<br>num_rows ".$num_rows."";
echo "<br>row_start ".$row_start."";
echo "<br>num_pages ".$num_pages."";
echo "<br>page ".$page."";
?>

Что получаем.
1 Постоянно выводятся одни и теже записи, независимо от № страницы (ну так по коду и получается)

2 Ссылки не создаются

3 В конце у меня выводятся переменные:
num_rows -1
row_start 0
num_pages -0.2
page 1
Пояснение к ошибке: odbc_num_rows() will return the number of rows in an ODBC result. This function will return -1 on error. For INSERT, UPDATE and DELETE statements odbc_num_rows() returns the number of rows affected. For a SELECT clause this can be the number of rows available.
Note: Using odbc_num_rows() to determine the number of rows available after a SELECT will return -1 with many drivers.
Как давно я английский переводил :). Ну типа эта ф-ция с СЕЛЕКТ со многими драйверами не фурычит :(

Coutty 11-06-2007 12:14 597929

pasha4ur, у тебя нет русской документации к PHP? В описании к функции написано:
"odbc_num_rows() возвращает количество столбцов в ODBC-результате. Эта функция возвращает -1 при ошибке. Для операторов INSERT, UPDATE и DELETE odbc_num_rows() возвращает количество задействованных рядов. Для оператора SELECT это может быть количество доступных рядов.
Примечание: использование odbc_num_rows() для определения количества доступных рядов после SELECT возвращает -1 со многими драйверами."
Я не понял - MS Аccess какой-то особенный? По сути, эта функция может вернуть всё, что угодно. Может, на MySQL можно?)) А то как-то слишком тяжело...

Что там ещё:
Цитата:

Описание
bool odbc_fetch_row (resource result_id [, int row_number])
Если odbc_fetch_row() прошла успешно (ряд был), возвращается TRUE. Если рядов больше нет, возвращается FALSE.
odbc_fetch_row() извлекает ряд данных, который был возвращён функцией odbc_do() / odbc_exec(). После вызова odbc_fetch_row() доступ к полям этого ряда осуществляется с помощью odbc_result().
Если row_number не специфицирован, odbc_fetch_row() попытается извлечь следующий ряд результирующего набора. Вызовы odbc_fetch_row() с и без row_number можно смешивать.
Для прохода по результату более одного раза можно вызывать odbc_fetch_row() с row_number 1, а затем продолжать выполнение odbc_fetch_row() без row_number для просмотра результата. Если драйвер не поддерживает извлечение рядов по номеру, параметр row_number игнорируется.
Т.е. odbc_fetch_row() просто переключает указатель на другую строку. Затем нужно использовать odbc_result()

Цитата:

Описание
string odbc_result (resource result_id, mixed field)
Возвращает содержимое поля.
field может быть целым числом, содержащим номер столбца нужного вам поля; либо строкой, содержащей имя поля. Например:
$item_3 = odbc_result ($Query_ID, 3);
$item_val = odbc_result ($Query_ID, "val");
Первый вызов odbc_result() возвращает значение третьего поля текущей записи результата запроса. Второй вызов функции odbc_result() возвращает значение поля, имя которого "val", текущей записи результата запроса. Возникает ошибка, если параметр номера столбца для этого поля меньше единицы или превосходит количество столбцов (или полей) в текущей записи. Аналогично ошибка возникает, если поле имеет имя, которое не является именем поля запрашиваемой таблицы.
Индексы полей начинаются с 1. В зависимости от того, данные каких столбцов возвращаются (binary или long), см. odbc_binmode() и odbc_longreadlen().
Бррр...


Цитата:

1 Постоянно выводятся одни и теже записи, независимо от № страницы (ну так по коду и получается)
Совсем я не понимаю odbc. Что-то далеко от меня. Придётся разгребать тебе самому=(
п.2 и 3 вытекают из п.1

Может быть на phpclub.ru что-нибудь есть.

pasha4ur 11-06-2007 12:59 597943

Да блин ОДБС. :swoon:
Ох бы я его разработчикам :butcher: ... :)
МуСкл просто в технаре не обясняли (нам там вообще ничего не объясняют), а я уже все по диплому сделал . Преподша сказала, что если разгребешь ОДБС, то МуСкл покажется тебе сказкой.
Ладно спрошу у еще одного знающего человека ;)

Coutty 11-06-2007 14:23 597979

Цитата:

Преподша сказала, что если разгребешь ОДБС, то МуСкл покажется тебе сказкой.
Ох, как она права...

Prisoner 12-06-2007 10:03 598293

Цитата:

1 Постоянно выводятся одни и теже записи, независимо от № страницы (ну так по коду и получается)
Это проблема или, судя по замечанию в скобках, нет? :)
Может у вас данных в таблице не хватает на несколько страниц? Кстати, для страничного вывода избранный Вами путь неоптимален - выбираете Вы ВСЕ данные, а используете лишь малый промежуток, поглядите в сторону LIMIT для SQL запросов Вашей СУБД.

Примечание: прошу прощения на счет писанины о LIMIT выше в этом посте - был невнимателен.

И еще...
Цитата:

Цитата phpManual
resource odbc_exec (resource connection_id, string query_string)

Возвращает FALSE при ошибке. Возвращает результирующий идентификатор ODBC, если SQL-команда была выполнена успешно.

Поглядите, что в $q.

pasha4ur 12-06-2007 10:43 598311

Цитата:

Это проблема или, судя по замечанию в скобках, нет?
Проблема, но не самая главная. Думаю заменить, чтоб выводило по номеру строки в результате запроса.
Цитата:

$num_rows = odbc_num_rows($q);
Вот в этом вся проблема. Она не хочет работать с Аксесом. Возвращает -1
Цитата:

Поглядите, что в $q.
Вот: $q=odbc_exec($connect_id, "Select * from book ORDER BY Dat DESC");

Coutty 12-06-2007 11:31 598325

pasha4ur, если она не хочет считать строки одной функцией, можно написать свою. Например, циклом обойти все строки и внести в массив. При этом считать количество итераций. Потом нужные вывести в html, а остальные оставить за кадром. Только ресурсы будут пропадать впустую =(

Цитата:

Вот: $q=odbc_exec
В смысле - "echo $q;"

pasha4ur 23-06-2007 11:19 603023

Хотел еще кое-что спросить. Сделал сайт на диплом, пользовался Дримвивером, но получилось так, что он не понятно сохраняется:
1. ФФ нормально сохраняет
2. Опера ХТМЛ+пару рисунков(!)
3. Эксплоуер только ХТМЛ
Как это исправить? Вот пример еще одного такого бага: http://pasha4ur.ho.com.ua/
Диплом сдал на 5 :D

Coutty 23-06-2007 12:26 603040

pasha4ur, ничего не знаю, Опера сохраняет все рисунки.
Поздравляю с пятёркой)) Вопрос: это вот ЭТОТ сайт на 5? О_о Или там ещё секретные странички есть? Хотя дизайн ничего так - симпатичный. Похоже, что MS оттуда и свистнула.

pasha4ur 23-06-2007 14:03 603074

Цитата:

pasha4ur, ничего не знаю, Опера сохраняет все рисунки.
Задрали вирусы!!! Format C. Блин раньше было сохраняю через Оперу, захожу в папку и там ничего нет. Только в диалоге сохранения было видно.
Цитата:

Поздравляю с пятёркой))
Спасибо. :)
Цитата:

Вопрос: это вот ЭТОТ сайт на 5?
Нет, Этот так, чтоб не было пусто. Диплом был почти весь на РНР, но качать его влом. У нас там из преподов никто в сайтах не шарит :), можно было на 5 впихнуть и 7 страниц НТМЛ в разрешении 1280х1024 на экране 800х600 =) (жалкое зрелище)

Хочу еще фоновое проигрывание музыки впихнуть, но пока еще не нашел в Нете как.

Coutty 23-06-2007 15:51 603101

Цитата:

Хочу еще фоновое проигрывание музыки впихнуть, но пока еще не нашел в Нете как.
Ты ужасен!))
Идеальный интерфейс - чёрные буквы на белом фоне (см. lib.ru). Но если так сильно хочется, то можно сделать на флэше. Пусть флэшка размером 1х1 пкс воспроизводит звуки. Я как раз отключаю флэшки, т.ч. мне не страшно. Там ещё backgroundsound какой-то есть и в штатном наборе html, но я не особо помню.

pasha4ur 23-06-2007 18:28 603133

:)
Просто четыре года отвтыкал на программиста в техникуме (вместе с преподами отвтыкал =) ), а вот в конце немного было по сайтам. Стало интересно и работу такую теперь ищу :)
Потом хочу к сайту с диплома админпанель приклепать, чтоб через неё файлы редактировать/закачивать.

pasha4ur 23-06-2007 20:30 603173

Есть вопрос на счет редактора:
PHP код:

<input type="file" name="direc" alt="Выберите каталог" onChange="hid1.value=direc.value" dir="ltr" dir="rtl"><input type="text" value="" name="hid1"

Как сделать, чтобы во второй элемент передавался весь путь к файлу, а не только его название и тип?
PHP код:

dir="ltr" dir="rtl" 

А это для чего?

Prisoner 23-06-2007 21:29 603190

Цитата:

А это для чего?
Де юре, а вот де факто - черт его знает, может хак какой. Валидатор ругается ворнингом "Warning: <input> dropping value "ltr" for repeated attribute "dir""

Код:

<input type="file" id="direc" alt="Выберите каталог" onChange="$('hid1').value=$('direc').value"><input type="text" value="" id="hid1">
А так? $ это алиас document.getElementById()

P.S. Может быть будем создавать отдельные темы на каждый вопрос? А то тут уже такой бардак, гугль ногу сломит :(.

Coutty 24-06-2007 10:08 603300

ИМХО тут и есть один вопрос.

Может быть тут что-то найдётся? Там есть по работе с файлами, но через ActiveX. Может быть как-то копируется содержимое строки напрямую?

pasha4ur 24-06-2007 11:53 603323

Цитата:

Может быть будем создавать отдельные темы на каждый вопрос?
Думаю, что тогда меня забанят за большое количество тем =)
Цитата:

А так? $ это алиас document.getElementById()
Я в джаваскриптах не разбираюсь, просто немного знаю я зыки программирования, поэтому и что-то в своем варианте написал.
Чем твой вариант отличается? Просто Инпут тип=файл передает только название файла, а не весь путь.

Prisoner 25-06-2007 17:10 603834

Наврядли забанят... за что? За порядок?
Отличается тем, что я ссылаюсь на объекты оъектной модели документа (DOM) не по именам как Вы (умнип, это не кроссброузерный способ ссылок на объекты принятый у IE), а по их id (запись $('some_element_id') эквивалентна document.geyElementById('some_element_id') потому что последняя - очень громоздкая и создают спецфункцию для укорачивания записи с тем же смыслом - alias в общем, синоним). Кстати, приведенный мной код работает в FF2 и IE6 вставляя все - и путь, и файл, и расширение. Я что-то не так понимаю может быть?

pasha4ur 26-06-2007 10:55 604110

Попробую. Спасибо.
Правда мало чего понял в твоем объяснении =) .

Prisoner 26-06-2007 12:40 604174

Ну, все довольно просто. Скачайте firebug для FF и активировав его поглядите на структуру документа. Напоминает дерево, верно? Это или почти это и есть Document Object Model. В IE есть возможность ссылаться на элементы этой модели по именам (name="someName"), но или только в формах или как-то еще, в общем не универсально т.к. такой способ обращения к узлам дерева элементов не держится в других броузерах. Теперь, если у какого-то узла есть id, то можно получить объект этого узла следубщим образом:
Код:

obj = document.getElementById('someId');
Это кроссброузерный подход. Во всей современных JS-фреймворках (prototype, mootools etc) эту функцию укорачивают делая синоним:
Код:

function $(id) {
  return document.getElementById(id);
}

по правде говоря она обычно выполняет еще многие задачи, но базис таков...
Вообще, самый лучший способ образования - изучения устройства уже написанного и зарекомендовавшего себя кода. Вышеприведенные FW отличные примеры.

vadimiron 26-06-2007 16:21 604290

Prototype только поддерживую!
(а ещё Yui от Yahoo и Scriptaculous для эффектов)

Prisoner 26-06-2007 16:49 604304

Есть мнение, что прототайп очень громоздок, если честно, то под влиянием этого метода стал любителем мутулз в чьей реализации работа с классами и прочим в самом деле, имхо, несколько лаконичнее и короче.

pasha4ur 04-08-2007 17:21 622963

Вложений: 1
Цитата:

Цитата vadimiron
Prototype только поддерживую!
(а ещё Yui от Yahoo и Scriptaculous для эффектов) >>>

Даже не представляю, что это такое.

Есть два вопроса:
1. Делаю шаблон сайта с полупрозрачными кнопками в формате ПНГ, но в Ослике (ИЕ 6.0) они не прозрачные, а как-будто белый фон снизу. ИЕ не поддерживает прозрачность?
Рисунок прикрепил (только в ИЕ не прозрачные).

2. Для чего нужны теги ДИВ и СПАН? Я их использую только для выравнивания элементов.

Coutty 04-08-2007 19:51 623015

Цитата:

Цитата pasha4ur
1. Делаю шаблон сайта с полупрозрачными кнопками в формате ПНГ, но в Ослике (ИЕ 6.0) они не прозрачные, а как-будто белый фон снизу. ИЕ не поддерживает прозрачность?

IE 6 не поддерживает.

Цитата:

Цитата pasha4ur
2. Для чего нужны теги ДИВ и СПАН? Я их использую только для выравнивания элементов.

div - это слой. Его можно расположить в любом месте страницы при помощи style="position:absolute (или relative); top: Xpx; left: Ypx; (ещё можно right и bottom)". Также можно делать наложения слоёв друг на друга. Уровень слоя в стиле указывается z-index: число.

span - сам по себе тэг ничего не делает. Но он служит для назначения стилей или идентификаторов (для JS).
Например:
<span style="text-color: blue; border: 1px solid black" name="text" id="text">текст</span>
<span class="test">текст</span>

По идее, в html-коде не должно быть всяких там <b>, <i>, <u> и прочих. Вместо них сейчас правильнее ставить <span> с соответствующим стилем (лучше классом стиля, который в css уже будет описываться).

pasha4ur 04-08-2007 21:42 623051

Цитата:

Цитата Coutty
IE 6 не поддерживает. >>>

Это просто полный . . . Такая идея умерла :(
Цитата:

Цитата Coutty
div - это слой. Его можно расположить в любом месте страницы при помощи style="position:absolute (или relative); top: Xpx; left: Ypx; (ещё можно right и bottom)". Также можно делать наложения слоёв друг на друга. Уровень слоя в стиле указывается z-index: число. >>>

Нужно будет подробненько почитать =). Я так понял, что как в фотошопе делается. правда, наверное трудно :(

Prisoner 05-08-2007 03:06 623146

1) Почему же умерла? Давно есть фиксы.
2) Небольшое уточнение: div и span - элементы так называемой семантической блочной верстки (модное направление призванное замкнуть цели и средства верстки), только div - элемент уровня блока (эти элементы по умолчанию развернуты на 100% по ширине и имеют на конце как бы <br> - перенос "строки" так что любой другой элемент расположен ниже блочного), а span - элемент уровня строки (растягивается в зависимости от ширины внутреннего контента и не имеет переноса строки в конце). Верстать блоками в самом деле несколько сложнее, но не из-за самой сложности понимания верстки блоками а, увы, из рук вон плохой кроссброузерности во многих случаях выходящих за рамки нетривиальных. К примеру сверстать резиновый трехколоночный дизайн таблицей будет просто, а вот дивами - сложнее, причем в некоторых местах будут применяться совсем неочевидные ходы вроде отрицательных значений css правила margin. Однако, имхо, за семантической версткой будущее ибо Кесарю кесарево стало быть таблицам табличное, а из верстки вон.

pasha4ur 05-08-2007 10:57 623188

Цитата:

Цитата Prisoner
1) Почему же умерла? Давно есть фиксы. >>>

Блин там все на англ. А вкратце что это такое? Типа каждый рисунок нужно вставлять отдельным Дивом?
А ГИФ прозрачный он тоже не поддерживает.
Цитата:

Цитата Prisoner
увы, из рук вон плохой кроссброузерности во многих случаях >>>

Да блин, когда у них уже будут одинаковые стандарты. А то в каждом браузере по-разному выглядит

Prisoner 05-08-2007 15:04 623242

Цитата:

Цитата pasha4ur
Блин там все на англ. А вкратце что это такое? Типа каждый рисунок нужно вставлять отдельным Дивом?
А ГИФ прозрачный он тоже не поддерживает.

Gif поддерживает. PNG, кстати, он тоже поддерживает. С ремаркой - не держит альфаканал т.е. полупрозрачность. Суть фиксов заключается в том, чтобы нацепить на все полупрозрачные png отображаемые в IE без полупрозрачности фильтр (нестандартное решение MS) который сделает картинку полупрозрачной. Тут на русск.

nemecfc 24-08-2007 20:11 632608

Всем привет.
У меня такой вопрос: можно ли загрузить картинку в отдельный фрейм, который при переходах по сайту не изменяется, чтобы она была доступна другому фрейму без дополнительной загрузки?То есть чтобы картинка все время хранилась в первом фрейме и страницы во втором фрейме не подгружали ее заново каждый раз при переходах по сайту, а просто брали из первого фрейма.
Как можно такое осуществить?

Prisoner 25-08-2007 01:00 632700

В Вашем случае ответ заключен в вопросе на 100%, осталось лишь реализовать решение в коде.

nemecfc 25-08-2007 11:19 632784

Я просто не знаю, в каких случаях картинка повторно будет загружаться, а в каких- нет. Например, если я вставлю в левый фрейм
<img name="leftimg" src="pic.gif" style="position: absolute; top: 10px; left: 10px; visibility: hidden;">

А затем из другого фрейма сошлюсь на нее:
<img name="rightimg" src="">
<script language="JavaScript">
document.rightimg.src=parent.leftframe.leftimg.src;
</script>

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

Coutty 25-08-2007 11:25 632789

Цитата:

Цитата nemecfc
<img name="rightimg" src="">
<script language="JavaScript">
document.rightimg.src=parent.leftframe.leftimg.src;
</script>

Даже и так не надо.
Она загрузится в кэш из левого фрейма, а в правом просто поставить <img src="pic.gif" />. Тут уже из кэша будет браться.
Хотя не факт, что браузер загрузит картинку, у которой указан стиль visibility:hidden (типа "Зачем тратить трафик, если всё равно эту картинку никто не увидит?").

nemecfc 25-08-2007 18:32 632971

Спасибо! В принципе, ее не обязательно указывать hidden, это я просто так написал, так что все отлично!
Кстати, а где можно почитать вообще про порядок, условия и т.д. загрузки в кэш, а то я в этом вопросе пока не сильно шарю?

Coutty 25-08-2007 20:39 633028

nemecfc, да я так скажу: есть браузер. Он работает. А уж как он работает - одни разработчики знают. И ничего с этим не поделать. Но вообще - загрузил картинку из сети, внёс в кэш. Прошло некоторое время - либо удаляет из кэша, либо обновляет.
Со страничками немного иначе, но сейчас это не важно))

nemecfc 27-08-2007 16:23 633716

Хорошо, так тогда, получается, можно не загружать картинку в отдельный не изменяющийся фрейм, она ведь и так внесется в кеш, если будет даже в правом меняющемся фрейме?

Еще у меня тут такая проблема. Мне нужно, чтобы ячейка таблицы имела фиксированную высоту вне зависимости от контента, что в ней. Пишу:
...
<style>
table {table-layout: fixed;}
</style>
...
<table>
<tr>
<td height=100>
...Содержимое ячейки...
</td>
</tr>
</table>
...

В IE7(и, думаю, в IE6 тоже) работает, ячейки фиксированной высоты вне зависимости от контента, а вот Mozilla Firefox и Opera все равно выставляют высоту ячейки так, чтобы влезло все содержимое. Вот не знаю, что с этим делать. Буду очень благодарен, если кто подскажет, как решить эту проблему.

Coutty 27-08-2007 17:15 633741

Цитата:

Цитата nemecfc
Хорошо, так тогда, получается, можно не загружать картинку в отдельный не изменяющийся фрейм, она ведь и так внесется в кеш, если будет даже в правом меняющемся фрейме?

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

Насчёт таблицы - очевидного решения я не знаю, но можно попробовать в ячейку таблицы помещать textarea с фиксированным размером, применить к ней стиль, чтобы она была похожа на "как будто её и нет", и JavaScript к ней небольшой: onFocus(this.blur); или как там оно пишется-то... Чтобы не выдавало себя))

nemecfc 27-08-2007 22:20 633880

Спасибо еще раз. Тогда не буду заморачиваться с фреймами.
Насчет высоты ячейки не совсем понял, что вы имеете ввиду, однако кое-что нашел. Можно задавать дополнительно в ячейке еще <div style="max-height: высота;">, при этом следующий элемент отбражается, как будто div имеет такую высоту, однако его содержимое наползает на следующие элементы. Не знаете, можно ли задать, чтобы объект отображался над предыдущим без абсолютного позиционирования?

И еще хотел спросить: если при нажатии на кнопку используется свойство .innerHTML с огромным внутренним HTML кодом, то страница при нажатии на кнопку изменится сразу, или будет некоторое время грузится?


Время: 09:03.

Время: 09:03.
© OSzone.net 2001-