Этот пример использования программы nhreplace показывает, как запрограммировать в командном файле автоматическую сборку html файлов из общих фрагментов (например, если у всех страниц одинаковый заголовок, подвал или другие фрагменты) и демонстрирует использование следующих возможностей:

  • выполнение операций поиска/замены по списку команд – режим -list
  • выполнение замены содержимым текстового файла – опция -f
  • проверка результата выполнения по коду возврата

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

Потребуется вынести одинаковые фрагменты страниц в отдельные текстовые файлы, например, header.htmf:

<h1>Общий для всех страниц заголовок</h1>

или footer.htmf:

<hr>
<p>Общий для всех страниц подвал, например, с контактной информацией.</p>

Затем в html файлы вместо копирования фрагментов можно вставить строки, которые позднее будут заменены на содержимое соответствующих файлов, например, строку <!-- doc-type.htmf --> для подстановки файла doc-type.htmf. Если добавить ещё подстанавливаемые файлы для заголовка (header.htmf), подвала (footer.htmf) и т.д., то index.html будет выглядеть примерно так:

<!-- doc-type.htmf -->
<html>
<head>
<!-- head-meta.htf -->
<title>Страница index</title>
</head>

<body>
<!-- header.htmf -->

Содержимое страницы index...
<br>
Страница index
<!-- page1-link.htmf -->
<!-- page2-link.htmf -->

<!-- footer.htmf -->
</body>
</html>

Теперь автоматическую подстановку файлов можно выполнить в командном файле:

set out_fldr=Content

if not exist %out_fldr%\ md %out_fldr%
if exist *.html copy /y *.html %out_fldr%\

if exist htmflist.txt del htmflist.txt
for %%a in (*.htmf) do echo /s:"<!--[ ]*%%a[ ]*-->" /f:%%a >> htmflist.txt

set pass_no=1
:PassLoopBegin
echo Проход %pass_no%...
nhrplc -list:htmflist.txt -notitle -o:d %out_fldr%\*.htm 
if errorlevel 1 goto :End
set /a pass_no+=1
goto :PassLoopBegin

:End
if exist htmflist.txt del htmflist.txt

Собранные файлы будут сохранены в каталог Content, поэтому CMD файл первым делом создаёт его и копирует html файлы.

Следующим шагом цикл for по всем htmf файлам формирует список замен в файле htmflist.txt, в котором каждая строка задаёт замену текста файлом:

/s:"<!--[ ]*doc-type.htmf[ ]*-->" /f:doc-type.htmf 
/s:"<!--[ ]*footer.htmf[ ]*-->" /f:footer.htmf 
/s:"<!--[ ]*head-meta.htmf[ ]*-->" /f:head-meta.htmf
… ну и так далее

И, наконец, выполняется сборка файла программой nhreplace:

nhrplc -list:htmflist.txt -notitle -o:d %out_fldr%\*.html

Программа обрабатывает все html файлы, выполняя замены из файла htmflist.txt и «собирая» тем самым выходные html файлы.
Несколько проходов используется для того, чтобы сделать подстановки, заданные в самих htmf файлах. Как только результат выполнения nhrplc будет 1 (то есть текст не найден), произойдёт выход из цикла. Также выход из цикла произойдёт при ошибке (код возврата 2).

Если необходимо изменить, например, подвал на всех страницах, достаточно будет внести изменение в файл footer.htmf и заново «собрать» html файлы.

Пример htmf/html/cmd файлов: linkhtml (-list)

См. также

Загрузка nhreplace

Справка nhreplace

Вопросы и ответы по nhreplace

Собрать html файл из фрагментов
Метки:     

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *