The OpenNET Project / Index page

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



Создать новую тему
 - Свернуть нити
Пометить прочитанным
Архив | Избранное | Мое | Новое | | |  
Форум WEB технологии
ссылки 'previous' и 'next', !*! Дмитрий_ДК, 25-Ноя-13, 10:41  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
  • echo a href date -d yesterday Y- m- d html yesterday a fileec, !*! erera22 (ok), 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

    сообщить модератору +/ответить
  • А, всё-таки, попробуем сделать это средствами HTML Ну, или, скажем, не только ср, !*! михалыч (ok), 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  |
    +--------------+--------------+--------------+

    левые и правые даты - соответствующие ссылки.
    Такие дела.
    сообщить модератору +/ответить
  • как насчёт варианта с dom document url js -- тогда выйлы вообще не придётся ка, !*! pavel_simple (ok), 18:07 , 26-Ноя-13 (9)
    > Всем привет, имеется папка с кучей файлов вида yyyy-mm-dd.html например (2013-10-25.html),
    > эти файлы создаются автоматически(каждый день +1 новый файл)
    > как сделать в этих файлах были ссылки на следующий или предыдущий день
    > руками править каждый файл не вариант.

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


    сообщить модератору +/ответить
 
Пометить прочитанным Создать тему
Архив | Избранное | Мое | Новое | | |



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

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