Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не отображаются картинки, Не отображаются картинки 
:(
    Опции темы
Rezzonans
Дата 9.7.2005, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 21.4.2005

Репутация: нет
Всего: нет



Такая проблема:

Код

#!perl



opendir CATALOG, "/foto";
@dat = readdir CATALOG;
close CATALOG;
$url = "/foto";
print "Content-type: text/html\n\n";
&ph($url);


sub ph{
my($url) = @_;
for($i=3;$i<$#dat;$i++){
 $ps = $i-2;
print <<ENDOF;
<a href = "javascript:location$i()"><img width = "200"  src ='$url/$dat[$i]' alt = 'photo number $ps' border = 0></a>
<script language = "JavaScript">
<!-- hide

function location$i(){

myWin = open('','clrscr$i','width = 400, height = 300, toolbar = no, menubar = no, status = no');
myWin.document.open();
myWin.document.write("<html><head><TITLE>Photo № $ps</TITLE></head><div id = '$i' style = 'position:absolute;top:0;left:0;z-index:1'><img width = 400 height = 300 src = $url/$dat[$i]></div></html>");
myWin.document.close();
}
//-->
</script>
ENDOF
}
}


Это исходный код простенькой галлереи. В редакторе DzSoft Perl Editor всё работает нормально. А в браузере - через раз. А при добавлении новых картинок в каталог "foto". Это дело вообще работать перестаёт. Почему?
--------------------
Первый детектор лжи был собран из ребра мужчины. Впрочем, до сих пор, никаких изменений не притерпел
PM MAIL   Вверх
sharq
Дата 9.7.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Rezzonans учимся писать сразу правильно:

Код
#!perl -w

use strict; # прагма, задает ограничения и правила, использовать всегда!

use CGI qw(-no_xhtml :standard); # очень важный модуль, необх. знать каждому
use CGI::Carp qw(fatalsToBrowser);  # ловит ошибки и выводит их в браузер

use File::Spec; # пригодится для обработки файлов

my $url = "http://".http('HTTP_HOST').'/photo'; # url-путь к папке photo 

# JavaScript, немного переделанный, но он НЕ работает....
my $js = <<JS;
function location(i, url) {
 myWin = open('', 'clrscr' + i,'width = 400, height = 300, toolbar = no, menubar = no, status = no');
 myWin.document.open();
 myWin.document.write("<html><head><TITLE>Photo ¹ i</TITLE></head><div id="i" style="position:absolute;top:0;left:0;z-index:1"><img width="400" height="300" src="url"></div></html>");
 myWin.document.close();
}
JS

# открытие папки с фотками, можно указать полный или относительный путь
opendir DIR, './../photo' || die 'Error';
my @data = readdir DIR;
closedir DIR;

# удаление из массива ссылки на корень (.) и ссылки на предыдущую директорию (..)
@data = File::Spec->no_upwards(@data);
# удаление лишних файлов (не jpg и bmp)
@data = grep { $_ =~ /\.jpg/i ||  $_ =~ /\.bmp/i} @data;

# заголовок страницы
print header(-charset => 'windows-1251'),
      start_html(-title  => 'Photo',
               -script => {'code' => $js, 'language' => 'JavaScript'} );

&get_photo($url, \@data) if @data;

print end_html();

sub get_photo($$) {
    my ($url, $data) = @_;

    for (my $i=0; $i<@{$data}; $i++) {
        my $photo_url = $url.'/'.$data->[$i];

        print a({-href => "javascript: location($i, $photo_url)"},
             img({-src => $photo_url, -width => 200, -alt => "photo number $i", border => 0}) );
    }
}



Если не понятно как работать с CGI, то читай документацию, можешь переделать на обычные теги.

Вопрос зачем ты цикл начинал с трех? зачем для каждой картинки своя JS-функция?

У меня папка photo доступна по http://localhost/photo, скрипт http://localhost/cgi-bin/photo.cgi.

smile



--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Rezzonans
Дата 12.7.2005, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 21.4.2005

Репутация: нет
Всего: нет



sharq, пасиб большое, щас попробую smile Цикл я начинал с трёх, потому как первые два элемента массива - это: "." и ".." Соответственно это не картинки, поэтому-то и решил сделать так. А кстати, хорошую документауию по cgi не подскажешь где найти? В частности меня модуль CGI нитересует, ток на русском хотелось бы?
--------------------
Первый детектор лжи был собран из ребра мужчины. Впрочем, до сих пор, никаких изменений не притерпел
PM MAIL   Вверх
Guest
Дата 12.7.2005, 01:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Слушай, спасибо, ты меня здорово выручил! Но вот что я заметил. Слующая строка осуществляет как бы заполнение динамического окна, созданного явой, это ты я думаю знаешь:

Код

myWin.document.write("<html><head><TITLE>Photo ? i</TITLE></head><div id="i" style="position:absolute;top:0;left:0;z-index:1"><img width="400" height="300" src="url"></div></html>");


Эту строку выдаёт мне браузер. Проблема в чём, обрати внимание на то, что открывные кавычки - двойные myWin.document.write("....."). Собственно так и длолжно быть, но то что внутри этих кавычек

<html><head><TITLE>Photo ? i</TITLE></head><div id="i" style="position:absolute;top:0;left:0;z-index:1"><img width="400" height="300" src="url"></div></html>

тут кавычки-то тоже двойные, вот и не работает функция. Тут надо внутри ("....") двойные кавычки заменить на опостровы, либо поставить перед ними \". А так она работать не будет. Ну это я на первый взгляд заметил. Может ещё чего есть
  Вверх
sharq
Дата 13.7.2005, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Rezzonans
Цитата(Rezzonans @ 12.7.2005, 01:35)
А кстати, хорошую документауию по cgi не подскажешь где найти? В частности меня модуль CGI нитересует, ток на русском хотелось бы?

Читай важные темы форума, там ссылка на pdf есть! Вот она.

Цитата
тут кавычки-то тоже двойные
Да это точно! Нужно строку тогда оформлять не в виде <<JS;...JS, а в виде "...". Внутри строки используй \".

Если не будет работать, привиде сгенерированный скриптом сценарий JavaScript, посмотрим или отошлем к соответствующему форуму. smile




--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.