The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"ссылки 'previous' и 'next'"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (HTML)
Изначальное сообщение [ Отслеживать ]

"ссылки 'previous' и 'next'"  +/
Сообщение от Дмитрий_ДК email on 25-Ноя-13, 10:41 
Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html), эти файлы создаются автоматически(каждый день +1 новый файл)
как сделать в этих файлах были ссылки на следующий или предыдущий день
руками править каждый файл не вариант.
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "ссылки 'previous' и 'next'"  +/
Сообщение от erera22 email(ok) on 25-Ноя-13, 22:34 
> Всем привет, имеется папка с кучей файлов вида 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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "ссылки 'previous' и 'next'"  +/
Сообщение от михалыч (ok) on 26-Ноя-13, 07:01 
>> Всем привет, имеется папка с кучей файлов вида 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, то уже не проканает.
И как быть с предыдущей "кучей"?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "ссылки 'previous' и 'next'"  +/
Сообщение от Дмитрий_ДК email on 26-Ноя-13, 09:39 
Как я понял средствами html этого не сделаешь.
Новую тему создавать не хочется, подскажите плиз как сделать это с помощью php, или с помощью других языков.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "ссылки 'previous' и 'next'"  +/
Сообщение от Pahanivo (ok) on 26-Ноя-13, 13:09 
> Как я понял средствами html этого не сделаешь.

мдаааа, приплыли ...

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "ссылки 'previous' и 'next'"  +/
Сообщение от михалыч (ok) on 26-Ноя-13, 13:35 
> Как я понял средствами html этого не сделаешь.
> Новую тему создавать не хочется, подскажите плиз как сделать это с помощью
> php, или с помощью других языков.

А чем файлы генерятся? Размер их большой?
Может при генерации файла сразу добавлять в них необходимые "сцылки"?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "ссылки 'previous' и 'next'"  +/
Сообщение от erera22 email(ok) on 26-Ноя-13, 14:11 
>[оверквотинг удален]
>>> эти файлы создаются автоматически(каждый день +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 их таймстампа.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

7. "ссылки 'previous' и 'next'"  +/
Сообщение от михалыч (ok) on 26-Ноя-13, 14:34 
> 1. Не подразумевалось, что y == t. В примере, генерация ссылок на вчера/завтра в ответ на

Да это я, тупанул. Невнимательность. Получение в Linux даты вчера/завтра отличается от FreeBSD.

> 2. Какая разница когда оно заканчивает генерировать? Создавайте ссылки вк момент начала генерации контента.

Возможно там Zabbix.

> 3. Ни слова о том, чем Вы генерите файлы. Скажем, в случае перла (или того же bash), можно вычесть 86400 их таймстампа.

Да это-то понятно. Но это не мне нужно. ))

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "ссылки 'previous' и 'next'"  +/
Сообщение от михалыч (ok) on 26-Ноя-13, 17:18 
> Всем привет, имеется папка с кучей файлов вида 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  |
+--------------+--------------+--------------+

левые и правые даты - соответствующие ссылки.
Такие дела.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "ссылки 'previous' и 'next'"  +/
Сообщение от pavel_simple (ok) on 26-Ноя-13, 18:07 
> Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html),
> эти файлы создаются автоматически(каждый день +1 новый файл)
> как сделать в этих файлах были ссылки на следующий или предыдущий день
> руками править каждый файл не вариант.

как насчёт варианта с dom document url + js -- тогда выйлы вообще не придётся калечить


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "ссылки 'previous' и 'next'"  +/
Сообщение от Дмитрий_ДК email on 27-Ноя-13, 10:35 
> как насчёт варианта с dom document url + js -- тогда выйлы вообще не придётся калечить

я в этих ваших "интернетах" дурак дураком) я не умею писать на js, jQuery, php и прочее...

> А чем файлы генерятся? Размер их большой?
> Может при генерации файла сразу добавлять в них необходимые "сцылки"?

Генерятся php скриптом, размер их не очень большой(1.5 - 2.0 мб). Сразу добавлять ссылки вариант очень хороший, но скрипт писал не я, и я а в нем ничего не понимаю.

> А, всё-таки, попробуем сделать это средствами HTML.
> Ну, или, скажем, не только средствами HTML, но и средствами SSI и Perl

УХ ТЫ! ВОТ ЭТО ДА! СПАСИБО ТЕБЕ ОГРОМНОЕ)!

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру