- ссылки 'previous' и 'next', erera22, 22:34 , 25-Ноя-13 (1)
> Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html), > эти файлы создаются автоматически(каждый день +1 новый файл) > как сделать в этих файлах были ссылки на следующий или предыдущий день > руками править каждый файл не вариант.echo "<a href=\"$(date -d yesterday '+%Y-%m-%d').html\">yesterday</a>" >> file echo "<a href=\"$(date -d tomorrow '+%Y-%m-%d').html\">tomorrow</a>" >> file
- ссылки 'previous' и 'next', михалыч, 07:01 , 26-Ноя-13 (2)
>> Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html), >> эти файлы создаются автоматически(каждый день +1 новый файл) >> как сделать в этих файлах были ссылки на следующий или предыдущий день >> руками править каждый файл не вариант. > echo "<a href=\"$(date -d yesterday '+%Y-%m-%d').html\">yesterday</a>" >> file > echo "<a href=\"$(date -d tomorrow '+%Y-%m-%d').html\">tomorrow</a>" >> file tomorrow != yesterday Это всё хорошо для новых файлов, вновь создаваемых в текущий день. И то, если, возможно, генерация файла заканчивается в 24.00, то уже не проканает. И как быть с предыдущей "кучей"?
- ссылки 'previous' и 'next', Дмитрий_ДК, 09:39 , 26-Ноя-13 (3)
Как я понял средствами html этого не сделаешь. Новую тему создавать не хочется, подскажите плиз как сделать это с помощью php, или с помощью других языков.
- ссылки 'previous' и 'next', Pahanivo, 13:09 , 26-Ноя-13 (4)
> Как я понял средствами html этого не сделаешь.мдаааа, приплыли ... - ссылки 'previous' и 'next', михалыч, 13:35 , 26-Ноя-13 (5)
> Как я понял средствами html этого не сделаешь. > Новую тему создавать не хочется, подскажите плиз как сделать это с помощью > php, или с помощью других языков.А чем файлы генерятся? Размер их большой? Может при генерации файла сразу добавлять в них необходимые "сцылки"?
- ссылки 'previous' и 'next', erera22, 14:11 , 26-Ноя-13 (6)
>[оверквотинг удален] >>> эти файлы создаются автоматически(каждый день +1 новый файл) >>> как сделать в этих файлах были ссылки на следующий или предыдущий день >>> руками править каждый файл не вариант. >> echo "<a href=\"$(date -d yesterday '+%Y-%m-%d').html\">yesterday</a>" >> file >> echo "<a href=\"$(date -d tomorrow '+%Y-%m-%d').html\">tomorrow</a>" >> file > tomorrow != yesterday > Это всё хорошо для новых файлов, вновь создаваемых в текущий день. > И то, если, возможно, генерация файла заканчивается в 24.00, то уже не > проканает. > И как быть с предыдущей "кучей"?1. Не подразумевалось, что y == t. В примере, генерация ссылок на вчера/завтра в ответ на >> как сделать в этих файлах были ссылки на следующий или предыдущий день 2. Какая разница когда оно заканчивает генерировать? Создавайте ссылки в момент начала генерации контента. 3. Ни слова о том, чем Вы генерите файлы. Скажем, в случае перла (или того же bash), можно вычесть 86400 их таймстампа.
- ссылки 'previous' и 'next', михалыч, 14:34 , 26-Ноя-13 (7)
> 1. Не подразумевалось, что y == t. В примере, генерация ссылок на вчера/завтра в ответ на Да это я, тупанул. Невнимательность. Получение в Linux даты вчера/завтра отличается от FreeBSD. > 2. Какая разница когда оно заканчивает генерировать? Создавайте ссылки вк момент начала генерации контента. Возможно там Zabbix. > 3. Ни слова о том, чем Вы генерите файлы. Скажем, в случае перла (или того же bash), можно вычесть 86400 их таймстампа. Да это-то понятно. Но это не мне нужно. ))
- ссылки 'previous' и 'next', михалыч, 17:18 , 26-Ноя-13 (8)
> Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-1025.html), > эти файлы создаются автоматически(каждый день +1 новый файл) > как сделать в этих файлах были ссылки на следующий или предыдущий день > руками править каждый файл не вариант.А, всё-таки, попробуем сделать это средствами HTML. Ну, или, скажем, не только средствами HTML, но и средствами SSI и Perl. Итак, имеется сервер apache. Имеется директория (dir), в которой находятся постоянно генерируемые файлы вида YYYY-MM-DD.html Создаём в этой директории dir файл .htaccess с приблизительно следующим содержанием.
AddType text/html .shtml .html AddHandler server-parsed .shtml .html Options +Indexes +FollowSymLinks +Includes
Тем самым разрешаем работу SSI в этой директории. Создаём в директории /cgi-bin/ файл, обзовём его bname.pl #!/usr/bin/perl use strict; use warnings; use Time::Local; use POSIX qw(strftime);
# получаем название открытого файла my $date = $ARGV[0]; # вырезаем из него всё, кроме цифр и тире $date =~ s/[^\d-]//g;
# сопоставляем дату вида YYYY-MM-DD с полученными оставшимися значениями my ($yyyy, $mm, $dd) = ($date =~ /(\d+)-(\d+)-(\d+)/);
# переводим дату из вида YYYY-MM-DD в количество секунд с начала эпохи в unix формат (epochtime) my $curr_date_epoch = timelocal(0, 0, 0, $dd, $mm-1, $yyyy); # current date сегодняшняя дата my $next_date_epoch = $curr_date_epoch + 86400; # next date следующий день my $prev_date_epoch = $curr_date_epoch - 86400; # previous date предыдущий день
# делаем обратное преобразование времени - из epoch переводим в формат YYYY-MM-DD my $curr_date = strftime "%Y-%m-%d", (localtime($curr_date_epoch)); my $next_date = strftime "%Y-%m-%d", (localtime($next_date_epoch)); my $prev_date = strftime "%Y-%m-%d", (localtime($prev_date_epoch));
# выводим на печать в web print "Content-type: text/html\n\n";
# рисуем табличку и заносим полученные значения print "<table width='100%' border='0'>\n"; print "<tr>\n"; print "<td align='left'><a href='$prev_date.html'>$prev_date</a></td>\n"; print "<td align='center'>$curr_date</td>\n"; print "<td align='right'><a href='$next_date.html'>$next_date</a></td>\n"; print "</tr>\n"; print "</table>";
Изменяем уже готовые файлы в директории dir для работы с SSI. Для этого используем следующий скрипт
#!/usr/bin/perl use strict; use warnings;
# директория с генерируемыми файлами my $dir = "/usr/local/www/apache22/data/dir"; my $file;
opendir(DH, $dir) or die "Couldn't open $dir : $!";
while($file = readdir (DH)) { next if $file =~ /^\.\.?$/; next if $file !~ /^(\d+)-(\d+)-(\d+)\.html$/; next if -d "$dir/$file";
&mod($file); }
closedir(DH);
sub mod($) { open(FH, "+<", "$dir/$file") or die "Can't read $file: $!";
my $out = '';
# в цикле вырезаем HTML теги </body> и </html> с заменой # вместо них вставляем инклюд и заново эти же удалённые теги HTML while(<FH>) { s|</body>||; s|</html>|<!--#include virtual="/cgi-bin/bname.pl?\$DOCUMENT_NAME" -->\n</body>\n</html>|; $out .= $_; }
seek(FH, 0, 0) or die "Seeking: $!"; print FH $out or die "Printing: $!"; truncate(FH, tell(FH)) or die "Truncating: $!"; close(FH) or die "Closing: $!"; }
Новые генерируемые файлы преобразуем с помощью следующего скрипта modern.pl
#!/usr/bin/perl use strict; use warnings; use POSIX qw(strftime);
my $tomorrow = strftime "%Y-%m-%d", (localtime(time-86400)); my $file = "/usr/local/www/apache22/data/dir/$tomorrow.html";
open(FH, "+<", $file) or die "Can't read $file: $!";
my $out = '';
while(<FH>) { s|</body>||; s|</html>|<!--#include virtual="/cgi-bin/bname.pl?\$DOCUMENT_NAME" -->\n</body>\n</html>|; $out .= $_; }
seek(FH, 0, 0) or die "Seeking: $!"; print FH $out or die "Printing: $!"; truncate(FH, tell(FH)) or die "Truncating: $!"; close(FH) or die "Closing: $!";
Если генерирование нового файла в директории dir заканчивается в 24:00, то по cron'у запускаем скрипт modern.pl каждую ночь в 1 час ночи.
0 1 * * * root /path/to/modern.pl >/dev/null 2>&1
В результате в новых файлах (как и в старых) в конце файла будет добавлена строка
<!--#include virtual="/cgi-bin/bname.pl?$DOCUMENT_NAME" -->
При открытии файла будет вызов инклюда и генерация нужных ссылок.
+--------------+--------------+--------------+ | 2013-11-24 | 2013-11-25 | 2013-11-26 | +--------------+--------------+--------------+
левые и правые даты - соответствующие ссылки. Такие дела.
- ссылки 'previous' и 'next', pavel_simple, 18:07 , 26-Ноя-13 (9)
> Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html), > эти файлы создаются автоматически(каждый день +1 новый файл) > как сделать в этих файлах были ссылки на следующий или предыдущий день > руками править каждый файл не вариант.как насчёт варианта с dom document url + js -- тогда выйлы вообще не придётся калечить
- ссылки 'previous' и 'next', Дмитрий_ДК, 10:35 , 27-Ноя-13 (10)
> как насчёт варианта с dom document url + js -- тогда выйлы вообще не придётся калечитья в этих ваших "интернетах" дурак дураком) я не умею писать на js, jQuery, php и прочее... > А чем файлы генерятся? Размер их большой? > Может при генерации файла сразу добавлять в них необходимые "сцылки"? Генерятся php скриптом, размер их не очень большой(1.5 - 2.0 мб). Сразу добавлять ссылки вариант очень хороший, но скрипт писал не я, и я а в нем ничего не понимаю. > А, всё-таки, попробуем сделать это средствами HTML. > Ну, или, скажем, не только средствами HTML, но и средствами SSI и Perl УХ ТЫ! ВОТ ЭТО ДА! СПАСИБО ТЕБЕ ОГРОМНОЕ)!
|