Publish site-pskov with en/ru docs

This commit is contained in:
2019-06-19 13:11:23 +03:00
parent a7fae6d784
commit 97a2959fe4
28 changed files with 10578 additions and 248 deletions

View File

@@ -0,0 +1,230 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.01.why.html">EN</a>
<a href="../ru/education.01.why.html">RU</a>
</div>
</div>
<center><h1>
Обучение: 01. Почему
</h1></center>
<center><div class="contents">
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Отсутствует</td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.02.deps.html">02. Зависимости</a></td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<p>В этом документе мы кратко объясним причины создания <strong>ПСКОВА</strong>.</p>
<p>Ожидаемое время завершения: 5 минут.</p>
<p><strong>Содержание</strong></p>
<ul>
<li><a href="#why">01. Почему</a></li>
<li><a href="#features">02. Возможности</a></li>
</ul>
<p><a name="why"/></p>
<h2 id="01">01. Почему</h2>
<p>Возможно, вы знаете о существовании множества <a href="https://habr.com/ru/company/selectel/blog/236441/">генераторов статических сайтов</a>, зачем же создавать ещё один? Потому что <strong>они не были достаточно хороши</strong> для нужд <a href="http://opengamestudio.org">Студии Открытых Игр</a>.</p>
<p>Таков список <strong>избыточных для нас функциональностей</strong>:</p>
<table>
<thead>
<tr>
<th></th>
<th>Избыточная функциональность</th>
<th>Детали</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Изучение чего-либо, кроме HTML, CSS, JavaScript и Markdown</td>
<td>Этих технологий достаточно для создания чистого веб-сайта</td>
</tr>
<tr>
<td>2</td>
<td>На стороне сервера</td>
<td>Никто не должен иметь возможность выключить ваш сайт кроме вас</td>
</tr>
<tr>
<td>3</td>
<td>Установка</td>
<td>Отсутствие принудительных обновлений, о которых никто не просил</td>
</tr>
<tr>
<td>4</td>
<td>Осязаемый исходный код</td>
<td>Отсутствие миллионов файлов исходного кода</td>
</tr>
</tbody>
</table>
<p><a name="features"/></p>
<h2 id="02">02. Возможности</h2>
<p>Как следствие, таковы <strong>возможности ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th></th>
<th>Функциональность ПСКОВА</th>
<th>Детали</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>HTML, CSS, JavaScript и Markdown</td>
<td>То, что вы уже знаете</td>
</tr>
<tr>
<td>2</td>
<td>На стороне клиента</td>
<td><strong>ПСКОВ</strong> является приложением JavaScript, исполняемым на стороне клиента, строго на вашем устройств</td>
</tr>
<tr>
<td>3</td>
<td>Доступен в сети</td>
<td><a href="http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html">http://opengamestudio.org/pskov</a></td>
</tr>
<tr>
<td>4</td>
<td>Доступен без сети</td>
<td>Просто сохраните страницу <a href="http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html">Инструмент</a>, а затем откройте её локально</td>
</tr>
<tr>
<td>5</td>
<td>Осязаемый исходный код</td>
<td><strong>ПСКОВ</strong> умещается в один файл HTML</td>
</tr>
<tr>
<td>6</td>
<td>Принадлежит каждому</td>
<td><strong>ПСКОВ</strong> выпущен под лицензией <a href="https://creativecommons.org/share-your-work/public-domain/cc0/">CC0</a> (общественное достояние)</td>
</tr>
<tr>
<td>7</td>
<td>Работает десятилетия</td>
<td>Вы можете использовать <strong>ПСКОВ</strong> и на Windows 2000, и на Windows 2030*</td>
</tr>
</tbody>
</table>
<p>* Windows 2030 не существует (ещё), мы просто указываем на тот факт, что <strong>ПСКОВ</strong> создан для работы на операционных системах, выпущенных в период 2000-2030 годов.</p>
<p></div><div class="contents"></p>
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Отсутствует</td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.02.deps.html">02. Зависимости</a></td>
</tr>
</tbody>
</table>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,67 @@
Title: Обучение: 01. Почему
Date: 2019-06-18 00:00
Category: Page
Slug: education.01.why
Lang: ru
| < Назад | Начало | Далее > |
|---|---|---|
| Отсутствует | [Обучение][index] | [02. Зависимости][next] |
</div><div class="contents">
В этом документе мы кратко объясним причины создания **ПСКОВА**.
Ожидаемое время завершения: 5 минут.
**Содержание**
* [01. Почему](#why)
* [02. Возможности](#features)
<a name="why"/>
## 01. Почему
Возможно, вы знаете о существовании множества [генераторов статических сайтов][other-generators], зачем же создавать ещё один? Потому что **они не были достаточно хороши** для нужд [Студии Открытых Игр][ogs].
Таков список **избыточных для нас функциональностей**:
| № | Избыточная функциональность | Детали |
|---|---|---|
| 1 | Изучение чего-либо, кроме HTML, CSS, JavaScript и Markdown | Этих технологий достаточно для создания чистого веб-сайта |
| 2 | На стороне сервера | Никто не должен иметь возможность выключить ваш сайт кроме вас |
| 3 | Установка | Отсутствие принудительных обновлений, о которых никто не просил |
| 4 | Осязаемый исходный код | Отсутствие миллионов файлов исходного кода |
<a name="features"/>
## 02. Возможности
Как следствие, таковы **возможности ПСКОВА**:
| № | Функциональность ПСКОВА | Детали |
|---|---|---|
| 1 | HTML, CSS, JavaScript и Markdown | То, что вы уже знаете |
| 2 | На стороне клиента | **ПСКОВ** является приложением JavaScript, исполняемым на стороне клиента, строго на вашем устройств |
| 3 | Доступен в сети | [http://opengamestudio.org/pskov][pskov] |
| 4 | Доступен без сети | Просто сохраните страницу [Инструмент][pskov], а затем откройте её локально |
| 5 | Осязаемый исходный код | **ПСКОВ** умещается в один файл HTML |
| 6 | Принадлежит каждому | **ПСКОВ** выпущен под лицензией [CC0][cc0] (общественное достояние)|
| 7 | Работает десятилетия | Вы можете использовать **ПСКОВ** и на Windows 2000, и на Windows 2030\* |
\* Windows 2030 не существует (ещё), мы просто указываем на тот факт, что **ПСКОВ** создан для работы на операционных системах, выпущенных в период 2000-2030 годов.
</div><div class="contents">
| < Назад | Начало | Далее > |
|---|---|---|
| Отсутствует | [Обучение][index] | [02. Зависимости][next] |
[index]: education.html
[next]: education.02.deps.html
[other-generators]: https://habr.com/ru/company/selectel/blog/236441/
[ogs]: http://opengamestudio.org
[pskov]: http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html
[cc0]: https://creativecommons.org/share-your-work/public-domain/cc0/

View File

@@ -0,0 +1,185 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.02.deps.html">EN</a>
<a href="../ru/education.02.deps.html">RU</a>
</div>
</div>
<center><h1>
Обучение: 02. Зависимости
</h1></center>
<center><div class="contents">
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.01.why.html">01. Почему</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.03.site.html">03. Сайт</a></td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<p>В этом документы мы коснёмся зависимостей <strong>ПСКОВА</strong> и их установку.</p>
<p>Ожидаемое время завершения: 5 минут.</p>
<p><strong>Содержание</strong></p>
<ul>
<li><a href="#deps">01. Зависимости</a></li>
<li><a href="#details">02. Подробности</a></li>
</ul>
<p><a name="deps"/></p>
<h2 id="01">01. Зависимости</h2>
<p>Мы спроектировали <strong>ПСКОВ</strong> таким образом, чтобы он исполнялся в веб-браузере. Для запуска <strong>ПСКОВА</strong> вам понадобятся:</p>
<table>
<thead>
<tr>
<th></th>
<th>Зависимость ПСКОВА</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Веб-браузер 2010-го года или новее</td>
<td><strong>ПСКОВ</strong> использует ECMAScript 5 (2009), любой современный веб-браузер должен подойти</td>
</tr>
<tr>
<td>2</td>
<td>К локальной файловой системе доступ</td>
<td><a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a> предоставляет <strong>ПСКОВУ</strong> доступ к вашей локальной файловой системе. Установите ЛФСД, чтобы использовать <strong>ПСКОВ</strong>.</td>
</tr>
</tbody>
</table>
<p><strong>Внимание</strong>: <a href="http://opengamestudio.org/lfsa/ru">установите ЛФСД</a>, чтобы использовать <strong>ПСКОВ</strong>.</p>
<p><a name="details"/></p>
<h2 id="02">02. Подробности</h2>
<p><strong>ПСКОВ</strong>:</p>
<ul>
<li>является приложением JavaScript на стороне клиента</li>
<li>не имеет прямого доступа к локальной файловой системе</li>
<li>использует <a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a> для доступа к локальной файловой системе</li>
<li>использует <a href="https://github.com/showdownjs/showdown">Showdown</a> для перевода Markdown в HTML</li>
</ul>
<p><strong>ЛФСД</strong>:</p>
<ul>
<li>является крошечным веб-сервером, предоставляющим доступ к локальной файловой системе</li>
<li>использует порт 8000</li>
<li>занимает менее 200 строк кода, <a href="https://bitbucket.org/ogstudio/lfsa/src/default/lfsa_1.0.0.py">удостоверьтесь в этом</a> сами</li>
</ul>
<p></div><div class="contents"></p>
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.01.why.html">01. Почему</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.03.site.html">03. Сайт</a></td>
</tr>
</tbody>
</table>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,64 @@
Title: Обучение: 02. Зависимости
Date: 2019-06-18 00:00
Category: Page
Slug: education.02.deps
Lang: ru
| < Назад | Начало | Далее > |
|---|---|---|
| [01. Почему][prev] | [Обучение][index] | [03. Сайт][next] |
</div><div class="contents">
В этом документы мы коснёмся зависимостей **ПСКОВА** и их установку.
Ожидаемое время завершения: 5 минут.
**Содержание**
* [01. Зависимости](#deps)
* [02. Подробности](#details)
<a name="deps"/>
## 01. Зависимости
Мы спроектировали **ПСКОВ** таким образом, чтобы он исполнялся в веб-браузере. Для запуска **ПСКОВА** вам понадобятся:
| № | Зависимость ПСКОВА | Подробности |
|---|---|---|
| 1 | Веб-браузер 2010-го года или новее | **ПСКОВ** использует ECMAScript 5 (2009), любой современный веб-браузер должен подойти |
| 2 | К локальной файловой системе доступ | [ЛФСД][lfsa] предоставляет **ПСКОВУ** доступ к вашей локальной файловой системе. Установите ЛФСД, чтобы использовать **ПСКОВ**. |
**Внимание**: [установите ЛФСД][lfsa], чтобы использовать **ПСКОВ**.
<a name="details"/>
## 02. Подробности
**ПСКОВ**:
* является приложением JavaScript на стороне клиента
* не имеет прямого доступа к локальной файловой системе
* использует [ЛФСД][lfsa] для доступа к локальной файловой системе
* использует [Showdown][showdown] для перевода Markdown в HTML
**ЛФСД**:
* является крошечным веб-сервером, предоставляющим доступ к локальной файловой системе
* использует порт 8000
* занимает менее 200 строк кода, [удостоверьтесь в этом][lfsa-src] сами
</div><div class="contents">
| < Назад | Начало | Далее > |
|---|---|---|
| [01. Почему][prev] | [Обучение][index] | [03. Сайт][next] |
[index]: education.html
[prev]: education.01.why.html
[next]: education.03.site.html
[lfsa]: http://opengamestudio.org/lfsa/ru
[lfsa-src]: https://bitbucket.org/ogstudio/lfsa/src/default/lfsa_1.0.0.py
[showdown]: https://github.com/showdownjs/showdown

View File

@@ -0,0 +1,387 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.03.site.html">EN</a>
<a href="../ru/education.03.site.html">RU</a>
</div>
</div>
<center><h1>
Обучение: 03. Сайт
</h1></center>
<center><div class="contents">
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.02.deps.html">02. Зависимости</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.04.lang.html">04. Язык</a></td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<p>В этом документы мы создадим простой статический сайт с двумя страницами.</p>
<p>Ожидаемое время завершения: 10 минут.</p>
<p><strong>Содержание</strong></p>
<ul>
<li><a href="#inspiration">01. Вдохновление</a></li>
<li><a href="#cfg">02. Изучите файл <code>pskov.cfg</code></a></li>
<li><a href="#item">03. Изучите файл <code>item.template</code></a></li>
<li><a href="#md">04. Изучите файлы <code>about.md</code> и <code>cv.md</code></a></li>
<li><a href="#lfsa">05. Запустите ЛФСД</a></li>
<li><a href="#gen">06. Сгенерируйте сайт</a></li>
<li><a href="#summary">07. Итог</a></li>
</ul>
<p><a name="inspiration"/></p>
<h2 id="01">01. Вдохновление</h2>
<p>Представьте, что вы являетесь выдающимся русским живописцем Валентином Серовым. Каждый раз, когда кто-либо хочет узнать о вас, он идёт на <a href="https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%BE%D0%B2,_%D0%92%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%B8%D0%BD_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B2%D0%B8%D1%87">Википедию</a>. Сегодня утром вы просыпаетесь раньше обычного с отчётливым желанием создать свой собственный веб-сайт.</p>
<p>Вы приступаете к созданию следующих страницы:</p>
<ul>
<li>About me</li>
<li>Curriculum vitae (CV)</li>
</ul>
<p>Несколько позже в <a href="https://github.com/OGStudio/site-pskov-sample/tree/master/01.TwoPages">директории вашего сайта</a> у вас оказываются следующие файлы:</p>
<ul>
<li>pskov.cfg</li>
<li>item.template</li>
<li>about.md</li>
<li>cv.md</li>
</ul>
<p>Давайте взглянем на их содержимое.</p>
<p><a name="cfg"/></p>
<h2 id="02pskovcfg">02. Изучите файл <code>pskov.cfg</code></h2>
<p>Файл <code>pskov.cfg</code> содержит следующее:</p>
<pre><code>input = .
item = item.template
</code></pre>
<p><code>pskov.cfg</code> является <a href="https://ru.wikipedia.org/wiki/.ini">файлом настроек</a> со следующими ключами:</p>
<table>
<thead>
<tr>
<th>Ключ</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>input</code></td>
<td>Указывает на директорию с файлом, на который ссылается ключ <code>item</code></td>
</tr>
<tr>
<td><code>item</code></td>
<td>Указывает на файл с шаблоном HTML, который используется для генерации файлов HTML из Markdown</td>
</tr>
</tbody>
</table>
<p>В нашем случае файл <code>item.template</code> расположен рядом с <code>pskov.cfg</code>, поэтому мы используем <code>.</code> для обозначения текущей директории.</p>
<p><a name="item"/></p>
<h2 id="03itemtemplate">03. Изучите файл <code>item.template</code></h2>
<p>Файл <code>item.template</code> содержит следующее:</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;meta charset="utf-8"&gt;
&lt;head&gt;
&lt;style&gt;
- - - - Схлопнуто для краткости - - - -
&lt;/style&gt;
&lt;title&gt;Serov&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Serov&lt;/strong&gt;
&lt;a href="about.html"&gt;About me&lt;/a&gt;
&lt;a href="cv.html"&gt;CV&lt;/a&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;h1&gt;PSKOV_ITEM_TITLE&lt;/h1&gt;
&lt;div class="contents"&gt;
PSKOV_ITEM_CONTENTS
&lt;/div&gt;
&lt;div id="footer"&gt;
This sample web site has been generated by &lt;a href="http://opengamestudio.org/pskov"&gt;PSKOV&lt;/a&gt;.
&lt;/div&gt;
&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><strong>Внимание</strong>: стиль схлопнут для краткости.</p>
<p>Как видите, <code>item.template</code> представляет из себя обычный файл HTML с двумя константами <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_TITLE</code></td>
<td>Значение ключа <code>Title</code> из файла Markdown страницы</td>
</tr>
<tr>
<td><code>PSKOV_ITEM_CONTENTS</code></td>
<td>Предоставляет содержимое HTML, сгенерированное из Markdown</td>
</tr>
</tbody>
</table>
<p><strong>Замечания</strong>:</p>
<ul>
<li>другие константы <strong>ПСКОВА</strong> описаны позже</li>
<li>файл Markdown страницы описан ниже</li>
</ul>
<p><a name="md"/></p>
<h2 id="04aboutmdcvmd">04. Изучите файлы <code>about.md</code> и <code>cv.md</code></h2>
<p>Файл <code>about.md</code> содержит следующее:</p>
<pre><code> Title: About me
Slug: about
Hi, my name is Valentin Serov. Here's my self-portrait:
![Valentin Serov self-portrait][serov-portrait]
- - - - Схлопнуто для краткости - - - -
Have a look at my [CV][cv] now.
[serov]: https://en.wikipedia.org/wiki/Valentin_Serov
[revolution]: https://en.wikipedia.org/wiki/Russian_Revolution
[serov-portrait]: myself.jpg
[serov-work]: mywork.jpg
[girl-with-peaches]: https://en.wikipedia.org/wiki/Girl_with_Peaches
[pskov]: http://opengamestudio.org/pskov
[cv]: cv.html
</code></pre>
<p><code>about.md</code> начинается с так называемого заголовка:</p>
<table>
<thead>
<tr>
<th>Ключ заголовка</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Title</code></td>
<td>Предоставляет значение для константы <code>PSKOV_ITEM_TITLE</code> во время генерации HTML из Markdown</td>
</tr>
<tr>
<td><code>Slug</code></td>
<td>Сообщает <strong>ПСКОВУ</strong> о том, что этот файл должен быть сохранён как <code>&lt;slug&gt;.html</code></td>
</tr>
</tbody>
</table>
<p>В остальном содержимое <code>about.md</code> ничем не отличается от любых других файлов Markdown.</p>
<p><strong>Внимание</strong>: ссылка на страницу <code>cv</code> указана как <code>cv.html</code>, не <code>cv.md</code></p>
<p>Файл <code>cv.md</code> содержит следующее:</p>
<pre><code> Title: Curriculum vitae
Slug: cv
Here's my CV in case my paintings still interest you. I took a bit of a modern IT approach to structure my CV as key-value pairs of a dictionary (map), enjoy!
| Key | Value |
|---|---|
| Name | Valentin Serov |
| Age | 46 |
| Marital status | Married |
| Country | Russian Empire |
| Alma mater | Imperial Academy of Arts |
| Education | * Member Academy of Arts (1898) &lt;br&gt; * Full Member Academy of Arts (1903) |
</code></pre>
<p>Как видите, в <code>cv.md</code> нет ничего нового за исключением таблицы Markdown.</p>
<p><a name="lfsa"/></p>
<h2 id="05">05. Запустите ЛФСД</h2>
<p>Запустите <a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a> с указанием директории, содержащей только что рассмотренные файлы:</p>
<pre><code>$ /путь/до/lfsa_1.0.0.py /путь/до/директории/01.TwoPages
</code></pre>
<p>Вы должны увидеть примерно такой вывод:</p>
<pre><code>DIR: '/Users/kornerr/p/site-pskov-sample/01.TwoPages'
PORT: '8000'
</code></pre>
<p><a name="gen"/></p>
<h2 id="06">06. Сгенерируйте сайт</h2>
<p>Настало время сгенерировать свой собственный веб-сайт:</p>
<ul>
<li>Перейдите на страницу <a href="http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html">Инструмент</a></li>
<li>Убедитесь в том, что:<ul>
<li><code>Путь</code> указывает на нужную директорию</li>
<li><code>Входящая директория</code> и <code>Шаблон элемента</code> содержат значения из <code>pskov.cfg</code></li></ul></li>
<li>Нажмите кнопку <code>Генерировать</code> для генерации файлов HTML рядом с файлами Markdown</li>
<li>Откройте сгенерированный файл <code>about.html</code> из директории сайта</li>
<li>Перед вами ваш собственный веб-сайт, запущенный локально</li>
</ul>
<p><a name="summary"/></p>
<h2 id="07">07. Итог</h2>
<p>Вы успешно сгенерировали веб-сайт с двумя страницами. <a href="http://opengamestudio.org/pskov/sample/01.TwoPages/about.html">Проверьте результат</a>.</p>
<p>Представлены константы <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_TITLE</code></td>
<td>Значение ключа <code>Title</code> из файла Markdown страницы</td>
</tr>
<tr>
<td><code>PSKOV_ITEM_CONTENTS</code></td>
<td>Предоставляет содержимое HTML, сгенерированное из Markdown</td>
</tr>
</tbody>
</table>
<p>Представлены ключи настроек:</p>
<table>
<thead>
<tr>
<th>Ключ</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>input</code></td>
<td>Указывает на директорию с файлом, на который ссылается ключ <code>item</code></td>
</tr>
<tr>
<td><code>item</code></td>
<td>Указывает на файл с шаблоном HTML, который используется для генерации файлов HTML из Markdown</td>
</tr>
</tbody>
</table>
<p>Представлены ключи заголовка:</p>
<table>
<thead>
<tr>
<th>Ключ заголовка</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Title</code></td>
<td>Предоставляет значение для константы <code>PSKOV_ITEM_TITLE</code> во время генерации HTML из Markdown</td>
</tr>
<tr>
<td><code>Slug</code></td>
<td>Сообщает <strong>ПСКОВУ</strong> о том, что этот файл должен быть сохранён как <code>&lt;slug&gt;.html</code></td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.02.deps.html">02. Зависимости</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.04.lang.html">04. Язык</a></td>
</tr>
</tbody>
</table>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,247 @@
Title: Обучение: 03. Сайт
Date: 2019-06-18 00:00
Category: Page
Slug: education.03.site
Lang: ru
| < Назад | Начало | Далее > |
|---|---|---|
| [02. Зависимости][prev] | [Обучение][index] | [04. Язык][next] |
</div><div class="contents">
В этом документы мы создадим простой статический сайт с двумя страницами.
Ожидаемое время завершения: 10 минут.
**Содержание**
* [01. Вдохновление](#inspiration)
* [02. Изучите файл `pskov.cfg`](#cfg)
* [03. Изучите файл `item.template`](#item)
* [04. Изучите файлы `about.md` и `cv.md`](#md)
* [05. Запустите ЛФСД](#lfsa)
* [06. Сгенерируйте сайт](#gen)
* [07. Итог](#summary)
<a name="inspiration"/>
## 01. Вдохновление
Представьте, что вы являетесь выдающимся русским живописцем Валентином Серовым. Каждый раз, когда кто-либо хочет узнать о вас, он идёт на [Википедию][serov]. Сегодня утром вы просыпаетесь раньше обычного с отчётливым желанием создать свой собственный веб-сайт.
Вы приступаете к созданию следующих страницы:
* About me
* Curriculum vitae (CV)
Несколько позже в [директории вашего сайта][01-files] у вас оказываются следующие файлы:
* pskov.cfg
* item.template
* about.md
* cv.md
Давайте взглянем на их содержимое.
<a name="cfg"/>
## 02. Изучите файл `pskov.cfg`
Файл `pskov.cfg` содержит следующее:
```
input = .
item = item.template
```
`pskov.cfg` является [файлом настроек][ini-file] со следующими ключами:
| Ключ | Описание |
|---|---|
| `input` | Указывает на директорию с файлом, на который ссылается ключ `item` |
| `item` | Указывает на файл с шаблоном HTML, который используется для генерации файлов HTML из Markdown |
В нашем случае файл `item.template` расположен рядом с `pskov.cfg`, поэтому мы используем `.` для обозначения текущей директории.
<a name="item"/>
## 03. Изучите файл `item.template`
Файл `item.template` содержит следующее:
```
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
- - - - Схлопнуто для краткости - - - -
</style>
<title>Serov</title>
</head>
<body>
<div id="header">
<strong>Serov</strong>
<a href="about.html">About me</a>
<a href="cv.html">CV</a>
</div>
<center>
<h1>PSKOV_ITEM_TITLE</h1>
<div class="contents">
PSKOV_ITEM_CONTENTS
</div>
<div id="footer">
This sample web site has been generated by <a href="http://opengamestudio.org/pskov">PSKOV</a>.
</div>
</center>
</body>
</html>
```
**Внимание**: стиль схлопнут для краткости.
Как видите, `item.template` представляет из себя обычный файл HTML с двумя константами **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_TITLE` | Значение ключа `Title` из файла Markdown страницы |
| `PSKOV_ITEM_CONTENTS` | Предоставляет содержимое HTML, сгенерированное из Markdown |
**Замечания**:
* другие константы **ПСКОВА** описаны позже
* файл Markdown страницы описан ниже
<a name="md"/>
## 04. Изучите файлы `about.md` и `cv.md`
Файл `about.md` содержит следующее:
```
Title: About me
Slug: about
Hi, my name is Valentin Serov. Here's my self-portrait:
![Valentin Serov self-portrait][serov-portrait]
- - - - Схлопнуто для краткости - - - -
Have a look at my [CV][cv] now.
[serov]: https://en.wikipedia.org/wiki/Valentin_Serov
[revolution]: https://en.wikipedia.org/wiki/Russian_Revolution
[serov-portrait]: myself.jpg
[serov-work]: mywork.jpg
[girl-with-peaches]: https://en.wikipedia.org/wiki/Girl_with_Peaches
[pskov]: http://opengamestudio.org/pskov
[cv]: cv.html
```
`about.md` начинается с так называемого заголовка:
| Ключ заголовка | Описание |
|---|---|
| `Title` | Предоставляет значение для константы `PSKOV_ITEM_TITLE` во время генерации HTML из Markdown |
| `Slug` | Сообщает **ПСКОВУ** о том, что этот файл должен быть сохранён как `<slug>.html` |
В остальном содержимое `about.md` ничем не отличается от любых других файлов Markdown.
**Внимание**: ссылка на страницу `cv` указана как `cv.html`, не `cv.md`
Файл `cv.md` содержит следующее:
```
Title: Curriculum vitae
Slug: cv
Here's my CV in case my paintings still interest you. I took a bit of a modern IT approach to structure my CV as key-value pairs of a dictionary (map), enjoy!
| Key | Value |
|---|---|
| Name | Valentin Serov |
| Age | 46 |
| Marital status | Married |
| Country | Russian Empire |
| Alma mater | Imperial Academy of Arts |
| Education | * Member Academy of Arts (1898) <br> * Full Member Academy of Arts (1903) |
```
Как видите, в `cv.md` нет ничего нового за исключением таблицы Markdown.
<a name="lfsa"/>
## 05. Запустите ЛФСД
Запустите [ЛФСД][lfsa] с указанием директории, содержащей только что рассмотренные файлы:
```
$ /путь/до/lfsa_1.0.0.py /путь/до/директории/01.TwoPages
```
Вы должны увидеть примерно такой вывод:
```
DIR: '/Users/kornerr/p/site-pskov-sample/01.TwoPages'
PORT: '8000'
```
<a name="gen"/>
## 06. Сгенерируйте сайт
Настало время сгенерировать свой собственный веб-сайт:
* Перейдите на страницу [Инструмент][tool]
* Убедитесь в том, что:
* `Путь` указывает на нужную директорию
* `Входящая директория` и `Шаблон элемента` содержат значения из `pskov.cfg`
* Нажмите кнопку `Генерировать` для генерации файлов HTML рядом с файлами Markdown
* Откройте сгенерированный файл `about.html` из директории сайта
* Перед вами ваш собственный веб-сайт, запущенный локально
<a name="summary"/>
## 07. Итог
Вы успешно сгенерировали веб-сайт с двумя страницами. [Проверьте результат][01-sample].
Представлены константы **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_TITLE` | Значение ключа `Title` из файла Markdown страницы |
| `PSKOV_ITEM_CONTENTS` | Предоставляет содержимое HTML, сгенерированное из Markdown |
Представлены ключи настроек:
| Ключ | Описание |
|---|---|
| `input` | Указывает на директорию с файлом, на который ссылается ключ `item` |
| `item` | Указывает на файл с шаблоном HTML, который используется для генерации файлов HTML из Markdown |
Представлены ключи заголовка:
| Ключ заголовка | Описание |
|---|---|
| `Title` | Предоставляет значение для константы `PSKOV_ITEM_TITLE` во время генерации HTML из Markdown |
| `Slug` | Сообщает **ПСКОВУ** о том, что этот файл должен быть сохранён как `<slug>.html` |
</div><div class="contents">
| < Назад | Начало | Далее > |
|---|---|---|
| [02. Зависимости][prev] | [Обучение][index] | [04. Язык][next] |
[index]: education.html
[prev]: education.02.deps.html
[next]: education.04.lang.html
[01-files]: https://github.com/OGStudio/site-pskov-sample/tree/master/01.TwoPages
[01-sample]: http://opengamestudio.org/pskov/sample/01.TwoPages/about.html
[ini-file]: https://ru.wikipedia.org/wiki/.ini
[serov]: https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%BE%D0%B2,_%D0%92%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%B8%D0%BD_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B2%D0%B8%D1%87
[lfsa]: http://opengamestudio.org/lfsa/ru
[tool]: http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html

View File

@@ -0,0 +1,281 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.04.lang.html">EN</a>
<a href="../ru/education.04.lang.html">RU</a>
</div>
</div>
<center><h1>
Обучение: 04. Язык
</h1></center>
<center><div class="contents">
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.03.site.html">03. Сайт</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.05.blog.html">05. Блог</a></td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<p>В этом документе мы добавим выбор языка.</p>
<p>Ожидаемое время завершения: 10 минут.</p>
<p><strong>Содержание</strong></p>
<ul>
<li><a href="#localization">01. Локализация</a></li>
<li><a href="#cfg">02. Изучите файл <code>pskov.cfg</code></a></li>
<li><a href="#item">03. Изучите файлы шаблонов</a></li>
<li><a href="#md">04. Изучите файлы Markdown</a></li>
<li><a href="#gen">05. Запустите ЛФСД и сгенерируйте сайт</a></li>
<li><a href="#summary">06. Итог</a></li>
</ul>
<p><a name="localization"/></p>
<h2 id="01">01. Локализация</h2>
<p>Теперь, когда у вас есть собственный веб-сайт на английском, вы задумываетесь о русской версии, ведь вы же всё-таки русский!</p>
<p>Вы создаёте директорию со <a href="https://github.com/OGStudio/site-pskov-sample/tree/master/02.Language">следующей структурой файлов</a>:</p>
<ul>
<li><code>pskov.cfg</code></li>
<li><code>en/item.template</code></li>
<li><code>en/about.md</code></li>
<li><code>en/cv.md</code></li>
<li><code>ru/item.template</code></li>
<li><code>ru/about.md</code></li>
<li><code>ru/cv.md</code></li>
</ul>
<p>Давайте взглянем на содержимое этих файлов.</p>
<p><a name="cfg"/></p>
<h2 id="02pskovcfg">02. Изучите файл <code>pskov.cfg</code></h2>
<p>Файл <code>pskov.cfg</code> содержит следующее:</p>
<pre><code>input = en;ru
item = item.template
</code></pre>
<p>Как видите, <code>input</code> может принимать несколько директорий, разделённых символом <code>;</code>. <strong>ПСКОВ</strong> обработает каждую указанную директорию так же, как и ранее.</p>
<p>В нашем случае каждая из директорий - <code>en/</code> и <code>ru/</code> - содержит собственный шаблон <code>item.template</code>.</p>
<p><a name="item"/></p>
<h2 id="03">03. Изучите файлы шаблонов</h2>
<ul>
<li><p>Содержимое <code>en/item.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;title&gt;Serov&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Serov&lt;/strong&gt;
&lt;a href="about.html"&gt;About me&lt;/a&gt;
&lt;a href="cv.html"&gt;CV&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../en/PSKOV_ITEM_URL"&gt;EN&lt;/a&gt;
&lt;a href="../ru/PSKOV_ITEM_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
<li><p>Содержимое <code>ru/item.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;title&gt;Серов&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Серов&lt;/strong&gt;
&lt;a href="about.html"&gt;Обо мне&lt;/a&gt;
&lt;a href="cv.html"&gt;Резюме&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../en/PSKOV_ITEM_URL"&gt;EN&lt;/a&gt;
&lt;a href="../ru/PSKOV_ITEM_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
</ul>
<p><strong>Внимание</strong>: начало и конец схлопнуты для краткости.</p>
<p>Как видите, <code>en/item.template</code> и <code>ru/item.template</code> очень похожи на <a href="education.03.site.html">виденный ранее</a> <code>item.template</code>.</p>
<p>Изменения следующие:</p>
<ul>
<li>использование секции <code>&lt;div id="lang"&gt;...&lt;/div&gt;</code> для отображения выбора языка</li>
<li>локализация заголовков на Английском и Русском языках</li>
</ul>
<p>Выбор языка использует следующую новую константу <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_URL</code></td>
<td>Предоставляет имя файла генерируемой страницы</td>
</tr>
</tbody>
</table>
<p>Использование <code>PSKOV_ITEM_URL</code> даёт вам поддержку стольких языков, сколько пожелаете.</p>
<p><a name="md"/></p>
<h2 id="04markdown">04. Изучите файлы Markdown</h2>
<p>Файлы <code>en/about.md</code> и <code>en/cv.md</code> выглядят почти идентично <a href="education.03.site.html">виденным ранее</a>. <code>ru/about.md</code> и <code>ru/cv.md</code> представляют собой русские версии соответствующих английских страниц.</p>
<p>Например, <code>ru/cv.md</code> содержит:</p>
<pre><code> Title: Резюме
Slug: cv
Здесь вы можете увидеть моё резюме в том случае, если мои произведения всё ещё вас интересуют. Я использовал современный подход ИТ для структурирования своего резюме в виде пар ключ-значение словаря (карты). Наслаждайтесь!
| Ключ | Значение |
|---|---|
| Имя | Валентин Серов |
| Возраст | 46 |
| Семейное положение | Женат |
| Страна | Российская Империя |
| Учёба | Императорская Академия художеств |
| Звания | * академик ИАХ (1898) &lt;br&gt; * действительный член ИАХ (1903) |
</code></pre>
<p><strong>Внимание</strong>: русская страница использует точно такое же значение <code>Slug</code>, как и английская страница.</p>
<p><a name="gen"/></p>
<h2 id="05">05. Запустите ЛФСД и сгенерируйте сайт</h2>
<p>Запустите <a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a> с указанием директории, содержащей только что рассмотренные файлы:</p>
<pre><code>$ /путь/до/lfsa_1.0.0.py /путь/до/директории/02.Language
</code></pre>
<p>Сгенерируйте сайт:</p>
<ul>
<li>Перейдите на страницу <a href="http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html">Инструмент</a></li>
<li>Нажмите кнопку <code>Генерировать</code></li>
<li>Откройте сгенерированный файл <code>en/about.html</code> или <code>ru/about.html</code> из директории сайта</li>
<li>Переключите язык, чтобы убедиться в корректной работе</li>
</ul>
<p><a name="summary"/></p>
<h2 id="06">06. Итог</h2>
<p>Вы успешно добавили выбор языка. <a href="http://opengamestudio.org/pskov/sample/02.Language/ru/about.html">Проверьте результат</a>.</p>
<p>Представлены константы <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_URL</code></td>
<td>Предоставляет имя файла генерируемой страницы</td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.03.site.html">03. Сайт</a></td>
<td><a href="education.html">Обучение</a></td>
<td><a href="education.05.blog.html">05. Блог</a></td>
</tr>
</tbody>
</table>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,187 @@
Title: Обучение: 04. Язык
Date: 2019-06-18 00:00
Category: Page
Slug: education.04.lang
Lang: ru
| < Назад | Начало | Далее > |
|---|---|---|
| [03. Сайт][prev] | [Обучение][index] | [05. Блог][next] |
</div><div class="contents">
В этом документе мы добавим выбор языка.
Ожидаемое время завершения: 10 минут.
**Содержание**
* [01. Локализация](#localization)
* [02. Изучите файл `pskov.cfg`](#cfg)
* [03. Изучите файлы шаблонов](#item)
* [04. Изучите файлы Markdown](#md)
* [05. Запустите ЛФСД и сгенерируйте сайт](#gen)
* [06. Итог](#summary)
<a name="localization"/>
## 01. Локализация
Теперь, когда у вас есть собственный веб-сайт на английском, вы задумываетесь о русской версии, ведь вы же всё-таки русский!
Вы создаёте директорию со [следующей структурой файлов][02-files]:
* `pskov.cfg`
* `en/item.template`
* `en/about.md`
* `en/cv.md`
* `ru/item.template`
* `ru/about.md`
* `ru/cv.md`
Давайте взглянем на содержимое этих файлов.
<a name="cfg"/>
## 02. Изучите файл `pskov.cfg`
Файл `pskov.cfg` содержит следующее:
```
input = en;ru
item = item.template
```
Как видите, `input` может принимать несколько директорий, разделённых символом `;`. **ПСКОВ** обработает каждую указанную директорию так же, как и ранее.
В нашем случае каждая из директорий - `en/` и `ru/` - содержит собственный шаблон `item.template`.
<a name="item"/>
## 03. Изучите файлы шаблонов
* Содержимое `en/item.template`:
```
- - - - Схлопнуто для краткости - - - -
<title>Serov</title>
</head>
<body>
<div id="header">
<strong>Serov</strong>
<a href="about.html">About me</a>
<a href="cv.html">CV</a>
<div id="lang">
<a href="../en/PSKOV_ITEM_URL">EN</a>
<a href="../ru/PSKOV_ITEM_URL">RU</a>
</div>
</div>
<center>
- - - - Схлопнуто для краткости - - - -
```
* Содержимое `ru/item.template`:
```
- - - - Схлопнуто для краткости - - - -
<title>Серов</title>
</head>
<body>
<div id="header">
<strong>Серов</strong>
<a href="about.html">Обо мне</a>
<a href="cv.html">Резюме</a>
<div id="lang">
<a href="../en/PSKOV_ITEM_URL">EN</a>
<a href="../ru/PSKOV_ITEM_URL">RU</a>
</div>
</div>
<center>
- - - - Схлопнуто для краткости - - - -
```
**Внимание**: начало и конец схлопнуты для краткости.
Как видите, `en/item.template` и `ru/item.template` очень похожи на [виденный ранее][prev] `item.template`.
Изменения следующие:
* использование секции `<div id="lang">...</div>` для отображения выбора языка
* локализация заголовков на Английском и Русском языках
Выбор языка использует следующую новую константу **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_URL` | Предоставляет имя файла генерируемой страницы |
Использование `PSKOV_ITEM_URL` даёт вам поддержку стольких языков, сколько пожелаете.
<a name="md"/>
## 04. Изучите файлы Markdown
Файлы `en/about.md` и `en/cv.md` выглядят почти идентично [виденным ранее][prev]. `ru/about.md` и `ru/cv.md` представляют собой русские версии соответствующих английских страниц.
Например, `ru/cv.md` содержит:
```
Title: Резюме
Slug: cv
Здесь вы можете увидеть моё резюме в том случае, если мои произведения всё ещё вас интересуют. Я использовал современный подход ИТ для структурирования своего резюме в виде пар ключ-значение словаря (карты). Наслаждайтесь!
| Ключ | Значение |
|---|---|
| Имя | Валентин Серов |
| Возраст | 46 |
| Семейное положение | Женат |
| Страна | Российская Империя |
| Учёба | Императорская Академия художеств |
| Звания | * академик ИАХ (1898) <br> * действительный член ИАХ (1903) |
```
**Внимание**: русская страница использует точно такое же значение `Slug`, как и английская страница.
<a name="gen"/>
## 05. Запустите ЛФСД и сгенерируйте сайт
Запустите [ЛФСД][lfsa] с указанием директории, содержащей только что рассмотренные файлы:
```
$ /путь/до/lfsa_1.0.0.py /путь/до/директории/02.Language
```
Сгенерируйте сайт:
* Перейдите на страницу [Инструмент][tool]
* Нажмите кнопку `Генерировать`
* Откройте сгенерированный файл `en/about.html` или `ru/about.html` из директории сайта
* Переключите язык, чтобы убедиться в корректной работе
<a name="summary"/>
## 06. Итог
Вы успешно добавили выбор языка. [Проверьте результат][02-sample].
Представлены константы **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_URL` | Предоставляет имя файла генерируемой страницы |
</div><div class="contents">
| < Назад | Начало | Далее > |
|---|---|---|
| [03. Сайт][prev] | [Обучение][index] | [05. Блог][next] |
[index]: education.html
[prev]: education.03.site.html
[next]: education.05.blog.html
[02-files]: https://github.com/OGStudio/site-pskov-sample/tree/master/02.Language
[02-sample]: http://opengamestudio.org/pskov/sample/02.Language/ru/about.html
[lfsa]: http://opengamestudio.org/lfsa/ru
[tool]: http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html

View File

@@ -0,0 +1,712 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.05.blog.html">EN</a>
<a href="../ru/education.05.blog.html">RU</a>
</div>
</div>
<center><h1>
Обучение: 05. Блог
</h1></center>
<center><div class="contents">
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.04.lang.html">04. Язык</a></td>
<td><a href="education.html">Обучение</a></td>
<td>Отсутствует</td>
</tr>
</tbody>
</table>
<p></div><div class="contents"></p>
<p>В этом документе мы создадим "динамические" страницы блога.</p>
<p>Ожидаемое время завершения: 20 минут.</p>
<p><strong>Содержание</strong></p>
<ul>
<li><a href="#blog">01. Блог</a></li>
<li><a href="#cfg">02. Изучите файл <code>pskov.cfg</code></a></li>
<li><a href="#item">03. Изучите шаблоны элементов</a></li>
<li><a href="#preview">04. Изучите шаблоны предпросмотров</a></li>
<li><a href="#index">05. Изучите шаблоны страниц с предпросмотрами</a></li>
<li><a href="#pagination">06. Изучите постраничные шаблоны</a></li>
<li><a href="#md">07. Изучите файлы Markdown</a></li>
<li><a href="#gen">08. Запустите ЛФСД и сгенерируйте сайт</a></li>
<li><a href="#summary">09. Итог</a></li>
</ul>
<p><a name="blog"/></p>
<h2 id="01">01. Блог</h2>
<p>Итак, у вас есть веб-сайт на Английском и Русском языках. Вы начинаете ощущать желание регулярно делиться своими мыслями с миром в виде заметок блога.</p>
<p>Вы создаёте директорию со <a href="https://github.com/OGStudio/site-pskov-sample/tree/master/03.Blog">следующей структурой файлов</a>:</p>
<ul>
<li><code>pskov.cfg</code></li>
<li><code>en/blog/</code><ul>
<li><code>item.template</code></li>
<li><code>index.template</code></li>
<li><code>preview.template</code></li>
<li><code>pagination.template</code></li>
<li><code>pagination.prev.template</code></li>
<li><code>pagination.next.template</code></li>
<li><code>1885.md</code></li>
<li><code>1886.01.md</code></li>
<li><code>1886.02.md</code></li>
<li><code>1887.01.md</code></li>
<li><code>1887.02.md</code></li>
<li><code>1888.md</code></li>
<li><code>1896.md</code></li>
<li><code>1899.md</code></li></ul></li>
<li><code>en/page/</code><ul>
<li><code>item.template</code></li>
<li><code>about.md</code></li>
<li><code>cv.md</code></li></ul></li>
<li><code>ru/blog/</code><ul>
<li><code>item.template</code></li>
<li><code>index.template</code></li>
<li><code>preview.template</code></li>
<li><code>pagination.template</code></li>
<li><code>pagination.prev.template</code></li>
<li><code>pagination.next.template</code></li>
<li><code>1885.md</code></li>
<li><code>1886.01.md</code></li>
<li><code>1886.02.md</code></li>
<li><code>1887.01.md</code></li>
<li><code>1887.02.md</code></li>
<li><code>1888.md</code></li>
<li><code>1896.md</code></li>
<li><code>1899.md</code></li></ul></li>
<li><code>ru/page/</code><ul>
<li><code>item.template</code></li>
<li><code>about.md</code></li>
<li><code>cv.md</code></li></ul></li>
</ul>
<p>Давайте взглянем на содержимое этих файлов.</p>
<p><a name="cfg"/></p>
<h2 id="02pskovcfg">02. Изучите файл <code>pskov.cfg</code></h2>
<p>Файл <code>pskov.cfg</code> содержит следующее:</p>
<pre><code>input = en/page;ru/page;en/blog;ru/blog
item = item.template
preview = preview.template
index = index.template
paginationPrev = pagination.prev.template
paginationNext = pagination.next.template
paginationPrevNext = pagination.template
previewSize = 200
previewEnding = . . .
previewsPerPage = 3
previewPageBaseName = index
</code></pre>
<p>Вы уже встречались с ключами <code>input</code> и <code>item</code>. Рассмотрим остальные:</p>
<table>
<thead>
<tr>
<th>Ключ</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>preview</code></td>
<td>Указывает на шаблон HTML, используемый для генерации предпросмотра HTML из первых <code>previewSize</code> (приблизительно) символов для каждого файла Markdown</td>
</tr>
<tr>
<td><code>index</code></td>
<td>Указывает на шаблон HTML, используемый для генерации страницы с предпросмотрами</td>
</tr>
<tr>
<td><code>paginationPrev</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходом лишь на предыдущую страницу</td>
</tr>
<tr>
<td><code>paginationNext</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходм лишь на следующую страницу</td>
</tr>
<tr>
<td><code>paginationPrevNext</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходами по страницам</td>
</tr>
<tr>
<td><code>previewSize</code></td>
<td>Количество символов (приблизительное) из файла Markdown, используемое для генерации предпросмотра</td>
</tr>
<tr>
<td><code>previewEnding</code></td>
<td>Строка для добавления в конец каждого предпросмотра</td>
</tr>
<tr>
<td><code>previewsPerPage</code></td>
<td>Максимальное количество предпросмотров, умещающееся на странице с предпросмотрами</td>
</tr>
<tr>
<td><code>previewsPageBaseName</code></td>
<td>Базовое имя файла для страниц с предпросмотрами</td>
</tr>
</tbody>
</table>
<p>В нашем случае:</p>
<ul>
<li>мы ограничиваем предпросмотр <code>200</code> символами (приблизительно)</li>
<li>мы используем строку <code>. . .</code> в конце каждого предпросмотра</li>
<li>страницы с предпросмотрами вмещают максимум <code>3</code> предпросмотра</li>
<li>страницы с предпросмотрами будут сохранены как <code>index.html</code>, <code>index2.html</code>, <code>index3.html</code> и т.д.</li>
</ul>
<p><a name="item"/></p>
<h2 id="03">03. Изучите шаблоны элементов</h2>
<ul>
<li><p>Содержимое <code>en/blog/item.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Serov&lt;/strong&gt;
&lt;a href="../../en/blog/index.html"&gt;Blog&lt;/a&gt;
&lt;a href="../../en/page/about.html"&gt;About me&lt;/a&gt;
&lt;a href="../../en/page/cv.html"&gt;CV&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../../en/blog/PSKOV_ITEM_URL"&gt;EN&lt;/a&gt;
&lt;a href="../../ru/blog/PSKOV_ITEM_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;h1&gt;In the blog...&lt;/h1&gt;
&lt;div class="contents"&gt;
&lt;h2 class="itemTitle"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;PSKOV_ITEM_TITLE&lt;/a&gt;
&lt;/h2&gt;
&lt;p class="itemDate"&gt;PSKOV_ITEM_DATE&lt;/p&gt;
PSKOV_ITEM_CONTENTS
&lt;/div&gt;
&lt;div id="footer"&gt;
This sample web site has been generated by &lt;a href="http://opengamestudio.org/pskov"&gt;PSKOV&lt;/a&gt;.
&lt;/div&gt;
&lt;/center&gt;
&lt;/body&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
<li><p>Содержимое <code>ru/blog/item.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Серов&lt;/strong&gt;
&lt;a href="../../ru/blog/index.html"&gt;Блог&lt;/a&gt;
&lt;a href="../../ru/page/about.html"&gt;Обо мне&lt;/a&gt;
&lt;a href="../../ru/page/cv.html"&gt;Резюме&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../../en/blog/PSKOV_ITEM_URL"&gt;EN&lt;/a&gt;
&lt;a href="../../ru/blog/PSKOV_ITEM_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;h1&gt;В блоге...&lt;/h1&gt;
&lt;div class="contents"&gt;
&lt;h2 class="itemTitle"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;PSKOV_ITEM_TITLE&lt;/a&gt;
&lt;/h2&gt;
&lt;p class="itemDate"&gt;PSKOV_ITEM_DATE&lt;/p&gt;
PSKOV_ITEM_CONTENTS
&lt;/div&gt;
&lt;div id="footer"&gt;
Этот пример сайта сгенерирован &lt;a href="http://opengamestudio.org/pskov"&gt;ПСКОВОМ&lt;/a&gt;.
&lt;/div&gt;
&lt;/center&gt;
&lt;/body&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
</ul>
<p><strong>Внимание</strong>: начало и конец схлопнуты для краткости.</p>
<p>Как видите, оба файла выглядят практически так же, как и файлы <code>item.template</code>, рассмотренные <a href="education.04.lang.html">ранее</a>.</p>
<p>Изменения следующие:</p>
<ul>
<li>новые URL страниц в директории <code>page</code> и первой страницы с предпросмотрами в директории <code>blog</code></li>
<li>заголовок используется внутри секции <code>contents</code> в качестве ссылки на полную заметку блога</li>
<li>дата используется для подчёркивания временной зависимости между заметками блога</li>
</ul>
<p>Дату мы получаем из константы <code>PSKOV_ITEM_DATE</code>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_DATE</code></td>
<td>Значение ключа <code>Date</code> файла Markdown</td>
</tr>
</tbody>
</table>
<p><a name="preview"/></p>
<h2 id="04">04. Изучите шаблоны предпросмотров</h2>
<ul>
<li><p>Содержимое <code>en/blog/preview.template</code>:</p>
<pre><code>&lt;div class="contents"&gt;
&lt;h2 class="itemTitle"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;PSKOV_ITEM_TITLE&lt;/a&gt;
&lt;/h2&gt;
&lt;p class="itemDate"&gt;PSKOV_ITEM_DATE&lt;/p&gt;
PSKOV_PREVIEW
&lt;div class="itemMore"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;Continue reading&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre></li>
<li><p>Содержимое <code>ru/blog/preview.template</code>:</p>
<pre><code>&lt;div class="contents"&gt;
&lt;h2 class="itemTitle"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;PSKOV_ITEM_TITLE&lt;/a&gt;
&lt;/h2&gt;
&lt;p class="itemDate"&gt;PSKOV_ITEM_DATE&lt;/p&gt;
PSKOV_PREVIEW
&lt;div class="itemMore"&gt;
&lt;a href="PSKOV_ITEM_URL"&gt;Читать дальше&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre></li>
</ul>
<p>У предпросмотров нет <code>&lt;head&gt;</code>, <code>&lt;body&gt;</code> и прочих полностраничных тэгов HTML. Предпросмотры являются секциями, вставляемыми в страницы с предпросмотрами.</p>
<p>Сам предпросмотр мы получаем из константы <code>PSKOV_PREVIEW</code>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_PREVIEW</code></td>
<td>Предоставляет содержимое файла Markdown, ограниченное <code>previewSize</code> символами (приблизительно)</td>
</tr>
</tbody>
</table>
<p><a name="index"/></p>
<h2 id="05">05. Изучите шаблоны страниц с предпросмотрами</h2>
<ul>
<li><p>Содержимое <code>en/blog/index.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Serov&lt;/strong&gt;
&lt;a href="../../en/blog/index.html"&gt;Blog&lt;/a&gt;
&lt;a href="../../en/page/about.html"&gt;About me&lt;/a&gt;
&lt;a href="../../en/page/cv.html"&gt;CV&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../../en/blog/PSKOV_INDEX_URL"&gt;EN&lt;/a&gt;
&lt;a href="../../ru/blog/PSKOV_INDEX_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;h1&gt;Blog&lt;/h1&gt;
PSKOV_PREVIEWS
PSKOV_PAGINATION
&lt;div id="footer"&gt;
This sample web site has been generated by &lt;a href="http://opengamestudio.org/pskov"&gt;PSKOV&lt;/a&gt;.
&lt;/div&gt;
&lt;/center&gt;
&lt;/body&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
<li><p>Содержимое <code>ru/blog/index.template</code>:</p>
<pre><code>- - - - Схлопнуто для краткости - - - -
&lt;body&gt;
&lt;div id="header"&gt;
&lt;strong&gt;Серов&lt;/strong&gt;
&lt;a href="../../ru/blog/index.html"&gt;Блог&lt;/a&gt;
&lt;a href="../../ru/page/about.html"&gt;Обо мне&lt;/a&gt;
&lt;a href="../../ru/page/cv.html"&gt;Резюме&lt;/a&gt;
&lt;div id="lang"&gt;
&lt;a href="../../en/blog/PSKOV_INDEX_URL"&gt;EN&lt;/a&gt;
&lt;a href="../../ru/blog/PSKOV_INDEX_URL"&gt;RU&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;h1&gt;Блог&lt;/h1&gt;
PSKOV_PREVIEWS
PSKOV_PAGINATION
&lt;div id="footer"&gt;
Этот пример сайта сгенерирован &lt;a href="http://opengamestudio.org/pskov"&gt;ПСКОВОМ&lt;/a&gt;.
&lt;/div&gt;
&lt;/center&gt;
&lt;/body&gt;
- - - - Схлопнуто для краткости - - - -
</code></pre></li>
</ul>
<p><strong>Замечания</strong>:</p>
<ul>
<li>начало и конец схлопнуты для краткости</li>
<li>константа <code>PSKOV_INDEX_URL</code> используется для выбора языка</li>
</ul>
<p>Новые константы <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_INDEX_URL</code></td>
<td>Предоставляет генерируемое имя файла страницы с предпросмотрами: <code>&lt;previewsPageBaseName&gt;&lt;id&gt;.html</code></td>
</tr>
<tr>
<td><code>PSKOV_PREVIEWS</code></td>
<td>Предоставляет набор предпросмотров</td>
</tr>
<tr>
<td><code>PSKOV_PAGINATION</code></td>
<td>Предоставляет секцию для перехода между страницами с предпросмотрами</td>
</tr>
</tbody>
</table>
<p><a name="pagination"/></p>
<h2 id="06">06. Изучите постраничные шаблоны</h2>
<p>Постраничные шаблоны являются секциями HTML для перехода между страницами с предпросмотрами.</p>
<p>Существует три постраничных шаблона:</p>
<table>
<thead>
<tr>
<th>Постраничный шаблон</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td>Предыдущий</td>
<td>Посетитель может перейти лишь назад</td>
</tr>
<tr>
<td>Следующий</td>
<td>Посетитель может перейти лишь вперёд</td>
</tr>
<tr>
<td>Оба</td>
<td>Посетитель может перейти либо вперёд, либо назад</td>
</tr>
</tbody>
</table>
<p>Рассмотрим английские постраничные шаблоны:</p>
<ul>
<li><p>Содержимое <code>en/blog/pagination.prev.template</code>:</p>
<pre><code>&lt;p&gt;Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT&lt;/p&gt;
&lt;p&gt;
&lt;a href="PSKOV_PREV_PAGE_URL"&gt;« Newer&lt;/a&gt;
&lt;/p&gt;
</code></pre></li>
<li><p>Содержимое <code>en/blog/pagination.next.template</code>:</p>
<pre><code>&lt;p&gt;Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT&lt;/p&gt;
&lt;p&gt;
&lt;a href="PSKOV_NEXT_PAGE_URL"&gt;Older »&lt;/a&gt;
&lt;/p&gt;
</code></pre></li>
<li><p>Содержимое <code>en/blog/pagination.template</code>:</p>
<pre><code>&lt;p&gt;Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT&lt;/p&gt;
&lt;p&gt;
&lt;a href="PSKOV_PREV_PAGE_URL"&gt;« Newer&lt;/a&gt;
&lt;a href="PSKOV_NEXT_PAGE_URL"&gt;Older »&lt;/a&gt;
&lt;/p&gt;
</code></pre></li>
</ul>
<p>Русские версии выглядят схожим образом. Например, содержимое <code>ru/blog/pagination.template</code>:</p>
<pre><code>&lt;p&gt;Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT&lt;/p&gt;
&lt;p&gt;
&lt;a href="PSKOV_PREV_PAGE_URL"&gt;« Новее&lt;/a&gt;
&lt;a href="PSKOV_NEXT_PAGE_URL"&gt;Старее »&lt;/a&gt;
&lt;/p&gt;
</code></pre>
<p>Новые константы <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_PAGE_ID</code></td>
<td>Предоставляет порядковый номер страницы с предпросмотрами, начиная с <code>1</code></td>
</tr>
<tr>
<td><code>PSKOV_PAGES_COUNT</code></td>
<td>Предоставляет количество сгенерированных страниц с предпросмотрами</td>
</tr>
<tr>
<td><code>PSKOV_PREV_PAGE_URL</code></td>
<td>Предоставляет имя файла предыдущей страницы с предпросмотрами</td>
</tr>
<tr>
<td><code>PSKOV_NEXT_PAGE_URL</code></td>
<td>Предоставляет имя файла следующей страницы с предпросмотрами</td>
</tr>
</tbody>
</table>
<p><a name="md"/></p>
<h2 id="07markdown">07. Изучите файлы Markdown</h2>
<p>Файлы Markdown являются заметками блога, они похожи на файлы Markdown обычных страниц. Вот как выглядит содержимое <code>en/blog/1885.md</code>:</p>
<pre><code> Title: Bullocks
Date: 1885
Slug: 1885.01.bullocks
![Bullocks][bullocks]
I've been painting "Bullocks" sketch while I was staying in Odessa at Kuznetsov's in 1885.
[bullocks]: https://upload.wikimedia.org/wikipedia/commons/c/cb/Walentin_Aleksandrovich_Serov_Bullocks.jpg
</code></pre>
<p>Заметки блога сортируются по дате: новые заметки размещаются перед старыми.</p>
<table>
<thead>
<tr>
<th>Ключ заголовка</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Date</code></td>
<td>Предоставляет значение для константы <code>PSKOV_ITEM_DATE</code> при генерации HTML из Markdown</td>
</tr>
</tbody>
</table>
<p><a name="gen"/></p>
<h2 id="08">08. Запустите ЛФСД и сгенерируйте сайт</h2>
<p>Запустите <a href="http://opengamestudio.org/lfsa/ru">ЛФСД</a> с указанием директории, содержащей только что рассмотренные файлы:</p>
<pre><code>$ /путь/до/lfsa_1.0.0.py /путь/до/директории/03.Blog
</code></pre>
<p>Сгенерируйте сайт:</p>
<ul>
<li>Перейдите на страницу <a href="http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html">Инструмент</a></li>
<li>Нажмите кнопку <code>Генерировать</code></li>
<li>Откройте сгенерированный файл <code>en/blog/index.html</code> или <code>ru/blog/index.html</code> из директории сайта</li>
<li>Осуществите переход между страницами предпросмотра</li>
</ul>
<p><a name="summary"/></p>
<h2 id="09">09. Итог</h2>
<p>Вы успешно сгенерировали веб-сайт с "динамическими" страницами блога. <a href="http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html">Проверьте результат</a>.</p>
<p>Представлены константы <strong>ПСКОВА</strong>:</p>
<table>
<thead>
<tr>
<th>Константа ПСКОВА</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PSKOV_ITEM_DATE</code></td>
<td>Значение ключа <code>Date</code> файла Markdown</td>
</tr>
<tr>
<td><code>PSKOV_PREVIEW</code></td>
<td>Предоставляет содержимое файла Markdown, ограниченное <code>previewSize</code> символами (приблизительно)</td>
</tr>
<tr>
<td><code>PSKOV_INDEX_URL</code></td>
<td>Предоставляет генерируемое имя файла страницы с предпросмотрами: <code>&lt;previewsPageBaseName&gt;&lt;id&gt;.html</code></td>
</tr>
<tr>
<td><code>PSKOV_PREVIEWS</code></td>
<td>Предоставляет набор предпросмотров</td>
</tr>
<tr>
<td><code>PSKOV_PAGINATION</code></td>
<td>Предоставляет секцию для перехода между страницами с предпросмотрами</td>
</tr>
<tr>
<td><code>PSKOV_PAGE_ID</code></td>
<td>Предоставляет порядковый номер страницы с предпросмотрами, начиная с <code>1</code></td>
</tr>
<tr>
<td><code>PSKOV_PAGES_COUNT</code></td>
<td>Предоставляет количество сгенерированных страниц с предпросмотрами</td>
</tr>
<tr>
<td><code>PSKOV_PREV_PAGE_URL</code></td>
<td>Предоставляет имя файла предыдущей страницы с предпросмотрами</td>
</tr>
<tr>
<td><code>PSKOV_NEXT_PAGE_URL</code></td>
<td>Предоставляет имя файла следующей страницы с предпросмотрами</td>
</tr>
</tbody>
</table>
<p>Представлены ключи настроек:</p>
<table>
<thead>
<tr>
<th>Ключ</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>preview</code></td>
<td>Указывает на шаблон HTML, используемый для генерации предпросмотра HTML из первых <code>previewSize</code> (приблизительно) символов для каждого файла Markdown</td>
</tr>
<tr>
<td><code>index</code></td>
<td>Указывает на шаблон HTML, используемый для генерации страницы с предпросмотрами</td>
</tr>
<tr>
<td><code>paginationPrev</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходом лишь на предыдущую страницу</td>
</tr>
<tr>
<td><code>paginationNext</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходм лишь на следующую страницу</td>
</tr>
<tr>
<td><code>paginationPrevNext</code></td>
<td>Указывает на шаблон HTML, используемый для генерации секции с переходами по страницам</td>
</tr>
<tr>
<td><code>previewSize</code></td>
<td>Количество символов (приблизительное) из файла Markdown, используемое для генерации предпросмотра</td>
</tr>
<tr>
<td><code>previewEnding</code></td>
<td>Строка для добавления в конец каждого предпросмотра</td>
</tr>
<tr>
<td><code>previewsPerPage</code></td>
<td>Максимальное количество предпросмотров, умещающееся на странице с предпросмотрами</td>
</tr>
<tr>
<td><code>previewsPageBaseName</code></td>
<td>Базовое имя файла для страниц с предпросмотрами</td>
</tr>
</tbody>
</table>
<p>Представлены ключи заголовка:</p>
<table>
<thead>
<tr>
<th>Ключ заголовка</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Date</code></td>
<td>Предоставляет значение для константы <code>PSKOV_ITEM_DATE</code> при генерации HTML из Markdown</td>
</tr>
</tbody>
</table>
<p>Это был последний документ, призванный научить вас уверенно владеть генератором статических сайтов <strong>ПСКОВ</strong>. Если вам нравится наш труд, присоединяйтесь к нам в <a href="https://vk.com/opengamestudo">VK</a>, <a href="https://twitter.com/OpenGameStudio">Twitter</a> или <a href="https://www.facebook.com/groups/162611230470183">Facebook</a>.</p>
<p>А теперь используйте <strong>ПСКОВ</strong> для генерация своего собственного веб-сайта!</p>
<p></div><div class="contents"></p>
<table>
<thead>
<tr>
<th>&lt; Назад</th>
<th>Начало</th>
<th>Далее &gt;</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="education.04.lang.html">04. Язык</a></td>
<td><a href="education.html">Обучение</a></td>
<td>Отсутствует</td>
</tr>
</tbody>
</table>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

View File

@@ -0,0 +1,480 @@
Title: Обучение: 05. Блог
Date: 2019-06-19 00:00
Category: Page
Slug: education.05.blog
Lang: ru
| < Назад | Начало | Далее > |
|---|---|---|
| [04. Язык][prev] | [Обучение][index] | Отсутствует |
</div><div class="contents">
В этом документе мы создадим "динамические" страницы блога.
Ожидаемое время завершения: 20 минут.
**Содержание**
* [01. Блог](#blog)
* [02. Изучите файл `pskov.cfg`](#cfg)
* [03. Изучите шаблоны элементов](#item)
* [04. Изучите шаблоны предпросмотров](#preview)
* [05. Изучите шаблоны страниц с предпросмотрами](#index)
* [06. Изучите постраничные шаблоны](#pagination)
* [07. Изучите файлы Markdown](#md)
* [08. Запустите ЛФСД и сгенерируйте сайт](#gen)
* [09. Итог](#summary)
<a name="blog"/>
## 01. Блог
Итак, у вас есть веб-сайт на Английском и Русском языках. Вы начинаете ощущать желание регулярно делиться своими мыслями с миром в виде заметок блога.
Вы создаёте директорию со [следующей структурой файлов][03-files]:
* `pskov.cfg`
* `en/blog/`
* `item.template`
* `index.template`
* `preview.template`
* `pagination.template`
* `pagination.prev.template`
* `pagination.next.template`
* `1885.md`
* `1886.01.md`
* `1886.02.md`
* `1887.01.md`
* `1887.02.md`
* `1888.md`
* `1896.md`
* `1899.md`
* `en/page/`
* `item.template`
* `about.md`
* `cv.md`
* `ru/blog/`
* `item.template`
* `index.template`
* `preview.template`
* `pagination.template`
* `pagination.prev.template`
* `pagination.next.template`
* `1885.md`
* `1886.01.md`
* `1886.02.md`
* `1887.01.md`
* `1887.02.md`
* `1888.md`
* `1896.md`
* `1899.md`
* `ru/page/`
* `item.template`
* `about.md`
* `cv.md`
Давайте взглянем на содержимое этих файлов.
<a name="cfg"/>
## 02. Изучите файл `pskov.cfg`
Файл `pskov.cfg` содержит следующее:
```
input = en/page;ru/page;en/blog;ru/blog
item = item.template
preview = preview.template
index = index.template
paginationPrev = pagination.prev.template
paginationNext = pagination.next.template
paginationPrevNext = pagination.template
previewSize = 200
previewEnding = . . .
previewsPerPage = 3
previewPageBaseName = index
```
Вы уже встречались с ключами `input` и `item`. Рассмотрим остальные:
| Ключ | Описание |
|---|---|
| `preview` | Указывает на шаблон HTML, используемый для генерации предпросмотра HTML из первых `previewSize` (приблизительно) символов для каждого файла Markdown |
| `index` | Указывает на шаблон HTML, используемый для генерации страницы с предпросмотрами |
| `paginationPrev` | Указывает на шаблон HTML, используемый для генерации секции с переходом лишь на предыдущую страницу |
| `paginationNext` | Указывает на шаблон HTML, используемый для генерации секции с переходм лишь на следующую страницу |
| `paginationPrevNext` | Указывает на шаблон HTML, используемый для генерации секции с переходами по страницам |
| `previewSize` | Количество символов (приблизительное) из файла Markdown, используемое для генерации предпросмотра |
| `previewEnding` | Строка для добавления в конец каждого предпросмотра |
| `previewsPerPage` | Максимальное количество предпросмотров, умещающееся на странице с предпросмотрами |
| `previewsPageBaseName` | Базовое имя файла для страниц с предпросмотрами |
В нашем случае:
* мы ограничиваем предпросмотр `200` символами (приблизительно)
* мы используем строку `. . .` в конце каждого предпросмотра
* страницы с предпросмотрами вмещают максимум `3` предпросмотра
* страницы с предпросмотрами будут сохранены как `index.html`, `index2.html`, `index3.html` и т.д.
<a name="item"/>
## 03. Изучите шаблоны элементов
* Содержимое `en/blog/item.template`:
```
- - - - Схлопнуто для краткости - - - -
<body>
<div id="header">
<strong>Serov</strong>
<a href="../../en/blog/index.html">Blog</a>
<a href="../../en/page/about.html">About me</a>
<a href="../../en/page/cv.html">CV</a>
<div id="lang">
<a href="../../en/blog/PSKOV_ITEM_URL">EN</a>
<a href="../../ru/blog/PSKOV_ITEM_URL">RU</a>
</div>
</div>
<center>
<h1>In the blog...</h1>
<div class="contents">
<h2 class="itemTitle">
<a href="PSKOV_ITEM_URL">PSKOV_ITEM_TITLE</a>
</h2>
<p class="itemDate">PSKOV_ITEM_DATE</p>
PSKOV_ITEM_CONTENTS
</div>
<div id="footer">
This sample web site has been generated by <a href="http://opengamestudio.org/pskov">PSKOV</a>.
</div>
</center>
</body>
- - - - Схлопнуто для краткости - - - -
```
* Содержимое `ru/blog/item.template`:
```
- - - - Схлопнуто для краткости - - - -
<body>
<div id="header">
<strong>Серов</strong>
<a href="../../ru/blog/index.html">Блог</a>
<a href="../../ru/page/about.html">Обо мне</a>
<a href="../../ru/page/cv.html">Резюме</a>
<div id="lang">
<a href="../../en/blog/PSKOV_ITEM_URL">EN</a>
<a href="../../ru/blog/PSKOV_ITEM_URL">RU</a>
</div>
</div>
<center>
<h1>В блоге...</h1>
<div class="contents">
<h2 class="itemTitle">
<a href="PSKOV_ITEM_URL">PSKOV_ITEM_TITLE</a>
</h2>
<p class="itemDate">PSKOV_ITEM_DATE</p>
PSKOV_ITEM_CONTENTS
</div>
<div id="footer">
Этот пример сайта сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>.
</div>
</center>
</body>
- - - - Схлопнуто для краткости - - - -
```
**Внимание**: начало и конец схлопнуты для краткости.
Как видите, оба файла выглядят практически так же, как и файлы `item.template`, рассмотренные [ранее][prev].
Изменения следующие:
* новые URL страниц в директории `page` и первой страницы с предпросмотрами в директории `blog`
* заголовок используется внутри секции `contents` в качестве ссылки на полную заметку блога
* дата используется для подчёркивания временной зависимости между заметками блога
Дату мы получаем из константы `PSKOV_ITEM_DATE`:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_DATE` | Значение ключа `Date` файла Markdown |
<a name="preview"/>
## 04. Изучите шаблоны предпросмотров
* Содержимое `en/blog/preview.template`:
```
<div class="contents">
<h2 class="itemTitle">
<a href="PSKOV_ITEM_URL">PSKOV_ITEM_TITLE</a>
</h2>
<p class="itemDate">PSKOV_ITEM_DATE</p>
PSKOV_PREVIEW
<div class="itemMore">
<a href="PSKOV_ITEM_URL">Continue reading</a>
</div>
</div>
```
* Содержимое `ru/blog/preview.template`:
```
<div class="contents">
<h2 class="itemTitle">
<a href="PSKOV_ITEM_URL">PSKOV_ITEM_TITLE</a>
</h2>
<p class="itemDate">PSKOV_ITEM_DATE</p>
PSKOV_PREVIEW
<div class="itemMore">
<a href="PSKOV_ITEM_URL">Читать дальше</a>
</div>
</div>
```
У предпросмотров нет `<head>`, `<body>` и прочих полностраничных тэгов HTML. Предпросмотры являются секциями, вставляемыми в страницы с предпросмотрами.
Сам предпросмотр мы получаем из константы `PSKOV_PREVIEW`:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_PREVIEW` | Предоставляет содержимое файла Markdown, ограниченное `previewSize` символами (приблизительно) |
<a name="index"/>
## 05. Изучите шаблоны страниц с предпросмотрами
* Содержимое `en/blog/index.template`:
```
- - - - Схлопнуто для краткости - - - -
<body>
<div id="header">
<strong>Serov</strong>
<a href="../../en/blog/index.html">Blog</a>
<a href="../../en/page/about.html">About me</a>
<a href="../../en/page/cv.html">CV</a>
<div id="lang">
<a href="../../en/blog/PSKOV_INDEX_URL">EN</a>
<a href="../../ru/blog/PSKOV_INDEX_URL">RU</a>
</div>
</div>
<center>
<h1>Blog</h1>
PSKOV_PREVIEWS
PSKOV_PAGINATION
<div id="footer">
This sample web site has been generated by <a href="http://opengamestudio.org/pskov">PSKOV</a>.
</div>
</center>
</body>
- - - - Схлопнуто для краткости - - - -
```
* Содержимое `ru/blog/index.template`:
```
- - - - Схлопнуто для краткости - - - -
<body>
<div id="header">
<strong>Серов</strong>
<a href="../../ru/blog/index.html">Блог</a>
<a href="../../ru/page/about.html">Обо мне</a>
<a href="../../ru/page/cv.html">Резюме</a>
<div id="lang">
<a href="../../en/blog/PSKOV_INDEX_URL">EN</a>
<a href="../../ru/blog/PSKOV_INDEX_URL">RU</a>
</div>
</div>
<center>
<h1>Блог</h1>
PSKOV_PREVIEWS
PSKOV_PAGINATION
<div id="footer">
Этот пример сайта сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>.
</div>
</center>
</body>
- - - - Схлопнуто для краткости - - - -
```
**Замечания**:
* начало и конец схлопнуты для краткости
* константа `PSKOV_INDEX_URL` используется для выбора языка
Новые константы **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_INDEX_URL` | Предоставляет генерируемое имя файла страницы с предпросмотрами: `<previewsPageBaseName><id>.html` |
| `PSKOV_PREVIEWS` | Предоставляет набор предпросмотров |
| `PSKOV_PAGINATION` | Предоставляет секцию для перехода между страницами с предпросмотрами |
<a name="pagination"/>
## 06. Изучите постраничные шаблоны
Постраничные шаблоны являются секциями HTML для перехода между страницами с предпросмотрами.
Существует три постраничных шаблона:
| Постраничный шаблон | Описание |
|---|---|
| Предыдущий | Посетитель может перейти лишь назад |
| Следующий | Посетитель может перейти лишь вперёд |
| Оба | Посетитель может перейти либо вперёд, либо назад |
Рассмотрим английские постраничные шаблоны:
* Содержимое `en/blog/pagination.prev.template`:
```
<p>Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT</p>
<p>
<a href="PSKOV_PREV_PAGE_URL">« Newer</a>
</p>
```
* Содержимое `en/blog/pagination.next.template`:
```
<p>Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT</p>
<p>
<a href="PSKOV_NEXT_PAGE_URL">Older »</a>
</p>
```
* Содержимое `en/blog/pagination.template`:
```
<p>Page PSKOV_PAGE_ID of PSKOV_PAGES_COUNT</p>
<p>
<a href="PSKOV_PREV_PAGE_URL">« Newer</a>
<a href="PSKOV_NEXT_PAGE_URL">Older »</a>
</p>
```
Русские версии выглядят схожим образом. Например, содержимое `ru/blog/pagination.template`:
```
<p>Страница PSKOV_PAGE_ID из PSKOV_PAGES_COUNT</p>
<p>
<a href="PSKOV_PREV_PAGE_URL">« Новее</a>
<a href="PSKOV_NEXT_PAGE_URL">Старее »</a>
</p>
```
Новые константы **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_PAGE_ID` | Предоставляет порядковый номер страницы с предпросмотрами, начиная с `1` |
| `PSKOV_PAGES_COUNT` | Предоставляет количество сгенерированных страниц с предпросмотрами |
| `PSKOV_PREV_PAGE_URL` | Предоставляет имя файла предыдущей страницы с предпросмотрами |
| `PSKOV_NEXT_PAGE_URL` | Предоставляет имя файла следующей страницы с предпросмотрами |
<a name="md"/>
## 07. Изучите файлы Markdown
Файлы Markdown являются заметками блога, они похожи на файлы Markdown обычных страниц. Вот как выглядит содержимое `en/blog/1885.md`:
```
Title: Bullocks
Date: 1885
Slug: 1885.01.bullocks
![Bullocks][bullocks]
I've been painting "Bullocks" sketch while I was staying in Odessa at Kuznetsov's in 1885.
[bullocks]: https://upload.wikimedia.org/wikipedia/commons/c/cb/Walentin_Aleksandrovich_Serov_Bullocks.jpg
```
Заметки блога сортируются по дате: новые заметки размещаются перед старыми.
| Ключ заголовка | Описание |
|---|---|
| `Date` | Предоставляет значение для константы `PSKOV_ITEM_DATE` при генерации HTML из Markdown |
<a name="gen"/>
## 08. Запустите ЛФСД и сгенерируйте сайт
Запустите [ЛФСД][lfsa] с указанием директории, содержащей только что рассмотренные файлы:
```
$ /путь/до/lfsa_1.0.0.py /путь/до/директории/03.Blog
```
Сгенерируйте сайт:
* Перейдите на страницу [Инструмент][tool]
* Нажмите кнопку `Генерировать`
* Откройте сгенерированный файл `en/blog/index.html` или `ru/blog/index.html` из директории сайта
* Осуществите переход между страницами предпросмотра
<a name="summary"/>
## 09. Итог
Вы успешно сгенерировали веб-сайт с "динамическими" страницами блога. [Проверьте результат][03-sample].
Представлены константы **ПСКОВА**:
| Константа ПСКОВА | Описание |
|---|---|
| `PSKOV_ITEM_DATE` | Значение ключа `Date` файла Markdown |
| `PSKOV_PREVIEW` | Предоставляет содержимое файла Markdown, ограниченное `previewSize` символами (приблизительно) |
| `PSKOV_INDEX_URL` | Предоставляет генерируемое имя файла страницы с предпросмотрами: `<previewsPageBaseName><id>.html` |
| `PSKOV_PREVIEWS` | Предоставляет набор предпросмотров |
| `PSKOV_PAGINATION` | Предоставляет секцию для перехода между страницами с предпросмотрами |
| `PSKOV_PAGE_ID` | Предоставляет порядковый номер страницы с предпросмотрами, начиная с `1` |
| `PSKOV_PAGES_COUNT` | Предоставляет количество сгенерированных страниц с предпросмотрами |
| `PSKOV_PREV_PAGE_URL` | Предоставляет имя файла предыдущей страницы с предпросмотрами |
| `PSKOV_NEXT_PAGE_URL` | Предоставляет имя файла следующей страницы с предпросмотрами |
Представлены ключи настроек:
| Ключ | Описание |
|---|---|
| `preview` | Указывает на шаблон HTML, используемый для генерации предпросмотра HTML из первых `previewSize` (приблизительно) символов для каждого файла Markdown |
| `index` | Указывает на шаблон HTML, используемый для генерации страницы с предпросмотрами |
| `paginationPrev` | Указывает на шаблон HTML, используемый для генерации секции с переходом лишь на предыдущую страницу |
| `paginationNext` | Указывает на шаблон HTML, используемый для генерации секции с переходм лишь на следующую страницу |
| `paginationPrevNext` | Указывает на шаблон HTML, используемый для генерации секции с переходами по страницам |
| `previewSize` | Количество символов (приблизительное) из файла Markdown, используемое для генерации предпросмотра |
| `previewEnding` | Строка для добавления в конец каждого предпросмотра |
| `previewsPerPage` | Максимальное количество предпросмотров, умещающееся на странице с предпросмотрами |
| `previewsPageBaseName` | Базовое имя файла для страниц с предпросмотрами |
Представлены ключи заголовка:
| Ключ заголовка | Описание |
|---|---|
| `Date` | Предоставляет значение для константы `PSKOV_ITEM_DATE` при генерации HTML из Markdown |
Это был последний документ, призванный научить вас уверенно владеть генератором статических сайтов **ПСКОВ**. Если вам нравится наш труд, присоединяйтесь к нам в [VK][vk], [Twitter][tw] или [Facebook][fb].
А теперь используйте **ПСКОВ** для генерация своего собственного веб-сайта!
</div><div class="contents">
| < Назад | Начало | Далее > |
|---|---|---|
| [04. Язык][prev] | [Обучение][index] | Отсутствует |
[index]: education.html
[prev]: education.04.lang.html
[03-files]: https://github.com/OGStudio/site-pskov-sample/tree/master/03.Blog
[03-sample]: http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html
[lfsa]: http://opengamestudio.org/lfsa/ru
[tool]: http://opengamestudio.org/pskov/ru/pskov_1.0.0+ru.html
[vk]: https://vk.com/opengamestudo
[tw]: https://twitter.com/OpenGameStudio
[fb]: https://www.facebook.com/groups/162611230470183

241
pskov/ru/education.html Normal file
View File

@@ -0,0 +1,241 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/education.html">EN</a>
<a href="../ru/education.html">RU</a>
</div>
</div>
<center><h1>
Обучение
</h1></center>
<center><div class="contents">
<p>Представленные здесь документы научат вас уверенно владеть генератором статических сайтов <strong>ПСКОВ</strong>. Советуем читать документы по порядку.</p>
<h2 id="01why"><a href="education.01.why.html">01. Почему</a></h2>
<table>
<thead>
<tr>
<th>Свойство</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>Описание</td>
<td>Узнайте причины создания <strong>ПСКОВА</strong></td>
</tr>
<tr>
<td>Ожидаемое время завершения</td>
<td>5 минут</td>
</tr>
</tbody>
</table>
<h2 id="02deps"><a href="education.02.deps.html">02. Зависимости</a></h2>
<table>
<thead>
<tr>
<th>Свойство</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>Описание</td>
<td>Установите зависимости, чтобы начать использовать <strong>ПСКОВ</strong></td>
</tr>
<tr>
<td>Ожидаемое время завершения</td>
<td>5 минут</td>
</tr>
</tbody>
</table>
<h2 id="03site"><a href="education.03.site.html">03. Сайт</a></h2>
<table>
<thead>
<tr>
<th>Свойство</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>Описание</td>
<td>Научитесь создавать простой статический сайт с двумя страницами</td>
</tr>
<tr>
<td>Ожидаемое время завершения</td>
<td>10 минут</td>
</tr>
<tr>
<td>Демонстрация</td>
<td><a href="http://opengamestudio.org/pskov/sample/01.TwoPages/about.html">ДвеСтраницы</a></td>
</tr>
<tr>
<td>Представленные константы ПСКОВА</td>
<td><ol> <li><code>PSKOV_ITEM_TITLE</code></li> <li><code>PSKOV_ITEM_CONTENTS</code></li> </ol></td>
</tr>
<tr>
<td>Представленные ключи настроек</td>
<td><ol> <li><code>input</code></li> <li><code>item</code></li> </ol></td>
</tr>
<tr>
<td>Представленные ключи заголовка</td>
<td><ol> <li><code>Title</code></li> <li><code>Slug</code></li> </ol></td>
</tr>
</tbody>
</table>
<h2 id="04lang"><a href="education.04.lang.html">04. Язык</a></h2>
<table>
<thead>
<tr>
<th>Свойство</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>Описание</td>
<td>Научитесь добавлять выбор языка</td>
</tr>
<tr>
<td>Ожидаемое время завершения</td>
<td>10 минут</td>
</tr>
<tr>
<td>Демонстрация</td>
<td><a href="http://opengamestudio.org/pskov/sample/02.Language/ru/about.html">Язык</a></td>
</tr>
<tr>
<td>Представленные константы ПСКОВА</td>
<td><ol> <li><code>PSKOV_ITEM_URL</code></li> </ol></td>
</tr>
</tbody>
</table>
<h2 id="05blog"><a href="education.05.blog.html">05. Блог</a></h2>
<table>
<thead>
<tr>
<th>Свойство</th>
<th>Подробности</th>
</tr>
</thead>
<tbody>
<tr>
<td>Описание</td>
<td>Научитесь создавать "динамические" страницы для блога</td>
</tr>
<tr>
<td>Ожидаемое время завершения</td>
<td>20 минут</td>
</tr>
<tr>
<td>Демонстрация</td>
<td><a href="http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html">Блог</a></td>
</tr>
<tr>
<td>Представленные константы ПСКОВА</td>
<td><ol> <li><code>PSKOV_ITEM_DATE</code></li> <li><code>PSKOV_PREVIEW</code></li> <li><code>PSKOV_INDEX_URL</code></li> <li><code>PSKOV_PREVIEWS</code></li> <li><code>PSKOV_PAGINATION</code></li> <li><code>PSKOV_PAGE_ID</code></li> <li><code>PSKOV_PAGES_COUNT</code></li> <li><code>PSKOV_PREV_PAGE_URL</code></li> <li><code>PSKOV_NEXT_PAGE_URL</code></li> </ol></td>
</tr>
<tr>
<td>Представленные ключи настроек</td>
<td><ol> <li><code>preview</code></li> <li><code>index</code></li> <li><code>paginationPrev</code></li> <li><code>paginationNext</code></li> <li><code>paginationPrevNext</code></li> <li><code>previewSize</code></li> <li><code>previewEnding</code></li> <li><code>previewsPerPage</code></li> <li><code>previewsPageBaseName</code></li> </ol></td>
</tr>
<tr>
<td>Представленные ключи заголовка</td>
<td><ol> <li><code>Date</code></li> </ol></td>
</tr>
</tbody>
</table>
<p>Если вам нравится наш труд, присоединяйтесь к нам в <a href="https://vk.com/opengamestudo">VK</a>, <a href="https://twitter.com/OpenGameStudio">Twitter</a> или <a href="https://www.facebook.com/groups/162611230470183">Facebook</a>.</p>
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

68
pskov/ru/education.md Normal file
View File

@@ -0,0 +1,68 @@
Title: Обучение
Date: 2019-06-18 00:00
Category: Page
Slug: education
Lang: ru
Представленные здесь документы научат вас уверенно владеть генератором статических сайтов **ПСКОВ**. Советуем читать документы по порядку.
## [01. Почему][why]
| Свойство | Подробности |
|---|---|
| Описание | Узнайте причины создания **ПСКОВА** |
| Ожидаемое время завершения | 5 минут |
## [02. Зависимости][deps]
| Свойство | Подробности |
|---|---|
| Описание | Установите зависимости, чтобы начать использовать **ПСКОВ** |
| Ожидаемое время завершения | 5 минут |
## [03. Сайт][site]
| Свойство | Подробности |
|---|---|
| Описание | Научитесь создавать простой статический сайт с двумя страницами |
| Ожидаемое время завершения | 10 минут |
| Демонстрация | [ДвеСтраницы][01-sample] |
| Представленные константы ПСКОВА | <ol> <li>`PSKOV_ITEM_TITLE`</li> <li>`PSKOV_ITEM_CONTENTS`</li> </ol> |
| Представленные ключи настроек | <ol> <li>`input`</li> <li>`item`</li> </ol> |
| Представленные ключи заголовка | <ol> <li>`Title`</li> <li>`Slug`</li> </ol> |
## [04. Язык][lang]
| Свойство | Подробности |
|---|---|
| Описание | Научитесь добавлять выбор языка |
| Ожидаемое время завершения | 10 минут |
| Демонстрация | [Язык][02-sample] |
| Представленные константы ПСКОВА | <ol> <li>`PSKOV_ITEM_URL`</li> </ol> |
## [05. Блог][blog]
| Свойство | Подробности |
|---|---|
| Описание | Научитесь создавать "динамические" страницы для блога |
| Ожидаемое время завершения | 20 минут |
| Демонстрация | [Блог][03-sample] |
| Представленные константы ПСКОВА | <ol> <li>`PSKOV_ITEM_DATE`</li> <li>`PSKOV_PREVIEW`</li> <li>`PSKOV_INDEX_URL`</li> <li>`PSKOV_PREVIEWS`</li> <li>`PSKOV_PAGINATION`</li> <li>`PSKOV_PAGE_ID`</li> <li>`PSKOV_PAGES_COUNT`</li> <li>`PSKOV_PREV_PAGE_URL`</li> <li>`PSKOV_NEXT_PAGE_URL`</li> </ol> |
| Представленные ключи настроек | <ol> <li>`preview`</li> <li>`index`</li> <li>`paginationPrev`</li> <li>`paginationNext`</li> <li>`paginationPrevNext`</li> <li>`previewSize`</li> <li>`previewEnding`</li> <li>`previewsPerPage`</li> <li>`previewsPageBaseName`</li> </ol> |
| Представленные ключи заголовка | <ol> <li>`Date`</li> </ol> |
Если вам нравится наш труд, присоединяйтесь к нам в [VK][vk], [Twitter][tw] или [Facebook][fb].
[why]: education.01.why.html
[deps]: education.02.deps.html
[site]: education.03.site.html
[lang]: education.04.lang.html
[blog]: education.05.blog.html
[01-sample]: http://opengamestudio.org/pskov/sample/01.TwoPages/about.html
[02-sample]: http://opengamestudio.org/pskov/sample/02.Language/ru/about.html
[03-sample]: http://opengamestudio.org/pskov/sample/03.Blog/ru/blog/index.html
[vk]: https://vk.com/opengamestudo
[tw]: https://twitter.com/OpenGameStudio
[fb]: https://www.facebook.com/groups/162611230470183

105
pskov/ru/item.template Normal file
View File

@@ -0,0 +1,105 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
#header
{
background: #856d51;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
#title
{
color: #433729;
}
html
{
font-family: sans-serif;
}
body
{
line-height: 1.5em;
}
body
{
background: #FAFAFA;
}
table
{
border-collapse: collapse;
width: 100%;
}
table, th, td
{
border: 1px solid #aaa;
padding: 0.5em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
background: #f5f5f5;
white-space: pre-wrap;
}
.contents
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
color: #444;
}
#footer
{
text-align: center;
}
#lang
{
float: right;
}
</style>
<title>
PSKOV
</title>
</head>
<body>
<div id="header">
<strong id="title">ПСКОВ</strong>
<a href="pskov_1.0.0+ru.html">Инструмент</a>
<a href="education.html">Обучение</a>
<div id="lang">
<a href="../en/PSKOV_ITEM_URL">EN</a>
<a href="../ru/PSKOV_ITEM_URL">RU</a>
</div>
</div>
<center><h1>
PSKOV_ITEM_TITLE
</h1></center>
<center><div class="contents">
PSKOV_ITEM_CONTENTS
</div></center>
<div id="footer">
Сайт сгенерирован <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
из <a href="http://github.com/ogstudio/site-pskov">этого исходного кода</a>.
Сайт расположен на <a href="https://pages.github.com">GitHub Pages</a>.
</div>
<script type="text/javascript">
</script>
</body>
</html>

6931
pskov/ru/pskov_1.0.0+ru.html Normal file

File diff suppressed because it is too large Load Diff