feat: каркас v2 — Astro 5 + миграция 50 постов из WP + RSS для IPB Importer
- Astro 5 (6.3.6) minimal scaffold с Content Collections для posts/pages - Тёмная палитра в духе старой темы darkness-10 (тонкая типографика Inter+Lora) - Layout с шапкой/футером, главной-лентой, страницами категорий и одиночными постами - RSS (общий + per-category) под IPB RSS Importer: RFC-822 pubDate, <guid isPermaLink="true">, <content:encoded> с CDATA, <lastBuildDate> - RSS_CUTOFF фильтр: архив 2009-2015 на сайте остаётся, в RSS — только новые - 50 постов и 6 страниц мигрированы из WP (anotherreflctions_ru @ db.hhivp.com) через scripts/migrate-wp.mjs (HTML→md без внешних зависимостей) - sitemap.xml автоматически через @astrojs/sitemap
This commit is contained in:
146
.gitignore
vendored
146
.gitignore
vendored
@@ -1,138 +1,24 @@
|
||||
# ---> Node
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
# build output
|
||||
dist/
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
pnpm-debug.log*
|
||||
*.log
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
# environment variables
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.production
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# vitepress build output
|
||||
**/.vitepress/dist
|
||||
|
||||
# vitepress cache directory
|
||||
**/.vitepress/cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# jetbrains setting folder
|
||||
.idea/
|
||||
|
||||
4
.vscode/extensions.json
vendored
Normal file
4
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
11
.vscode/launch.json
vendored
Normal file
11
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
65
README.md
65
README.md
@@ -1,3 +1,64 @@
|
||||
# anotherreflections-website-v2
|
||||
# anotherreflections.ru — v2
|
||||
|
||||
anotherreflections.ru v2 <20> Astro 5 static site (markdown + RSS for IPB importer)
|
||||
Главный сайт-портал ролевой группы «Иные Отражения» — переделан со старого WordPress (тема `darkness-10`) на статический Astro 5.
|
||||
|
||||
## Стек
|
||||
|
||||
- **Astro 5** + Content Collections (markdown)
|
||||
- **@astrojs/rss** — RSS-фиды (общий + per-category), формат под IPB RSS Importer
|
||||
- **@astrojs/sitemap** — sitemap.xml автоматически
|
||||
- **sanitize-html** — очистка HTML тела поста для `<content:encoded>` в RSS
|
||||
|
||||
## Содержимое
|
||||
|
||||
- `src/content/posts/*.md` — 50 постов 2009–2015, мигрированы из WP (frontmatter включает `legacyId` для трассировки и `categorySlugs` для категорий)
|
||||
- `src/content/pages/*.md` — 6 страниц: `/o-nas/`, `/nashi-druzya/`, страницы про игры
|
||||
- `src/content/_categories.json` — справочник категорий из WP (10 шт.)
|
||||
- `_wp-export.json` — исходный дамп WP, оставлен в репо для трассируемости миграции; не используется в build
|
||||
|
||||
## Структура URL
|
||||
|
||||
- `/` — главная (лента всех постов)
|
||||
- `/<slug>/` — пост или статическая страница
|
||||
- `/category/<slug>/` — лента категории
|
||||
- `/feed.xml` — общий RSS
|
||||
- `/category/<slug>/feed.xml` — RSS категории
|
||||
- `/sitemap-index.xml` — sitemap
|
||||
|
||||
URL постов совпадают с историческими WP-slug, т.к. `permalink_structure='/%postname%/'`. Никаких 301-редиректов не требуется — slug сохранены 1:1.
|
||||
|
||||
## RSS для IPB Importer
|
||||
|
||||
Фид заточен под `ACP → Community → RSS Feeds → Add Feed`:
|
||||
|
||||
- RSS 2.0 strict, `<pubDate>` в RFC-822, абсолютные `<link>`
|
||||
- `<guid isPermaLink="true">` = URL поста — IPB по нему дедуплицирует темы при повторных сканах
|
||||
- `<content:encoded>` с CDATA — полное HTML тело поста, IPB подставит его в тело темы
|
||||
- `<lastBuildDate>` обновляется при каждом build — Importer проверяет, изменился ли фид
|
||||
- **Cutoff:** фид отдаёт только посты с `pubDate >= RSS_CUTOFF` (см. `src/consts.ts`). Архив 2009–2015 остаётся на сайте для людей, но в форумы не вбрасывается одной волной.
|
||||
|
||||
## Разработка
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev # http://localhost:4321
|
||||
npm run build # → dist/
|
||||
npm run preview
|
||||
```
|
||||
|
||||
## Миграция (одноразово, уже выполнено)
|
||||
|
||||
```bash
|
||||
npm run migrate # _wp-export.json → src/content/{posts,pages}/*.md
|
||||
```
|
||||
|
||||
Скрипт `scripts/migrate-wp.mjs` конвертирует HTML тела постов в markdown (минимальный конвертер без внешних зависимостей: `<a>/<strong>/<em>/<li>/<ul>/<blockquote>/<br>/<p>` + HTML entities).
|
||||
|
||||
## Деплой
|
||||
|
||||
Контейнер `nginx:alpine` на `web.hhivp.com`, шаблон по образцу `stbolshevik.ru` (CI/CD: Gitea → SSH-деплой на свободный порт). См. `CLAUDE.md` после первого деплоя.
|
||||
|
||||
## История
|
||||
|
||||
- v1: WordPress 6.9 + тема `darkness-10` + 23 активных плагина, БД `anotherreflctions_ru` (sic) на `db.hhivp.com`, контейнер `anotherreflections-ru:4080` на `web.hhivp.com`. Репо: `git.striker.su/striker/anotherreflections-website` (ветка `feat/dockerize`). Оставлен для отката.
|
||||
- v2 (этот репо): Astro 5 static, 2026-05-20.
|
||||
|
||||
1160
_wp-export.json
Normal file
1160
_wp-export.json
Normal file
File diff suppressed because one or more lines are too long
16
astro.config.mjs
Normal file
16
astro.config.mjs
Normal file
@@ -0,0 +1,16 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from 'astro/config';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://anotherreflections.ru',
|
||||
trailingSlash: 'always',
|
||||
build: {
|
||||
format: 'directory',
|
||||
},
|
||||
integrations: [
|
||||
sitemap({
|
||||
filter: (page) => !page.includes('/feed'),
|
||||
}),
|
||||
],
|
||||
});
|
||||
5037
package-lock.json
generated
Normal file
5037
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
25
package.json
Normal file
25
package.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "anotherreflections-website-v2",
|
||||
"type": "module",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=22.12.0"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro",
|
||||
"migrate": "node scripts/migrate-wp.mjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"astro": "^6.3.6",
|
||||
"@astrojs/rss": "^4.0.12",
|
||||
"@astrojs/sitemap": "^3.6.0",
|
||||
"sanitize-html": "^2.17.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/sanitize-html": "^2.16.0"
|
||||
}
|
||||
}
|
||||
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 655 B |
9
public/favicon.svg
Normal file
9
public/favicon.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
|
||||
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
|
||||
<style>
|
||||
path { fill: #000; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
path { fill: #FFF; }
|
||||
}
|
||||
</style>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 749 B |
144
scripts/migrate-wp.mjs
Normal file
144
scripts/migrate-wp.mjs
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env node
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
const EXPORT_PATH = path.join(ROOT, '_wp-export.json');
|
||||
const POSTS_DIR = path.join(ROOT, 'src/content/posts');
|
||||
const PAGES_DIR = path.join(ROOT, 'src/content/pages');
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(EXPORT_PATH, 'utf8'));
|
||||
|
||||
fs.mkdirSync(POSTS_DIR, { recursive: true });
|
||||
fs.mkdirSync(PAGES_DIR, { recursive: true });
|
||||
|
||||
const decodeEntities = (s) => s
|
||||
.replace(/ /g, ' ')
|
||||
.replace(/«/g, '«')
|
||||
.replace(/»/g, '»')
|
||||
.replace(/—/g, '—')
|
||||
.replace(/–/g, '–')
|
||||
.replace(/…/g, '…')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.replace(/'/g, "'")
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/&/g, '&');
|
||||
|
||||
const htmlToMd = (html) => {
|
||||
if (!html) return '';
|
||||
let s = html;
|
||||
// images
|
||||
s = s.replace(/<img[^>]*?src=["']([^"']+)["'][^>]*?(?:alt=["']([^"']*)["'])?[^>]*?\/?>/gi,
|
||||
(_, src, alt) => ``);
|
||||
// links
|
||||
s = s.replace(/<a\s+[^>]*?href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi,
|
||||
(_, href, text) => `[${text.replace(/<[^>]+>/g,'').trim()}](${href})`);
|
||||
// bold
|
||||
s = s.replace(/<(strong|b)\b[^>]*>([\s\S]*?)<\/\1>/gi, '**$2**');
|
||||
// italic
|
||||
s = s.replace(/<(em|i)\b[^>]*>([\s\S]*?)<\/\1>/gi, '*$2*');
|
||||
// blockquote
|
||||
s = s.replace(/<blockquote[^>]*>([\s\S]*?)<\/blockquote>/gi,
|
||||
(_, inner) => inner.trim().split(/\n+/).map(l => '> ' + l.trim()).join('\n'));
|
||||
// lists
|
||||
s = s.replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, '- $1\n');
|
||||
s = s.replace(/<\/?(ul|ol)[^>]*>/gi, '\n');
|
||||
// paragraphs
|
||||
s = s.replace(/<p[^>]*>/gi, '\n\n');
|
||||
s = s.replace(/<\/p>/gi, '\n\n');
|
||||
// br
|
||||
s = s.replace(/<br\s*\/?>/gi, '\n');
|
||||
// strip remaining span/div etc.
|
||||
s = s.replace(/<\/?(?:span|div|font|center)[^>]*>/gi, '');
|
||||
// any remaining tags — drop
|
||||
s = s.replace(/<[^>]+>/g, '');
|
||||
// entities
|
||||
s = decodeEntities(s);
|
||||
// collapse 3+ blank lines
|
||||
s = s.replace(/\n{3,}/g, '\n\n');
|
||||
return s.trim();
|
||||
};
|
||||
|
||||
const yamlEscape = (s) => {
|
||||
if (s == null) return '""';
|
||||
const str = String(s);
|
||||
if (/^[\w\-.,!?:; À-()«»—–"']+$/.test(str) && !/^[-?:&*!|>%@`]/.test(str)) {
|
||||
return JSON.stringify(str);
|
||||
}
|
||||
return JSON.stringify(str);
|
||||
};
|
||||
|
||||
const fmtFrontmatter = (obj) => {
|
||||
const lines = ['---'];
|
||||
for (const [k, v] of Object.entries(obj)) {
|
||||
if (v === undefined || v === null) continue;
|
||||
if (Array.isArray(v)) {
|
||||
if (v.length === 0) continue;
|
||||
lines.push(`${k}:`);
|
||||
v.forEach(item => lines.push(` - ${yamlEscape(item)}`));
|
||||
} else if (typeof v === 'object') {
|
||||
lines.push(`${k}:`);
|
||||
Object.entries(v).forEach(([kk, vv]) => lines.push(` ${kk}: ${yamlEscape(vv)}`));
|
||||
} else {
|
||||
lines.push(`${k}: ${yamlEscape(v)}`);
|
||||
}
|
||||
}
|
||||
lines.push('---');
|
||||
return lines.join('\n');
|
||||
};
|
||||
|
||||
const authorsMap = Object.fromEntries(data.authors.map(a => [a.id, a.display_name || a.login]));
|
||||
|
||||
// Posts
|
||||
let postCount = 0;
|
||||
for (const p of data.posts) {
|
||||
const fm = {
|
||||
title: p.title,
|
||||
pubDate: p.date.replace(' ', 'T') + '+03:00',
|
||||
updatedDate: p.modified && p.modified !== p.date ? p.modified.replace(' ','T') + '+03:00' : undefined,
|
||||
slug: p.slug,
|
||||
legacyId: p.id,
|
||||
author: authorsMap[p.author_id] || 'admin',
|
||||
categories: p.categories.map(c => c.name),
|
||||
categorySlugs: p.categories.map(c => c.slug),
|
||||
tags: p.tags.map(t => t.name),
|
||||
description: (htmlToMd(p.excerpt) || htmlToMd(p.content_html)).slice(0, 200).replace(/\s+/g,' ').trim(),
|
||||
};
|
||||
const body = htmlToMd(p.content_html);
|
||||
const out = `${fmtFrontmatter(fm)}\n\n${body}\n`;
|
||||
const safeName = p.slug.replace(/[^a-z0-9а-я\-]/gi, '-').slice(0, 80) || `post-${p.id}`;
|
||||
fs.writeFileSync(path.join(POSTS_DIR, `${safeName}.md`), out, 'utf8');
|
||||
postCount++;
|
||||
}
|
||||
|
||||
// Pages
|
||||
let pageCount = 0;
|
||||
for (const pg of data.pages) {
|
||||
const fm = {
|
||||
title: pg.title,
|
||||
slug: pg.slug,
|
||||
legacyId: pg.id,
|
||||
menuOrder: pg.menu_order,
|
||||
pubDate: pg.date.replace(' ', 'T') + '+03:00',
|
||||
updatedDate: pg.modified !== pg.date ? pg.modified.replace(' ','T') + '+03:00' : undefined,
|
||||
};
|
||||
const body = htmlToMd(pg.content_html);
|
||||
const out = `${fmtFrontmatter(fm)}\n\n${body}\n`;
|
||||
const safeName = pg.slug.replace(/[^a-z0-9а-я\-]/gi, '-').slice(0, 80) || `page-${pg.id}`;
|
||||
fs.writeFileSync(path.join(PAGES_DIR, `${safeName}.md`), out, 'utf8');
|
||||
pageCount++;
|
||||
}
|
||||
|
||||
// Categories dump (для построения /category/<slug>/ страниц и фидов)
|
||||
const catsOut = data.categories.map(c => ({
|
||||
name: c.name, slug: c.slug, description: c.description, count: c.count
|
||||
}));
|
||||
fs.writeFileSync(path.join(ROOT, 'src/content/_categories.json'), JSON.stringify(catsOut, null, 2), 'utf8');
|
||||
|
||||
console.log(`Migrated ${postCount} posts → ${POSTS_DIR}`);
|
||||
console.log(`Migrated ${pageCount} pages → ${PAGES_DIR}`);
|
||||
console.log(`Categories: ${catsOut.length} → src/content/_categories.json`);
|
||||
36
src/consts.ts
Normal file
36
src/consts.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
export const SITE_TITLE = 'Иные Отражения';
|
||||
export const SITE_DESCRIPTION = 'Ролевой проект по современной фантастике. Дозоры С. Лукьяненко, Амбер Р. Желязны, А. Пехов.';
|
||||
export const SITE_URL = 'https://anotherreflections.ru';
|
||||
export const SITE_AUTHOR = 'Иные Отражения';
|
||||
export const SITE_LANG = 'ru-RU';
|
||||
|
||||
/**
|
||||
* RSS-фид отдаёт только посты с pubDate >= этой даты.
|
||||
* Сценарий: фид подключают как источник в IPB RSS Importer; чтобы старый
|
||||
* архив 2009–2015 не залился в форумы одной волной, отрезаем по cutover.
|
||||
* Изменить дату → перезапустить build.
|
||||
*/
|
||||
export const RSS_CUTOFF = new Date("2026-05-20T00:00:00+03:00");
|
||||
|
||||
/** Сколько постов в RSS-фиде максимум (после фильтра cutoff). */
|
||||
export const RSS_LIMIT = 30;
|
||||
|
||||
/** Внешние ссылки на форумы и связанные проекты. */
|
||||
export const FORUMS = [
|
||||
{ name: 'Главный форум', url: 'https://forum.anotherreflections.ru/' },
|
||||
{ name: 'Сумерки Дозоров', url: 'https://sumerki.anotherreflections.ru/' },
|
||||
{ name: 'Ренессанс', url: 'https://renessans.anotherreflections.ru/' },
|
||||
{ name: 'Амбер', url: 'https://amber.anotherreflections.ru/' },
|
||||
{ name: 'Киндрет', url: 'https://kindret.anotherreflections.ru/' },
|
||||
{ name: 'Warhammer 40k', url: 'https://warhammer40k.anotherreflections.ru/' },
|
||||
{ name: 'Над бездной', url: 'https://bezdna.anotherreflections.ru/' },
|
||||
{ name: 'Глубина', url: 'https://deep.anotherreflections.ru/' },
|
||||
];
|
||||
|
||||
/** Главное меню. */
|
||||
export const MAIN_NAV = [
|
||||
{ label: 'Главная', href: '/' },
|
||||
{ label: 'О нас', href: '/o-nas/' },
|
||||
{ label: 'Наши друзья', href: '/nashi-druzya/' },
|
||||
{ label: 'Форумы', href: '#forums' },
|
||||
];
|
||||
33
src/content.config.ts
Normal file
33
src/content.config.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { defineCollection, z } from 'astro:content';
|
||||
import { glob } from 'astro/loaders';
|
||||
|
||||
const posts = defineCollection({
|
||||
loader: glob({ pattern: '**/*.md', base: './src/content/posts' }),
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
pubDate: z.coerce.date(),
|
||||
updatedDate: z.coerce.date().optional(),
|
||||
slug: z.string(),
|
||||
legacyId: z.union([z.string(), z.number()]).optional(),
|
||||
author: z.string().default('Иные Отражения'),
|
||||
categories: z.array(z.string()).default([]),
|
||||
categorySlugs: z.array(z.string()).default([]),
|
||||
tags: z.array(z.string()).default([]),
|
||||
description: z.string().default(''),
|
||||
}),
|
||||
});
|
||||
|
||||
const pages = defineCollection({
|
||||
loader: glob({ pattern: '**/*.md', base: './src/content/pages' }),
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
slug: z.string(),
|
||||
legacyId: z.union([z.string(), z.number()]).optional(),
|
||||
menuOrder: z.coerce.number().optional(),
|
||||
pubDate: z.coerce.date().optional(),
|
||||
updatedDate: z.coerce.date().optional(),
|
||||
description: z.string().optional(),
|
||||
}),
|
||||
});
|
||||
|
||||
export const collections = { posts, pages };
|
||||
62
src/content/_categories.json
Normal file
62
src/content/_categories.json
Normal file
@@ -0,0 +1,62 @@
|
||||
[
|
||||
{
|
||||
"name": "Общие новости",
|
||||
"slug": "obshhie-novosti",
|
||||
"description": "",
|
||||
"count": 44
|
||||
},
|
||||
{
|
||||
"name": "Технические",
|
||||
"slug": "tech_news",
|
||||
"description": "",
|
||||
"count": 9
|
||||
},
|
||||
{
|
||||
"name": "На правах рекламы",
|
||||
"slug": "reklama",
|
||||
"description": "",
|
||||
"count": 8
|
||||
},
|
||||
{
|
||||
"name": "Наши друзья",
|
||||
"slug": "nashi-druzya",
|
||||
"description": "",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"name": "Ролевые игры",
|
||||
"slug": "rolgames",
|
||||
"description": "",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"name": "Над бездной",
|
||||
"slug": "nad-bezdnoj",
|
||||
"description": "",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Глубина",
|
||||
"slug": "glubina",
|
||||
"description": "",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"name": "Фан-арт",
|
||||
"slug": "fun_art",
|
||||
"description": "",
|
||||
"count": 0
|
||||
},
|
||||
{
|
||||
"name": "Сумерки Дозоров",
|
||||
"slug": "sumerkidozorov",
|
||||
"description": "",
|
||||
"count": 0
|
||||
},
|
||||
{
|
||||
"name": "Клуб Лукьяненко",
|
||||
"slug": "lukianenkoclub",
|
||||
"description": "",
|
||||
"count": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
title: "Амбер - янтарное королевство"
|
||||
slug: "inye-otrazheniya-amber-yantarnoe-korolevstvo"
|
||||
legacyId: "132"
|
||||
menuOrder: "4"
|
||||
pubDate: "2011-05-18T00:40:47+03:00"
|
||||
updatedDate: "2014-07-14T00:12:19+03:00"
|
||||
---
|
||||
|
||||
Тест
|
||||
18
src/content/pages/inye-otrazheniya-kindret-krovnye-bratya.md
Normal file
18
src/content/pages/inye-otrazheniya-kindret-krovnye-bratya.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Киндрет - кровные братья"
|
||||
slug: "inye-otrazheniya-kindret-krovnye-bratya"
|
||||
legacyId: "130"
|
||||
menuOrder: "5"
|
||||
pubDate: "2011-05-18T00:39:40+03:00"
|
||||
updatedDate: "2014-07-14T00:12:27+03:00"
|
||||
---
|
||||
|
||||
«Киндрэт. Кровные братья» — первая книга цикла Киндрэт известных российских писателей Алексея Пехова, Елены Бычковой и Натальи Турчаниновой, рассказывающая о жизни кланов вампиров. В цикл романов по миру ночной Столицы вошли 4 книги: «Кровные братья», «Колдун из клана смерти», «Основатель», «Новые боги».
|
||||
> Они управляют миром с начала времен, втягивая человечество в бесконечные войны. Они едины лишь в одном — жажде власти и могущества. В древности им поклонялись как богам. Их кровь священна и проклята, и приносит бессмертие. А также особый дар, который дает полную реализацию скрытым способностям человека… В современной Столице их существование считают мифом или страшной сказкой, но они продолжают жить среди нас. Их время — ночь. КИНДРЭТ приходят, чтобы убивать, ненавидеть, мстить. Что люди смогут противопоставить им?..
|
||||
>
|
||||
>
|
||||
[Главная страница](http://kindret.anotherreflections.ru/)
|
||||
|
||||
[Страница регистрации](http://kindret.anotherreflections.ru/index.php?act=Reg&CODE=00)
|
||||
|
||||
[Квенты игроков](http://kindret.anotherreflections.ru/?showforum=31)
|
||||
31
src/content/pages/inye-otrazheniya-sumerki-dozorov.md
Normal file
31
src/content/pages/inye-otrazheniya-sumerki-dozorov.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: "Сумерки Дозоров"
|
||||
slug: "inye-otrazheniya-sumerki-dozorov"
|
||||
legacyId: "124"
|
||||
menuOrder: "3"
|
||||
pubDate: "2011-05-18T00:27:35+03:00"
|
||||
updatedDate: "2014-07-14T00:12:09+03:00"
|
||||
---
|
||||
|
||||
**Иные Отражения: Сумерки Дозоров**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**Действие ролевой игры происходит в мире, описанным Сергеем Лукьяненко и Владимиром Васильевым в цикле "Дозоры".**
|
||||
|
||||
На ночных улицах - опасно. Но речь не о преступниках и маньяках. На ночных улицах живет другая опасность - те, что называют себя Иными. Вампиры и оборотни, колдуньи и ведьмаки. Те, кто выходит на охоту, когда садится солнце. Те, чья сила велика, с кем не справиться обычным оружием. Но по следу "ночных охотников" веками следуют охотники другие - Ночной дозор. Они сражаются с порождениями мрака и побеждают их, но при этом свято блюдут древний Договор, заключенный между Светлыми и Темными...
|
||||
|
||||
"Ночные охотники" городских улиц. Вампиры и оборотим, колдуньи и ведьмаки. Те, что живут в часы, когда опускается на землю мгла. Те, что веками противостоят силам белых магов. Потому что понимают - равновесие должно быть соблюдено. Потому что понимают- Тьма для этого мира не менее важна, чем Свет.
|
||||
|
||||
|
||||
|
||||
[Главная страница](http://sumerki.anotherreflections.ru/)
|
||||
[Страница регистрации](http://sumerki.anotherreflections.ru/index.php?act=Reg&CODE=00)
|
||||
[Инициация](http://sumerki.anotherreflections.ru/iniciaciya-f8-iniciaciya-t2-p-460.html)
|
||||
[Регистрация в ролевой игре](http://sumerki.anotherreflections.ru/forum-f0-posl-soobwenie-t1809-l.html)
|
||||
|
||||
Гейм-мастер Игры: [Кейран](http://sumerki.anotherreflections.ru/prosmotr-profilya-505.html)
|
||||
Администраторы: [Sumrak](http://sumerki.anotherreflections.ru/prosmotr-profilya-1.html), [Strik~er](http://sumerki.anotherreflections.ru/prosmotr-profilya-2.html).
|
||||
12
src/content/pages/nashi-druzya.md
Normal file
12
src/content/pages/nashi-druzya.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: "Наши друзья"
|
||||
slug: "nashi-druzya"
|
||||
legacyId: "339"
|
||||
menuOrder: "2"
|
||||
pubDate: "2013-07-09T13:29:47+03:00"
|
||||
updatedDate: "2025-06-07T02:31:08+03:00"
|
||||
---
|
||||
|
||||
[ООО "АйТи Решения"](https://hhivp.com) предоставляет полный спектр IT услуг на территории Москвы и Московской области, как частным лицам, так и представителям бизнеса. Мы способствуем развитию Вашего бизнеса и достижению самых смелых результатов!
|
||||
|
||||
[](http://sysadmingroup.ru/sag.jpg)
|
||||
15
src/content/pages/o-nas.md
Normal file
15
src/content/pages/o-nas.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "О нас"
|
||||
slug: "o-nas"
|
||||
legacyId: "137"
|
||||
menuOrder: "1"
|
||||
pubDate: "2011-05-18T00:50:11+03:00"
|
||||
updatedDate: "2014-07-14T00:10:31+03:00"
|
||||
---
|
||||
|
||||
**Ролевая группа "Иные Отражения"**
|
||||
|
||||
|
||||
Ролевая группа "Иные Отражения", первоначально известная как "Иные Миры" была образована в 2006 году, и певоначально включала в себя двух создателей-администраторов: Дмитрий "Strik~er" Гусев и Александр "SpellSinger" Шутов.
|
||||
|
||||
Впоследствии в 2007 году ролевая группа "Иные Миры" объединилась с проектом "Отражения" и изменила своё название на "Иные Отражения".
|
||||
24
src/content/pages/renessans.md
Normal file
24
src/content/pages/renessans.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: "Ренессанс"
|
||||
slug: "renessans"
|
||||
legacyId: "378"
|
||||
menuOrder: "6"
|
||||
pubDate: "2013-10-06T02:59:22+03:00"
|
||||
updatedDate: "2014-07-14T00:12:33+03:00"
|
||||
---
|
||||
|
||||
**Иные Отражения: Ренессанс**
|
||||
|
||||
**Действие ролевой игры происходит в мире, описанным Сергеем Лукьяненко и Владимиром Васильевым в цикле "Дозоры".**
|
||||
|
||||
На ночных улицах - опасно. Но речь не о преступниках и маньяках. На ночных улицах живет другая опасность - те, что называют себя Иными. Вампиры и оборотни, колдуньи и ведьмаки. Те, кто выходит на охоту, когда садится солнце. Те, чья сила велика, с кем не справиться обычным оружием. Но по следу "ночных охотников" веками следуют охотники другие - Ночной дозор. Они сражаются с порождениями мрака и побеждают их, но при этом свято блюдут древний Договор, заключенный между Светлыми и Темными...
|
||||
|
||||
"Ночные охотники" городских улиц. Вампиры и оборотим, колдуньи и ведьмаки. Те, что живут в часы, когда опускается на землю мгла. Те, что веками противостоят силам белых магов. Потому что понимают - равновесие должно быть соблюдено. Потому что понимают- Тьма для этого мира не менее важна, чем Свет.
|
||||
|
||||
|
||||
|
||||
[Главная страница](http://renessans.anotherreflections.ru/)
|
||||
[Страница регистрации](http://renessans.anotherreflections.ru/index.php?act=Reg&CODE=00)
|
||||
[Регистрация в ролевой игре](http://renessans.anotherreflections.ru/?showforum=45)
|
||||
|
||||
Гейм-мастер Игры: [Кейран](http://renessans.anotherreflections.ru/?showuser=2)
|
||||
31
src/content/posts/11.md
Normal file
31
src/content/posts/11.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: "Кто мы?"
|
||||
pubDate: "2013-08-25T03:15:01+03:00"
|
||||
updatedDate: "2013-10-06T02:05:52+03:00"
|
||||
slug: "11"
|
||||
legacyId: "365"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Мы - Ролевая группа \"Иные Отражения\". Ролевая группа \"Иные Отражения\", первоначально известная как \"Иные Миры\" была образована в 2006 году, и первоначально включала в себя двух создателей-администрат"
|
||||
---
|
||||
|
||||
Мы - Ролевая группа "Иные Отражения".
|
||||
Ролевая группа "Иные Отражения", первоначально известная как "Иные Миры" была образована в 2006 году, и первоначально включала в себя двух создателей-администраторов: Дмитрий "Strik~er" Гусев и Александр "SpellSinger" Шутов. Впоследствии в 2007 году ролевая группа "Иные Миры" объединилась с проектом "Отражения" и изменила своё название на "Иные Отражения".
|
||||
Сейчас мы представляем Вашему вниманию следующие проекты:
|
||||
|
||||
|
||||
- [Иные Отражения: Сумерки Дозоров](http://sumerki.anotherreflections.ru) - мир, описанный в цикле "Дозоры" С. Лукьяненко и В. Васильева.
|
||||
|
||||
- [Иные Отражения: Ренессанс](http://renessans.anotherreflections.ru/) - мир Дозоров маленького городка.
|
||||
|
||||
|
||||
|
||||
Также в разработке находятся следующие миры:
|
||||
|
||||
|
||||
- [Иные Отражения: Амбер-Янтарное королевство](http://amber.anotherreflections.ru/) - мир, описанный Р. Желязны в цикле Амбер.
|
||||
|
||||
- [Иные Отражения: Киндрет - кровные братья](http://kindret.anotherreflections.ru) - мир по циклу А. Пехова, рассказывающий о жизни кланов вампиров ночной столицы.
|
||||
20
src/content/posts/152.md
Normal file
20
src/content/posts/152.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: "С наступающим Новым 2012 годом!"
|
||||
pubDate: "2012-01-01T00:27:00+03:00"
|
||||
updatedDate: "2013-03-29T14:35:17+03:00"
|
||||
slug: "152"
|
||||
legacyId: "152"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
tags:
|
||||
- "2012"
|
||||
- "новый год"
|
||||
description: "Поздравляем вас с Новым годом! Пусть ваша жизнь будет красочной, дом - гостеприимным, пусть будут вашими верными спутниками будут везение и любовь! Пусть сбудутся все ваши мечты и желания! Пусть он пр"
|
||||
---
|
||||
|
||||
Поздравляем вас с Новым годом! Пусть ваша жизнь будет красочной, дом - гостеприимным, пусть будут вашими верными спутниками будут везение и любовь! Пусть сбудутся все ваши мечты и желания! Пусть он принесет вам только яркие, незабываемые впечатления, удачу в делах и блестящие победы!
|
||||
|
||||
С Новым 2012 годом!!
|
||||
29
src/content/posts/26-02-2011-vstretimsya.md
Normal file
29
src/content/posts/26-02-2011-vstretimsya.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: "26.02.2011, Встретимся?)"
|
||||
pubDate: "2011-02-26T00:24:42+03:00"
|
||||
updatedDate: "2013-03-29T14:34:36+03:00"
|
||||
slug: "26-02-2011-vstretimsya"
|
||||
legacyId: "91"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Поступило предложение, подкупающее своей новизной) В общем, как оказалось, многие друг друга давненько уже не видели и хотели бы собраться. Эту идею мы поддержали) Это будет НЕ так, как делали на"
|
||||
---
|
||||
|
||||
Поступило предложение, подкупающее своей новизной)
|
||||
|
||||
В общем, как оказалось, многие друг друга давненько уже не видели и хотели бы собраться. Эту идею мы поддержали)
|
||||
Это будет НЕ так, как делали на Новый год: мы не снимаем все кафе.
|
||||
Но если кто-то хочет кого-то увидеть - приходите, мы будем только рады. Я договорилась на кальяны))
|
||||
|
||||
Вниманию желающих:
|
||||
Встречаемся в 15.00 в тупике на м. Электрозаводская, а оттуда идем в Кнефи.
|
||||
Ждем опаздывающих 20 минут.
|
||||
|
||||
|
||||
Мой номер, если что - +79250038771.
|
||||
Номер Askory - +79636407971.
|
||||
|
||||
Ах да, список тех, кто собирается [вот](http://vkontakte.ru/event24225253)
|
||||
15
src/content/posts/95.md
Normal file
15
src/content/posts/95.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "С 23 февраля!"
|
||||
pubDate: "2011-02-23T00:48:39+03:00"
|
||||
updatedDate: "2013-03-29T14:34:37+03:00"
|
||||
slug: "95"
|
||||
legacyId: "95"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Защита Родины - привилегия и обязанность настоящих мужчин! Семья - это маленькая частичка Родины, которую вам приходится защищать! Знайте, что за вашей спиной мы чувствуем спокойствие и уверенность в"
|
||||
---
|
||||
|
||||
Защита Родины - привилегия и обязанность настоящих мужчин! Семья - это маленькая частичка Родины, которую вам приходится защищать! Знайте, что за вашей спиной мы чувствуем спокойствие и уверенность в завтрашнем дне и в дне сегодняшнем! С праздником вас!
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "Авторская презентация книги «Шестой Дозор» Сергея Лукьяненко в «Новый книжный» (Москва)"
|
||||
pubDate: "2014-12-02T22:59:22+03:00"
|
||||
updatedDate: "2014-12-27T23:08:40+03:00"
|
||||
slug: "avtorskaya-prezentaciya-knigi-shestoj-dozor-sergeya-lukyanenko-v-novyj-knizhnyj-moskva"
|
||||
legacyId: "422"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "На правах рекламы"
|
||||
- "Наши друзья"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "reklama"
|
||||
- "nashi-druzya"
|
||||
description: "[caption id=\"\" align=\"aligncenter\" width=\"200\"] Авторская презентация книги «Шестой Дозор» Сергея Лукьяненко в «Новый кни"
|
||||
---
|
||||
|
||||
[caption id="" align="aligncenter" width="200"] Авторская презентация книги «Шестой Дозор» Сергея Лукьяненко в «Новый книжный» (Москва)[/caption]
|
||||
|
||||
|
||||
|
||||
6 декабря 2014 года пройдет презентация книги «[Шестой Дозор](http://lukianenko.ru/works_rus/356.html)» Сергея Лукьяненко в магазине «Новый книжный» по адресу м. Сухаревская, Мал. Сухаревская пл., 12, ТЦ «Садовая галерея» (1-й этаж). Начало в 14:00. Вход свободный. Приезжайте заранее! Участники презентации смогут приобрести книгу, пообщаться с писателем, сфотографироваться и взять автограф.
|
||||
|
||||
С 6 декабря 2014 года продажи книги стартуют по всей стране! Предварительный заказ[электронной книги «Шестой Дозор»](http://www.litres.ru/sergey-lukyanenko/shestoy-dozor/&lfrom=147) можно сделать в ЛитРес.
|
||||
|
||||
Источник: [http://www.lukianenko.ru/news_rus/373.html](http://www.lukianenko.ru/news_rus/373.html)
|
||||
17
src/content/posts/c-67-letiem-velikoj-pobedy.md
Normal file
17
src/content/posts/c-67-letiem-velikoj-pobedy.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "C 67-летием Великой Победы!"
|
||||
pubDate: "2012-05-09T09:23:40+03:00"
|
||||
updatedDate: "2013-03-29T14:35:10+03:00"
|
||||
slug: "c-67-letiem-velikoj-pobedy"
|
||||
legacyId: "167"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Дорогие ветераны Великой Отечественной войны! Сердечно поздравляем вас с днем Великой Победы! Этот праздник объединяет всех нас гордостью за великую Родину, вечной благодарностью победителям! Пусть"
|
||||
---
|
||||
|
||||
Дорогие ветераны Великой Отечественной войны!
|
||||
Сердечно поздравляем вас с днем Великой Победы! Этот праздник объединяет всех нас гордостью за великую Родину, вечной благодарностью победителям!
|
||||
Пусть День 9 мая прибавит новые силы пережившим войну, напомнит молодым, сколько жизней отдано за свободу нашей Родины, как надо любить и защищать свое Отечество!
|
||||
15
src/content/posts/c-dnyom-66-godovshhiny-velikoj-pobedy.md
Normal file
15
src/content/posts/c-dnyom-66-godovshhiny-velikoj-pobedy.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "C днём 66 годовщины Великой Победы!"
|
||||
pubDate: "2011-05-09T00:00:55+03:00"
|
||||
updatedDate: "2013-03-29T14:34:36+03:00"
|
||||
slug: "c-dnyom-66-godovshhiny-velikoj-pobedy"
|
||||
legacyId: "109"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "**Уважаемые Ветераны Великой Отечественной Войны, от лица немногих, тех кто понимает что это за Праздник, и какой ценой далась Великая Победа искренне прошу у Вас прощения за современное поколени"
|
||||
---
|
||||
|
||||
**Уважаемые Ветераны Великой Отечественной Войны, от лица немногих, тех кто понимает что это за Праздник, и какой ценой далась Великая Победа искренне прошу у Вас прощения за современное поколение! Спасибо Вам, за то что вы сделали. Спасибо Вам, Ветераны, за Победу!**
|
||||
19
src/content/posts/c-nastupayushhim-novym-2013-godom.md
Normal file
19
src/content/posts/c-nastupayushhim-novym-2013-godom.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "C наступающим Новым 2013 Годом!"
|
||||
pubDate: "2012-12-31T17:46:16+03:00"
|
||||
updatedDate: "2013-03-29T14:35:09+03:00"
|
||||
slug: "c-nastupayushhim-novym-2013-godom"
|
||||
legacyId: "170"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Дорогие друзья! От всей души поздравляем Вас с Новым Годом и Рождеством! Желаем Вам и Вашим близким в Новом году здоровья, счастья, успеха в достижении поставленных целей и исполнения всех самых за"
|
||||
---
|
||||
|
||||
Дорогие друзья! От всей души поздравляем Вас с Новым Годом и Рождеством!
|
||||
|
||||
Желаем Вам и Вашим близким в Новом году здоровья, счастья, успеха в достижении поставленных целей и исполнения всех самых заветных желаний! Пусть 2013 год принесет Вам только лучшее, а все плохое останется в прошлом!
|
||||
|
||||
С уважением, Коллектив проекта "Иные Отражения".
|
||||
18
src/content/posts/c-nastupayushhim-novym-2014-godom.md
Normal file
18
src/content/posts/c-nastupayushhim-novym-2014-godom.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "C наступающим Новым 2014 Годом!"
|
||||
pubDate: "2013-12-31T19:17:12+03:00"
|
||||
slug: "c-nastupayushhim-novym-2014-godom"
|
||||
legacyId: "384"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "От лица администрации и от себя лично поздравляю всех с Новым годом! Желаю всем счастья, здоровья, сбытия всех Ваших мечт, финансового и душевного спокойствия, искорки в глазах и успехов в выполнении"
|
||||
---
|
||||
|
||||
От лица администрации и от себя лично поздравляю всех с Новым годом! Желаю всем счастья, здоровья, сбытия всех Ваших мечт, финансового и душевного спокойствия, искорки в глазах и успехов в выполнении всех Ваших начинаний.Постарайтесь забыть все то плохое, что у Вас может быть случилось, помните, что свою жизнь Вы делаете и сами, а значит нужно стремиться к самому лучшему! Еще раз всех с праздником, до встречи уже в Новом году!)
|
||||
|
||||
|
||||
|
||||
Strik~er & Anotherreflections.ru
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "C наступающим Новым 2015 Годом и Рождеством!"
|
||||
pubDate: "2014-12-30T20:07:11+03:00"
|
||||
slug: "c-nastupayushhim-novym-2015-godom-i-rozhdestvom"
|
||||
legacyId: "432"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "[](http://anotherreflections.ru/wp-content/uploads/2014/12/NY-baner.png) Подходит к своему завершению 2014 год."
|
||||
---
|
||||
|
||||
[](http://anotherreflections.ru/wp-content/uploads/2014/12/NY-baner.png)
|
||||
|
||||
|
||||
|
||||
Подходит к своему завершению 2014 год. В жизни каждого из нас произошло много событий - ярких, запоминающихся, которые наполнили наши сердца радостью или принесли бесценный опыт.
|
||||
|
||||
Горячо поздравляем Вас с наступающим Новым 2015 Годом и Рождеством! Пусть сбудутся все Ваши мечты и новый 2015 год принесёт Вам и Вашим родным и близким Радость и Процветание! Самое главное – не бояться перемен, добиваться поставленных целей и быть уверенными – каждый из нас идет правильной дорогой!
|
||||
|
||||
Будьте счастливы в Новом году! Здоровья, любви, удачи всем Вам!
|
||||
|
||||
|
||||
|
||||
С уважением, администрация
|
||||
|
||||
проекта "Иные Отражения"
|
||||
34
src/content/posts/c-rozhdestvom-xristovym.md
Normal file
34
src/content/posts/c-rozhdestvom-xristovym.md
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: "C рождеством Христовым!"
|
||||
pubDate: "2010-01-07T01:36:50+03:00"
|
||||
updatedDate: "2013-03-29T14:33:55+03:00"
|
||||
slug: "c-rozhdestvom-xristovym"
|
||||
legacyId: "48"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "C рождеством Христовым поздравляем! На Руси сей праздник почитаем. После многодневного поста Ждём, когда взойдёт звезда Христа. Наконец родился наш Спаситель, Многовековый Мудрец учитель! И в со"
|
||||
---
|
||||
|
||||
C рождеством Христовым поздравляем!
|
||||
На Руси сей праздник почитаем.
|
||||
После многодневного поста
|
||||
Ждём, когда взойдёт звезда Христа.
|
||||
Наконец родился наш Спаситель,
|
||||
Многовековый Мудрец учитель!
|
||||
И в сочельник празднует народ
|
||||
В ожидании когда придёт
|
||||
Иисус Христос на землю нашу,
|
||||
Чтоб спасти людей и сделать краше,
|
||||
С истинного сбившихся пути
|
||||
По дороге праведной вести.
|
||||
Был Христос однажды на Земле,
|
||||
Нам оставил память о себе.
|
||||
Если в вашем сердце он живёт,
|
||||
То хранит и счастье вам несёт.
|
||||
Вам желаем помнить а Рождество -
|
||||
Пусть двадцать столетий уж прошло,-
|
||||
Как Христос всем людям помогал,
|
||||
Блага, как мы вам сейчас, желал!
|
||||
18
src/content/posts/data-vyxoda-prodolzheniya-dozorov.md
Normal file
18
src/content/posts/data-vyxoda-prodolzheniya-dozorov.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Дата выхода продолжения Дозоров"
|
||||
pubDate: "2014-10-20T23:04:55+03:00"
|
||||
updatedDate: "2014-12-27T23:05:40+03:00"
|
||||
slug: "data-vyxoda-prodolzheniya-dozorov"
|
||||
legacyId: "424"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "На правах рекламы"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "reklama"
|
||||
description: "Завершилось написание романа под рабочим названием «[Шестой Дозор](http://lukianenko.ru/works_rus/356.html)»! Ориентировочная дата появления книги в магазинах России – 06 декабря 2014 года. В ближайш"
|
||||
---
|
||||
|
||||
Завершилось написание романа под рабочим названием «[Шестой Дозор](http://lukianenko.ru/works_rus/356.html)»! Ориентировочная дата появления книги в магазинах России – 06 декабря 2014 года.
|
||||
В ближайших планах Сергея Лукьяненко, присутствие на фестивале фантастики "Созвездие Аю-Даг".
|
||||
17
src/content/posts/den-rozhdeniya.md
Normal file
17
src/content/posts/den-rozhdeniya.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "День рождения!"
|
||||
pubDate: "2009-09-15T14:49:48+03:00"
|
||||
updatedDate: "2013-03-29T14:31:31+03:00"
|
||||
slug: "den-rozhdeniya"
|
||||
legacyId: "18"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Итак, снова приближаеться наш день рождения. Если брать точнее, то наступает он 17 сентября, однако по сложившейся традиции отмечаем мы его в начале - середине октября. Будем ли праздновать в этом"
|
||||
---
|
||||
|
||||
Итак, снова приближаеться наш день рождения. Если брать точнее, то наступает он 17 сентября, однако по сложившейся традиции отмечаем мы его в начале - середине октября.
|
||||
|
||||
Будем ли праздновать в этом году?
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "Дорогие пользователи и игроки проекта Иные Отражения!"
|
||||
pubDate: "2009-09-14T12:01:43+03:00"
|
||||
updatedDate: "2013-03-29T14:31:33+03:00"
|
||||
slug: "dorogie-polzovateli-i-igroki-proekta-inye-otrazheniya"
|
||||
legacyId: "13"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Дорогие пользователи и игроки проекта Иные Отражения! Я, как основной технический администратор данного проекта приношу Вам свои искренние извинения за столь длительный простой нашего проекта. В наст"
|
||||
---
|
||||
|
||||
Дорогие пользователи и игроки проекта Иные Отражения!
|
||||
Я, как основной технический администратор данного проекта приношу Вам свои искренние извинения за столь длительный простой нашего проекта. В настоящее время в связи с обстоятельствами непреодолимой силы я принял решение развернуть наш проект на резервной системе, в связи с чем некоторое время до окончательного переезда на основной сервер могут наблюдаться проблемы с скоростью загрузки данных.
|
||||
Также убедительная просьба при нахождение неисправностей в работе проекта обращаться по электронной почте:admins@anotherreflections.ru
|
||||
|
||||
С уважением, Strik~er
|
||||
33
src/content/posts/dzhazovyj-ansambl-nakanune-2.md
Normal file
33
src/content/posts/dzhazovyj-ansambl-nakanune-2.md
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "Джазовый ансамбль \"НаКануне\""
|
||||
pubDate: "2010-12-20T01:26:58+03:00"
|
||||
updatedDate: "2013-03-29T14:33:45+03:00"
|
||||
slug: "dzhazovyj-ansambl-nakanune-2"
|
||||
legacyId: "79"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "На правах рекламы"
|
||||
- "Наши друзья"
|
||||
categorySlugs:
|
||||
- "reklama"
|
||||
- "nashi-druzya"
|
||||
description: "Ансамбль проверенного временем джаза со скромным названием \"НаКануне\". Родился жарким и дымным летом 2010 года. Из множества любимых стилей (от свинга до фанки-фьюжн) музыканты ансамбля выделяют для с"
|
||||
---
|
||||
|
||||
Ансамбль проверенного временем джаза со скромным названием "НаКануне". Родился жарким и дымным летом 2010 года. Из множества любимых стилей (от свинга до фанки-фьюжн) музыканты ансамбля выделяют для себя бразильский вокальный джаз (Жобим, Донато, Фонсека, Менескаль, Жильберто...) и американский хард-боп (Ли Морган, Д.Гордон, Д.Хендерсон, У.Шортер...).
|
||||
|
||||
С июня нынешнего года в ансамбле играют:
|
||||
|
||||
В.Филатов - барабаны
|
||||
|
||||
Е.Тамарченко - гитара
|
||||
|
||||
А.Трояновский - контрабас, бас-гитара
|
||||
|
||||
А.Канунов - саксофоны
|
||||
|
||||
Мила Горюнова - вокал
|
||||
|
||||
Алёна Чеботарёва - флейта
|
||||
|
||||
приглашает любителей джаза на свои концерты. Подробная информация [тут](http://vkontakte.ru/club22008896)
|
||||
25
src/content/posts/itak-est-predlozhenie-vstretitsya.md
Normal file
25
src/content/posts/itak-est-predlozhenie-vstretitsya.md
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: "Итак, есть предложение встретиться!"
|
||||
pubDate: "2010-01-14T00:51:20+03:00"
|
||||
updatedDate: "2013-03-29T14:33:54+03:00"
|
||||
slug: "itak-est-predlozhenie-vstretitsya"
|
||||
legacyId: "50"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Собственно, есть предложение встретиться 23 января, с целью посидеть, потрепаться и конечно же выпить! В качестве места встречи предлагается Кружка на метро \"Площадь Революции\", соответственно мест"
|
||||
---
|
||||
|
||||
Собственно, есть предложение встретиться 23 января, с целью посидеть, потрепаться и конечно же выпить!
|
||||
|
||||
В качестве места встречи предлагается Кружка на метро "Площадь Революции", соответственно место встречи - центр зала в метро.
|
||||
|
||||
Ну а время встречи - 15 часов пополудни.
|
||||
|
||||
Приглашаются и ожидаются все желающие!
|
||||
|
||||
Встреча ВКонтакте - [Сходка Сумерек](http://vkontakte.ru/event14521045)
|
||||
|
||||
По всем вопросам Вы можете обратиться по телефону: 8-916-821-28-62 или 8-909-926-39-58 - Strik~er
|
||||
21
src/content/posts/itak-vnimanie.md
Normal file
21
src/content/posts/itak-vnimanie.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "Итак! Внимание!"
|
||||
pubDate: "2009-10-30T23:37:19+03:00"
|
||||
updatedDate: "2013-03-29T14:31:27+03:00"
|
||||
slug: "itak-vnimanie"
|
||||
legacyId: "30"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Место проведения торжества - Кнефи Место встречи: м. Электрозаводская Время встречи: 15-00 Приглашаем и ждём всех!"
|
||||
---
|
||||
|
||||
Место проведения торжества - Кнефи
|
||||
|
||||
Место встречи: м. Электрозаводская
|
||||
|
||||
Время встречи: 15-00
|
||||
|
||||
Приглашаем и ждём всех!
|
||||
15
src/content/posts/nash-den-rozhdeniya.md
Normal file
15
src/content/posts/nash-den-rozhdeniya.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Наш день рождения!"
|
||||
pubDate: "2009-09-14T11:55:13+03:00"
|
||||
updatedDate: "2013-03-29T14:31:39+03:00"
|
||||
slug: "nash-den-rozhdeniya"
|
||||
legacyId: "6"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Итак, приближается наш День Рождения! И соответственно его празднование! Пройдёт оно в городе Москва, в небезизвестном кафе [Кнефи](http://knefi.ru/) 11 октября. Начало в 15 часов. Приглашаються все ж"
|
||||
---
|
||||
|
||||
Итак, приближается наш День Рождения! И соответственно его празднование! Пройдёт оно в городе Москва, в небезизвестном кафе [Кнефи](http://knefi.ru/) 11 октября. Начало в 15 часов. Приглашаються все желающие! С возникшими вопросами можете обращаться к Strik~er`у или Spellsinger`у.
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: "Новая книга Сергея Лукьяненко «Участковый»"
|
||||
pubDate: "2014-07-24T01:11:07+03:00"
|
||||
slug: "novaya-kniga-sergeya-lukyanenko-uchastkovyj"
|
||||
legacyId: "408"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "**«[Участковый](http://lukianenko.ru/editions_rus/350.html)»** — это третья книга из соавторского цикла «Дозоры» написанная совместно с Алексом де Клемешье. События в книге происходят в Сибири 1972-го"
|
||||
---
|
||||
|
||||
**«[Участковый](http://lukianenko.ru/editions_rus/350.html)»** — это третья книга из соавторского цикла «Дозоры» написанная совместно с Алексом де Клемешье. События в книге происходят в Сибири 1972-го года.
|
||||
17
src/content/posts/obyavlenie-administracii.md
Normal file
17
src/content/posts/obyavlenie-administracii.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Обьявление администрации!"
|
||||
pubDate: "2010-04-05T13:58:50+03:00"
|
||||
updatedDate: "2013-03-29T14:33:49+03:00"
|
||||
slug: "obyavlenie-administracii"
|
||||
legacyId: "60"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Администрация проекта \"Иные Отражения\" приглашает гейм-мастеров ( можно как с опытом, так и без) для \" поднятия\" крупных проектов по циклам \"Хроники Амбера\" Р. Желязны, \"Киндрет. Кровные братья\" и дру"
|
||||
---
|
||||
|
||||
Администрация проекта "Иные Отражения" приглашает гейм-мастеров ( можно как с опытом, так и без) для " поднятия" крупных проектов по циклам "Хроники Амбера" Р. Желязны, "Киндрет. Кровные братья" и другие.
|
||||
|
||||
Обращаться в ICQ 207259578 или на admins@anotherreflections.ru
|
||||
17
src/content/posts/pereezd-proekta-na-novyj-server.md
Normal file
17
src/content/posts/pereezd-proekta-na-novyj-server.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Переезд проекта на новый сервер!"
|
||||
pubDate: "2009-09-14T12:00:21+03:00"
|
||||
updatedDate: "2013-03-29T14:31:37+03:00"
|
||||
slug: "pereezd-proekta-na-novyj-server"
|
||||
legacyId: "11"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "В связи с осуществлением переезда проекта на другой сервер возможна его полная недоступность с 6 на неопределённое время! Администрация приносит извинения за доставленные неудобства."
|
||||
---
|
||||
|
||||
В связи с осуществлением переезда проекта на другой сервер возможна его полная недоступность с 6 на неопределённое время!
|
||||
|
||||
Администрация приносит извинения за доставленные неудобства.
|
||||
15
src/content/posts/pozdravlyaem-s-8-marta.md
Normal file
15
src/content/posts/pozdravlyaem-s-8-marta.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Поздравляем с 8 марта!"
|
||||
pubDate: "2013-03-08T02:18:07+03:00"
|
||||
updatedDate: "2013-03-29T14:35:44+03:00"
|
||||
slug: "pozdravlyaem-s-8-marta"
|
||||
legacyId: "179"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Всех представительниц прекрасной половины человечества поздравляем с весенним праздником, с женским днем. Пусть озаряются лучезарными улыбками ваши лица, каждый день дарит добро, заботу и ласку. Милли"
|
||||
---
|
||||
|
||||
Всех представительниц прекрасной половины человечества поздравляем с весенним праздником, с женским днем. Пусть озаряются лучезарными улыбками ваши лица, каждый день дарит добро, заботу и ласку. Миллионы роз, тысячи мимоз — сотни цветов к вашим ногам.
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Поздравляем с наступающим Новым 2011 Годом!"
|
||||
pubDate: "2010-12-31T23:51:13+03:00"
|
||||
updatedDate: "2013-03-29T14:33:44+03:00"
|
||||
slug: "pozdravlyaem-s-nastupayushhim-novym-2011-godom"
|
||||
legacyId: "87"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Администрация проекта \"Иные Отражения\" поздравляет своих пользователей с наступающим Новым 2011 Годом и желает всем Вам здоровья, счастья и удачи в новом году, пускай сбудутся все Ваши сокровенные жел"
|
||||
---
|
||||
|
||||
Администрация проекта "Иные Отражения" поздравляет своих пользователей с наступающим Новым 2011 Годом и желает всем Вам здоровья, счастья и удачи в новом году, пускай сбудутся все Ваши сокровенные желания и мечты, а окружать Вас будет феерический хоровод смеха и веселья!!
|
||||
|
||||
|
||||
С уважением, Администрация проекта "Иные Отражения"!
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Поздравляем вас с Новым годом и Рождеством!"
|
||||
pubDate: "2015-12-30T19:26:49+03:00"
|
||||
slug: "pozdravlyaem-vas-s-novym-godom-i-rozhdestvom"
|
||||
legacyId: "448"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "В наступающем году мы желаем вам только приятных открытий, только радостных сюрпризов, много позитивного общения, продуктивных обсуждений в кругу близких друзей, взвешенных честных мнений и, конечно,"
|
||||
---
|
||||
|
||||
В наступающем году мы желаем вам только приятных открытий, только радостных сюрпризов, много позитивного общения, продуктивных обсуждений в кругу близких друзей, взвешенных честных мнений и, конечно, ярких радостных впечатлений от жизни!
|
||||
|
||||
Помните, каждый из нас сам раскрашивает свою жизнь яркими красками!
|
||||
|
||||
С уважением, ролевая группа "Иные Отражения"
|
||||
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: "Приглашаем Вас на РИ \"Дозоры-2015. Пасьянс Судьбы\""
|
||||
pubDate: "2014-10-22T23:09:12+03:00"
|
||||
updatedDate: "2014-12-27T23:15:21+03:00"
|
||||
slug: "priglashaem-vas-na-ri-dozory-2015-pasyans-sudby"
|
||||
legacyId: "426"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "На правах рекламы"
|
||||
- "Ролевые игры"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "reklama"
|
||||
- "rolgames"
|
||||
description: " Верить ли в судьбу – личный выбор каждого, поэтому никто не заставляет гостей фестиваля, посвященного дню рождению великого «н"
|
||||
---
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
Верить ли в судьбу – личный выбор каждого, поэтому никто не заставляет гостей фестиваля, посвященного дню рождению великого «нулевого» мага Мерлина, принимать как истину, что судьба иного в его собственных руках. Или не в его руках? Довольно многое в мире не имеет однозначного ответа, как неоднозначна и судьба самого Мерлина – великого Светлого мага, ставшего впоследствии не менее великим Тёмным.
|
||||
Знал ли он, к чему приведут его деяния? Сам ли сделал такой выбор? Какие именно артефакты он создавал и зачем? Темы эти входят в программу «научных дискуссий» фестиваля и пользуются неизменной популярностью. Говорят, Великий Маг обладал умением собирать «Пасьянс Судьбы» - ряд знаний, способностей и артефактов, сочетание которых может развернуть перед обладателем знания прошлого, возможности настоящего и картину будущего. Неизвестно, правда ли это, учитывая судьбу самого Мерлина, но это не мешает всем желающим приехать на праздник и поговорить об этом с организаторами и участниками. Самые неожиданные откровения! Самые странные умения! Самые смелые версии и научные открытия рождаются именно в этом месте, которое, одновременно и «научный симпозиум», и фестиваль, и встреча старых друзей (а может и недругов). Шутники называют фестиваль «мерлинфест», но он имеет и официальное название.
|
||||
«Пасьянс Судьбы» - это и есть официальное название фестиваля для Иных. Информацию о нем можно прочитать лишь через сумрак и узнать место проведения тоже. Если вы смогли узнать это – вас примут как своего, которому рады, но ничем не обязаны, которому помогут, но не защитят от встреч, к которым сами иной не готов.
|
||||
Дозоры официально НЕ рекомендуют никому из иных ездить на этот фестиваль, потому что не хотят отвечать ни за что, что там происходит или может произойти, но, как ни странно, дозорные сами же и ездят. Разумеется, неофициально. Частным порядком. Наравне с Иными вне Дозоров и наравне с теми, чей дозор окончен, ведь более свободной и демократичной площадки для общения не найти, а цели, как вы понимаете, могут быть у всех очень-очень разные.
|
||||
Опытные посетители никогда не приедут на этот праздник, не уладив своих дел, а неопытным посетителям может показаться, что рекомендации Дозоров – это формализм. Как знать, как знать… Мы не станем это комментировать, а просто пригласим вас проверить слухи и попробовать решить свои проблемы, которые, быть может, не могут быть решены нигде, кроме как в маленьком городке Пряжно, затерявшемся где-то на просторах Центральной России. Именно г. Пряжно на выходные 25-26 апреля 2015 года станет площадкой этого странного мероприятия – «мерлинфеста».
|
||||
Забавно, что, в отличие от других фестивалей, этот проходит в городе, имеющем свои Дозоры – маленькие и провинциальные, но самые настоящие и даже очень активные. Более того, эти Дозоры – это только половина Иных города, вторая половина в Дозорах никогда не состояли. Почему сделан такой странный выбор места и как присутствие Дозоров сочетается с традициями неподконтрольности фестиваля – неизвестно. Зато известно со слов организаторов, что традиции свободы фестиваля, от которого после первого же проведения открестились и Светлые, и Темные, и даже Инквизиция, не могут быть нарушены. Говорят, спутать «пасьянс Судьбы» Великого Мерлина невозможно, а кто как ни он сам покровительствует данному фестивалю? Но тут мы уже уходим в область легенд, которых на фестивале предостаточно, и они вряд ли имеют смысл для кого-то, кроме гостей.
|
||||
|
||||
Поэтому, скажем просто и прямо: приезжайте!
|
||||
Отложите дела, возьмите отпуск и приезжайте. Найдете ли вы свою Судьбу или просто славно проведете время – не так уж и важно. Говорят, что важно тут что-то другое, но что именно – даже в этом каждый может сделать выбор сам.
|
||||
Подумайте, а что ВАМ важно в судьбе Иного? Сделайте свой выбор и – в путь!
|
||||
|
||||
Мы, организаторы, вас ждем.
|
||||
17
src/content/posts/prinosim-izvineniya.md
Normal file
17
src/content/posts/prinosim-izvineniya.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Приносим извинения!"
|
||||
pubDate: "2009-10-28T11:13:33+03:00"
|
||||
updatedDate: "2013-03-29T14:31:28+03:00"
|
||||
slug: "prinosim-izvineniya"
|
||||
legacyId: "27"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "tech_news"
|
||||
description: "Уважаемые пользователи! Приносим извинения за недоступность нашего сайта 28.10.2009 с 01:00 до 08:00 в связи с те хническими работами на площадке провайдера."
|
||||
---
|
||||
|
||||
Уважаемые пользователи!
|
||||
|
||||
Приносим извинения за недоступность нашего сайта 28.10.2009 с 01:00 до 08:00 в связи с те хническими работами на площадке провайдера.
|
||||
15
src/content/posts/prinosim-svoi-izvineniya.md
Normal file
15
src/content/posts/prinosim-svoi-izvineniya.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Приносим свои извинения!"
|
||||
pubDate: "2009-10-02T00:33:55+03:00"
|
||||
updatedDate: "2013-03-29T14:31:29+03:00"
|
||||
slug: "prinosim-svoi-izvineniya"
|
||||
legacyId: "24"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "tech_news"
|
||||
description: "Приносим свои извинения за недоступность проекта с 0 часов до 18:00 1 октября этого года в связи с техническими работами на площадке интернет провайдера."
|
||||
---
|
||||
|
||||
Приносим свои извинения за недоступность проекта с 0 часов до 18:00 1 октября этого года в связи с техническими работами на площадке интернет провайдера.
|
||||
21
src/content/posts/reklama.md
Normal file
21
src/content/posts/reklama.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "Реклама..."
|
||||
pubDate: "2010-04-05T19:44:26+03:00"
|
||||
updatedDate: "2013-03-29T14:33:48+03:00"
|
||||
slug: "reklama"
|
||||
legacyId: "65"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
description: "**Итак, проводим небольшой опрос:** [poll id=\"2\"]"
|
||||
---
|
||||
|
||||
**Итак, проводим небольшой опрос:**
|
||||
|
||||
|
||||
|
||||
[poll id="2"]
|
||||
33
src/content/posts/ri-dozory-2015-pasyans-sudby.md
Normal file
33
src/content/posts/ri-dozory-2015-pasyans-sudby.md
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: "РИ \"Дозоры-2015. Пасьянс Судьбы\""
|
||||
pubDate: "2014-12-27T23:17:02+03:00"
|
||||
slug: "ri-dozory-2015-pasyans-sudby"
|
||||
legacyId: "430"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "На правах рекламы"
|
||||
- "Ролевые игры"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "reklama"
|
||||
- "rolgames"
|
||||
description: "МГ «Раздвоение личности» (Гурда и Леся) и мастер по магии Гудшилд представляем вашему вниманию городскую ролевую игру «Дозоры: пасьянс Судьбы\". Это наша четвертая игра по миру Дозоров (книги С. Лукья"
|
||||
---
|
||||
|
||||
МГ «Раздвоение личности» (Гурда и Леся) и мастер по магии Гудшилд представляем вашему вниманию городскую ролевую игру «Дозоры: пасьянс Судьбы".
|
||||
Это наша четвертая игра по миру Дозоров (книги С. Лукьяненко "Ночной Дозор", "Дневной Дозор", "Сумеречный Дозор") в рамках проекта "Провинциальные Дозоры". В каждой игре мы стараемся придерживаться каноничного мира Дозоров, рассказывая истории, которые могли бы иметь место в нем.
|
||||
|
||||
Цикл наших игр по этому миру представляет собой не связанные между собой истории о простой жизни (ой, простой ли?...) маленьких российских городков и провинциальных Дозоров, а так же о приключениях тех иных, которые попадают в "тихую" российскую глубинку и понимают, что в столицах было как-то даже безопасней...
|
||||
|
||||
Вам не надо знать предысторию прошлых игр и иметь игровые связи, чтобы попасть в новую игру. Каждая новая игра – это самостоятельная история.
|
||||
|
||||
В первой игре («Дозоры: провинциальные истории») мы доказали, что за пределами МКАДа жизнь в принципе возможна. Во второй игре («Дозоры: между Светом и Тьмой») нашими основными героями были Иные вне Дозоров (и мы доказали, что вне Дозоров жизнь есть). В третьей игре («Дозоры: фальшивые зеркала») небольшие оперативные группы дозорных из десяти российских городов совместными усилиями изучали ту самую «простую» жизнь российской глубинки.
|
||||
|
||||
В нашей четвертой игре мы хотим поговорить о неофициальной жизни иных, собрав их там, где они могут установить собственные правила отношений – хотя бы в рамках правил фестиваля. Да-да, у этого мероприятия, как у всякого другого общественного мероприятия, есть свои правила, но организаторы не спешат раскрывать их посетителям. Впрочем, те, кто очень дорожит своей свободой и независимостью, могут не волноваться – правила носят рекомендательный характер, и никакого принуждения в этих правилах нет, за что «мерлинфест» так ценится среди знатоков. Но вот знатоками ЧЕГО становятся завсегдатаи фестиваля – это никому не известно. Кроме, разумеется, самих знатоков. И тех, кто к ним присоединится, став участниками этого странного мероприятия.
|
||||
|
||||
Такова завязка игры.
|
||||
|
||||
В игровом мире действие происходит в вымышленном городе Пряжно, но в реальности вам не потребуется выезжать в российскую глубинку - игра будет проходить в одном из парков Москвы, во вполне комфортное дневное и вечернее время (без ночной игры - ночью спать надо!:)) , два выходных дня подряд.
|
||||
|
||||
Игровое время действия, в отличие от физического места, будет вполне соответствовать реальности - весна 2015 г.
|
||||
17
src/content/posts/s-23-fevralya.md
Normal file
17
src/content/posts/s-23-fevralya.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "С 23 февраля!"
|
||||
pubDate: "2013-02-23T05:08:13+03:00"
|
||||
updatedDate: "2013-03-29T14:35:45+03:00"
|
||||
slug: "s-23-fevralya"
|
||||
legacyId: "178"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Мужчины, поздравляем Вас с Днем Защитника Отечества! Будьте мужественными и благородными, чуткими и понимающими, сильными и смелыми. Пусть каждый новый день приносит вам понимание того, что день вч"
|
||||
---
|
||||
|
||||
Мужчины, поздравляем Вас с Днем Защитника Отечества!
|
||||
|
||||
Будьте мужественными и благородными, чуткими и понимающими, сильными и смелыми. Пусть каждый новый день приносит вам понимание того, что день вчерашний был прожит не зря. Желаем вам здоровья, любви и несокрушимой силы воли. Пусть по жизни вам сопутствует удача и радость, а беды и горести обходят вас стороной.
|
||||
18
src/content/posts/s-8-marta.md
Normal file
18
src/content/posts/s-8-marta.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "С 8 марта!"
|
||||
pubDate: "2011-03-07T23:51:27+03:00"
|
||||
updatedDate: "2013-03-29T14:34:36+03:00"
|
||||
slug: "s-8-marta"
|
||||
legacyId: "104"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Желаю счастья и любви. Они дороже всех подарков. И пусть все сбудутся мечты В прекрасный день - 8 Марта!"
|
||||
---
|
||||
|
||||
Желаю счастья и любви.
|
||||
Они дороже всех подарков.
|
||||
И пусть все сбудутся мечты
|
||||
В прекрасный день - 8 Марта!
|
||||
15
src/content/posts/s-dnem-zashhitnika-otechestva.md
Normal file
15
src/content/posts/s-dnem-zashhitnika-otechestva.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "С Днем защитника Отечества!"
|
||||
pubDate: "2012-02-23T04:15:50+03:00"
|
||||
updatedDate: "2013-03-29T14:35:16+03:00"
|
||||
slug: "s-dnem-zashhitnika-otechestva"
|
||||
legacyId: "161"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Поздравляем с 23 февраля тех, кто по духу и по профессии является защитником Отечества. Поздравляем тех, кто в лихую минуту встанет на защиту своей родины России. Тех, кто встанет на защиту слабого. П"
|
||||
---
|
||||
|
||||
Поздравляем с 23 февраля тех, кто по духу и по профессии является защитником Отечества. Поздравляем тех, кто в лихую минуту встанет на защиту своей родины России. Тех, кто встанет на защиту слабого. Поздравляем Воина, Героя и Мужчину!!! С праздником, пусть удача сопутствует Вам во всем!
|
||||
34
src/content/posts/s-nastupayushhim-novym-2010-godom.md
Normal file
34
src/content/posts/s-nastupayushhim-novym-2010-godom.md
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: "С наступающим Новым 2010 Годом!"
|
||||
pubDate: "2009-12-31T13:38:28+03:00"
|
||||
updatedDate: "2013-03-29T14:31:21+03:00"
|
||||
slug: "s-nastupayushhim-novym-2010-godom"
|
||||
legacyId: "43"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: " Уважаемые пользователи и гости нашего ресурса! Администрация корпорации \"Иные Отражения\" поздравляет Вас с наступающим Новым 2010 Годом,"
|
||||
---
|
||||
|
||||

|
||||
|
||||
Уважаемые пользователи и гости нашего ресурса!
|
||||
|
||||
Администрация корпорации "Иные Отражения" поздравляет Вас с наступающим Новым 2010 Годом, и желает Вам в эту ночь исполнения всех Ваших желаний, что-бы Новый Год принёс Вам горы счастья, удачи и любви! Пускай год тигра принесёт в Вашу жизнь только радостные моменты, а Ваши уста не покидает смех и улыбка!
|
||||
|
||||
С годом Тигра поздравляю!
|
||||
И спешу тебе пожелать:
|
||||
Денег чтоб с его приходом
|
||||
Было некуда девать.
|
||||
Новых взлетов без паденья,
|
||||
Чтоб счастливой жизнью жить,
|
||||
И всего, чего за деньги
|
||||
Сам не сможешь ты купить.
|
||||
Смеха, радости, удачи,
|
||||
Верной дружбы и добра,
|
||||
Искренней любви горячей
|
||||
И сердечного тепла!
|
||||
|
||||
С наступающим, 2010 годом!
|
||||
16
src/content/posts/s-prazdnikom-8-marta.md
Normal file
16
src/content/posts/s-prazdnikom-8-marta.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: "С праздником 8 марта!"
|
||||
pubDate: "2012-03-08T04:17:48+03:00"
|
||||
updatedDate: "2013-03-29T14:35:13+03:00"
|
||||
slug: "s-prazdnikom-8-marta"
|
||||
legacyId: "163"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "**Дорогие наши женщины! Поздравляем вас с праздником 8 марта! Пусть реальность для вас будет лучше, чем самая красивая мечта! Пусть в вашей душе всегда царят счастье и гармония! Пусть весна принесет"
|
||||
---
|
||||
|
||||
**Дорогие наши женщины! Поздравляем вас с праздником 8 марта!
|
||||
Пусть реальность для вас будет лучше, чем самая красивая мечта! Пусть в вашей душе всегда царят счастье и гармония! Пусть весна принесет вам любовь!**
|
||||
15
src/content/posts/s-prazdnikom-s-dnem-pobedy.md
Normal file
15
src/content/posts/s-prazdnikom-s-dnem-pobedy.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "С праздником! С Днем Победы!"
|
||||
pubDate: "2014-05-09T05:04:42+03:00"
|
||||
updatedDate: "2014-05-16T20:23:25+03:00"
|
||||
slug: "s-prazdnikom-s-dnem-pobedy"
|
||||
legacyId: "393"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Дорогие ветераны Великой Отечественной войны! Сердечно поздравляем вас с днем Великой Победы! Этот праздник объединяет всех нас гордостью за великую Родину, вечной благодарностью победителям!Пусть Ден"
|
||||
---
|
||||
|
||||
Дорогие ветераны Великой Отечественной войны! Сердечно поздравляем вас с днем Великой Победы! Этот праздник объединяет всех нас гордостью за великую Родину, вечной благодарностью победителям!Пусть День 9 мая прибавит новые силы пережившим войну, напомнит молодым, сколько жизней отдано за свободу нашей Родины, как надо любить и защищать свое Отечество!
|
||||
17
src/content/posts/s-prazdnikom-velikoj-pobedy.md
Normal file
17
src/content/posts/s-prazdnikom-velikoj-pobedy.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "С праздником Великой Победы!"
|
||||
pubDate: "2013-05-09T10:26:24+03:00"
|
||||
updatedDate: "2013-07-31T20:28:21+03:00"
|
||||
slug: "s-prazdnikom-velikoj-pobedy"
|
||||
legacyId: "344"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Дорогие ветераны! От всей души поздравляем вас с Днем Победы! Мы испытываем гордость за тех, кто защитил нашу родину. Мы никогда не забудем погибших и тех, кто всем смертям назло остался в живых. В э"
|
||||
---
|
||||
|
||||
Дорогие ветераны!
|
||||
От всей души поздравляем вас с Днем Победы! Мы испытываем гордость за тех, кто защитил нашу родину. Мы никогда не забудем погибших и тех, кто всем смертям назло остался в живых. В этот великий день, мы желаем всем хорошего здоровья, отличного настроения, благополучия в семье, мирного и солнечного неба над головой.
|
||||
С Великим Праздником Победы!
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Скоро новый год,и малыши как никогда ждут его!"
|
||||
pubDate: "2009-12-25T15:02:40+03:00"
|
||||
updatedDate: "2013-03-29T14:31:22+03:00"
|
||||
slug: "skoro-novyj-godi-malyshi-kak-nikogda-zhdut-ego"
|
||||
legacyId: "40"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "На правах рекламы"
|
||||
categorySlugs:
|
||||
- "reklama"
|
||||
description: "Хотите устроить ребенку праздник? Самый волшебный праздник, который любят все без исключения, и взрослые и дети. Любят зеленую нарядную елку, разноцветные огни, пушистый снег за окном, зимние забавы"
|
||||
---
|
||||
|
||||
Хотите устроить ребенку праздник?
|
||||
Самый волшебный праздник, который любят все без исключения, и взрослые и дети. Любят зеленую нарядную елку, разноцветные огни, пушистый снег за окном, зимние забавы и радости, новогодние чудеса. И конечно, любимые и долгожданные новогодние гости - Дед Мороз и Снегурочка. Игры, веселые песни, заводные танцы, зажигание огней на ёлочке, загадки и мешок с подарками! Ура! Да здравствует наш любимый чудесный Новый Год!
|
||||
|
||||
[Заходите!](http://do4a.ru/newyear.php)
|
||||
15
src/content/posts/spasibo-za-prazdnik.md
Normal file
15
src/content/posts/spasibo-za-prazdnik.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Спасибо за праздник!"
|
||||
pubDate: "2009-09-14T11:58:13+03:00"
|
||||
updatedDate: "2013-03-29T14:31:38+03:00"
|
||||
slug: "spasibo-za-prazdnik"
|
||||
legacyId: "8"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Администрация проекта сердечно благодарит всех, кто пришёл на наш день рождения и выражает огромную признательность за чудесную атмосферу, созданную вами!"
|
||||
---
|
||||
|
||||
Администрация проекта сердечно благодарит всех, кто пришёл на наш день рождения и выражает огромную признательность за чудесную атмосферу, созданную вами!
|
||||
21
src/content/posts/spasite-zhizn-vadimu-rudchenko.md
Normal file
21
src/content/posts/spasite-zhizn-vadimu-rudchenko.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: "СПАСИТЕ ЖИЗНЬ ВАДИМУ РУДЧЕНКО"
|
||||
pubDate: "2011-07-20T14:30:52+03:00"
|
||||
updatedDate: "2013-07-31T23:03:39+03:00"
|
||||
slug: "spasite-zhizn-vadimu-rudchenko"
|
||||
legacyId: "144"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "На правах рекламы"
|
||||
- "Наши друзья"
|
||||
categorySlugs:
|
||||
- "reklama"
|
||||
- "nashi-druzya"
|
||||
description: "[](http://vkontakte.ru/club24541060) СПАСИТЕ ЖИЗНЬ ВАДИМУ РУДЧЕНКО"
|
||||
---
|
||||
|
||||
[](http://vkontakte.ru/club24541060)
|
||||
|
||||
|
||||
|
||||
СПАСИТЕ ЖИЗНЬ ВАДИМУ РУДЧЕНКО
|
||||
15
src/content/posts/texnicheskie-neispravnosti.md
Normal file
15
src/content/posts/texnicheskie-neispravnosti.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "Технические неисправности"
|
||||
pubDate: "2009-11-07T03:21:54+03:00"
|
||||
updatedDate: "2013-03-29T14:31:23+03:00"
|
||||
slug: "texnicheskie-neispravnosti"
|
||||
legacyId: "36"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "tech_news"
|
||||
description: "Приносим извинения за недоступность сервера с 17:00 по московскому времени до 2 часов 7 ноября в связи с физической поломкой сервера."
|
||||
---
|
||||
|
||||
Приносим извинения за недоступность сервера с 17:00 по московскому времени до 2 часов 7 ноября в связи с физической поломкой сервера.
|
||||
19
src/content/posts/uvazhaemye-igroki.md
Normal file
19
src/content/posts/uvazhaemye-igroki.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: "Уважаемые игроки!"
|
||||
pubDate: "2013-09-25T13:45:12+03:00"
|
||||
updatedDate: "2013-09-26T00:49:11+03:00"
|
||||
slug: "uvazhaemye-igroki"
|
||||
legacyId: "372"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
description: "В связи с плановыми работами на площадке оператора связи 26 сентября 2013 г. с 5 до 6 утра возможен перерыв в доступе к сайтам проекта длительностью до 15 минут. Приносим извинения за доставленные"
|
||||
---
|
||||
|
||||
В связи с плановыми работами на площадке оператора связи 26 сентября 2013 г. с 5 до 6 утра возможен перерыв в доступе к сайтам проекта длительностью до 15 минут.
|
||||
|
||||
Приносим извинения за доставленные неудобства.
|
||||
23
src/content/posts/vnimanie-igrokam.md
Normal file
23
src/content/posts/vnimanie-igrokam.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: "Внимание игрокам!"
|
||||
pubDate: "2013-05-01T15:48:55+03:00"
|
||||
updatedDate: "2013-05-04T16:16:43+03:00"
|
||||
slug: "vnimanie-igrokam"
|
||||
legacyId: "335"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Над бездной"
|
||||
- "Глубина"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "nad-bezdnoj"
|
||||
- "glubina"
|
||||
description: "По техническим причинам временно закрыты проекты: \"Иные Отражения: Глубина\" и \"Иные Отражения: Над Бездной\". Приносим свои извинения за доставленные неудобства."
|
||||
---
|
||||
|
||||
По техническим причинам временно закрыты проекты: "Иные Отражения: Глубина" и "Иные Отражения: Над Бездной".
|
||||
|
||||
|
||||
|
||||
Приносим свои извинения за доставленные неудобства.
|
||||
18
src/content/posts/vnimanie-ishhem-adminov-i-gejm-masterov.md
Normal file
18
src/content/posts/vnimanie-ishhem-adminov-i-gejm-masterov.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Внимание! Ищем админов и гейм-мастеров!"
|
||||
pubDate: "2013-01-18T01:34:39+03:00"
|
||||
updatedDate: "2013-08-18T01:35:50+03:00"
|
||||
slug: "vnimanie-ishhem-adminov-i-gejm-masterov"
|
||||
legacyId: "352"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Администрация проекта приглашает администраторов и гейм-мастеров, желающих поучаствовать в развитии проектов: - [Иные Отражения: Ренессанс](http://renessans.anotherreflections.ru/)"
|
||||
---
|
||||
|
||||
Администрация проекта приглашает администраторов и гейм-мастеров, желающих поучаствовать в развитии проектов:
|
||||
|
||||
|
||||
- [Иные Отражения: Ренессанс](http://renessans.anotherreflections.ru/)
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: "Внимание! Мы ищем админов и гейм-мастеров!"
|
||||
pubDate: "2013-08-18T01:40:06+03:00"
|
||||
slug: "vnimanie-my-ishhem-adminov-i-gejm-masterov"
|
||||
legacyId: "354"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
- "На правах рекламы"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
- "reklama"
|
||||
description: "Администрация проекта приглашает администраторов и гейм-мастеров, желающих поучаствовать в развитии проектов: - [Иные Отражения: Ренессанс](http://renessans.anotherreflections.ru/) - [Иные Отр"
|
||||
---
|
||||
|
||||
Администрация проекта приглашает администраторов и гейм-мастеров, желающих поучаствовать в развитии проектов:
|
||||
|
||||
|
||||
- [Иные Отражения: Ренессанс](http://renessans.anotherreflections.ru/)
|
||||
|
||||
- [Иные Отражения: Киндрет - Кровные братья](http://kindret.anotherreflections.ru/)
|
||||
|
||||
- [Иные Отражения: Вархаммер 40к](http://warhammer40k.anotherreflections.ru/)
|
||||
|
||||
- [Иные Отражения: Амбер - янтарное королевство](http://amber.anotherreflections.ru/)
|
||||
|
||||
|
||||
|
||||
Обращаться на мыло admin@anotherreflections.ru или в группу ВКонтакте.
|
||||
27
src/content/posts/vnimanie-texnicheskie-raboty-2.md
Normal file
27
src/content/posts/vnimanie-texnicheskie-raboty-2.md
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "Внимание! Технические работы!"
|
||||
pubDate: "2013-08-06T10:05:18+03:00"
|
||||
updatedDate: "2013-08-18T01:37:38+03:00"
|
||||
slug: "vnimanie-texnicheskie-raboty-2"
|
||||
legacyId: "348"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "Уважаемые пользователи! В связи с проведением плановых работ по апгрейду оборудования на площадке дата-центра 8 августа 2013 г. с 04:00 до 07:00 возможны кратковременные перерывы в работе проек"
|
||||
---
|
||||
|
||||
Уважаемые пользователи!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
В связи с проведением плановых работ по апгрейду оборудования на площадке дата-центра 8 августа 2013 г. с 04:00 до 07:00 возможны кратковременные перерывы в работе проекта, продолжительностью до 15 минут.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Приносим свои извинения за доставленные неудобства.
|
||||
18
src/content/posts/vnimanie-texnicheskie-raboty-3.md
Normal file
18
src/content/posts/vnimanie-texnicheskie-raboty-3.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: "Внимание! Технические работы!"
|
||||
pubDate: "2013-08-24T01:55:40+03:00"
|
||||
slug: "vnimanie-texnicheskie-raboty-3"
|
||||
legacyId: "361"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
description: "В связи с проведением технических работ на серверах с 02:00 до 04:00 24 августа 2013 г. возможны перерывы в работе до 30 минут. Приносим свои извинения за доставленные неудобства."
|
||||
---
|
||||
|
||||
В связи с проведением технических работ на серверах с 02:00 до 04:00 24 августа 2013 г. возможны перерывы в работе до 30 минут.
|
||||
|
||||
Приносим свои извинения за доставленные неудобства.
|
||||
16
src/content/posts/vnimanie-texnicheskie-raboty-4.md
Normal file
16
src/content/posts/vnimanie-texnicheskie-raboty-4.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: "Внимание! Технические работы!"
|
||||
pubDate: "2015-05-29T01:26:28+03:00"
|
||||
updatedDate: "2015-06-02T01:27:06+03:00"
|
||||
slug: "vnimanie-texnicheskie-raboty-4"
|
||||
legacyId: "440"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "2 июня 2015г. с 3 до 4 утра, в связи с проведением технических работ на площадке оператора связи, обслуживающего нашу инфраструктуру, возможны перебои с предоставлением услуг длительностью до 30 мин"
|
||||
---
|
||||
|
||||
2 июня 2015г. с 3 до 4 утра, в связи с проведением технических работ на площадке оператора связи, обслуживающего нашу инфраструктуру, возможны перебои с предоставлением услуг длительностью до 30 минут.
|
||||
Приносим Вам свои извинения за доставленные неудобства и надеемся на Ваше понимание!
|
||||
16
src/content/posts/vnimanie-texnicheskie-raboty-6.md
Normal file
16
src/content/posts/vnimanie-texnicheskie-raboty-6.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: "Внимание! Технические работы!"
|
||||
pubDate: "2014-08-17T23:49:49+03:00"
|
||||
slug: "vnimanie-texnicheskie-raboty-6"
|
||||
legacyId: "416"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
description: "19 августа 2014г. с 3 до 4-30 утра, в связи с проведением технических работ на площадке оператора связи, обслуживающего нашу инфраструктуру, возможны перебои с доступом к сайтам проекта длительностью"
|
||||
---
|
||||
|
||||
19 августа 2014г. с 3 до 4-30 утра, в связи с проведением технических работ на площадке оператора связи, обслуживающего нашу инфраструктуру, возможны перебои с доступом к сайтам проекта длительностью до 15 минут. Приносим Вам свои извинения за доставленные неудобства и надеемся на Ваше понимание!
|
||||
17
src/content/posts/vnimanie-texnicheskie-raboty.md
Normal file
17
src/content/posts/vnimanie-texnicheskie-raboty.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: "Внимание! Технические работы!"
|
||||
pubDate: "2010-06-10T01:21:47+03:00"
|
||||
updatedDate: "2013-03-29T14:33:47+03:00"
|
||||
slug: "vnimanie-texnicheskie-raboty"
|
||||
legacyId: "68"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
- "Технические"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
- "tech_news"
|
||||
description: "Уважаемые пользователи! Сегодня, 10 июня 2010 года планируется проведение технических работ, что вызовет недоступность ресурса продолжительностью около 30 минут. О точном времени проведения работ бу"
|
||||
---
|
||||
|
||||
Уважаемые пользователи! Сегодня, 10 июня 2010 года планируется проведение технических работ, что вызовет недоступность ресурса продолжительностью около 30 минут. О точном времени проведения работ будет объявлено дополнительно. Приносим Вам извинения за доставленные неудобства!
|
||||
28
src/content/posts/zdravstvuj-posetitel.md
Normal file
28
src/content/posts/zdravstvuj-posetitel.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Здравствуй посетитель!"
|
||||
pubDate: "2011-05-12T17:27:53+03:00"
|
||||
updatedDate: "2013-03-29T14:34:35+03:00"
|
||||
slug: "zdravstvuj-posetitel"
|
||||
legacyId: "120"
|
||||
author: "admin"
|
||||
categories:
|
||||
- "Общие новости"
|
||||
categorySlugs:
|
||||
- "obshhie-novosti"
|
||||
description: "**Приветствую тебя на нашем сайте!** **Приглашаем тебя в мир увлекательных форумных ролевых игр по мотивам фантастических миров цикла \"Дозоры\" Сергея Лукьяненко и Владмира Васильева, \"Хроники Амб"
|
||||
---
|
||||
|
||||
**Приветствую тебя на нашем сайте!**
|
||||
|
||||
|
||||
**Приглашаем тебя в мир увлекательных форумных ролевых игр по мотивам фантастических миров цикла "Дозоры" Сергея Лукьяненко и Владмира Васильева, "Хроники Амбера" Роджера Желязны,"Киндрет - Кровные братья" Алексея Пехова и многих других!**
|
||||
|
||||
**Выбирай мир, который тебе понравится, регистрируйся, играй, получай удовольствие!**
|
||||
|
||||
**По любым вопросам Вы можете обратиться в ЛС ГеймМастеру Кейран!**
|
||||
|
||||
**
|
||||
**
|
||||
|
||||
**С уважением, администрация проекта "Иные Отражениия"!
|
||||
**
|
||||
65
src/layouts/BaseLayout.astro
Normal file
65
src/layouts/BaseLayout.astro
Normal file
@@ -0,0 +1,65 @@
|
||||
---
|
||||
import '../styles/global.css';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION, SITE_URL, SITE_LANG, MAIN_NAV } from '../consts';
|
||||
|
||||
interface Props {
|
||||
title?: string;
|
||||
description?: string;
|
||||
ogType?: 'website' | 'article';
|
||||
}
|
||||
|
||||
const { title, description, ogType = 'website' } = Astro.props;
|
||||
const pageTitle = title ? `${title} — ${SITE_TITLE}` : SITE_TITLE;
|
||||
const pageDesc = description || SITE_DESCRIPTION;
|
||||
const canonical = new URL(Astro.url.pathname, SITE_URL).toString();
|
||||
const year = new Date().getFullYear();
|
||||
---
|
||||
<!doctype html>
|
||||
<html lang={SITE_LANG}>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{pageTitle}</title>
|
||||
<meta name="description" content={pageDesc} />
|
||||
<link rel="canonical" href={canonical} />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
|
||||
<meta property="og:type" content={ogType} />
|
||||
<meta property="og:title" content={pageTitle} />
|
||||
<meta property="og:description" content={pageDesc} />
|
||||
<meta property="og:url" content={canonical} />
|
||||
<meta property="og:site_name" content={SITE_TITLE} />
|
||||
<meta property="og:locale" content="ru_RU" />
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title={`${SITE_TITLE} — RSS`} href="/feed.xml" />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Lora:wght@500;600;700&display=swap" rel="stylesheet" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="site-header-inner">
|
||||
<div>
|
||||
<h1 class="site-title"><a href="/">{SITE_TITLE}</a></h1>
|
||||
<span class="site-tagline">{SITE_DESCRIPTION}</span>
|
||||
</div>
|
||||
<nav>
|
||||
<ul class="site-nav">
|
||||
{MAIN_NAV.map((item) => (
|
||||
<li><a href={item.href}>{item.label}</a></li>
|
||||
))}
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<slot />
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<p>© 2006–{year} {SITE_TITLE} · <a href="/feed.xml">RSS</a> · <a href="/sitemap-index.xml">Sitemap</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
52
src/lib/rss-helpers.ts
Normal file
52
src/lib/rss-helpers.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { getCollection, render } from 'astro:content';
|
||||
import type { CollectionEntry } from 'astro:content';
|
||||
import { experimental_AstroContainer as AstroContainer } from 'astro/container';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
import { SITE_URL, RSS_CUTOFF, RSS_LIMIT } from '../consts';
|
||||
|
||||
/**
|
||||
* Берёт коллекцию постов, отфильтровывает по cutoff (для IPB Importer
|
||||
* не вбрасывать архив), сортирует по pubDate desc, режет до RSS_LIMIT.
|
||||
*/
|
||||
export async function getFeedPosts(filter?: (p: CollectionEntry<'posts'>) => boolean) {
|
||||
const all = await getCollection('posts');
|
||||
return all
|
||||
.filter((p) => p.data.pubDate >= RSS_CUTOFF)
|
||||
.filter((p) => (filter ? filter(p) : true))
|
||||
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf())
|
||||
.slice(0, RSS_LIMIT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Рендерит markdown тело поста в безопасный HTML строкой —
|
||||
* для CDATA-врезки в <content:encoded>.
|
||||
*/
|
||||
export async function renderPostHtml(post: CollectionEntry<'posts'>): Promise<string> {
|
||||
const container = await AstroContainer.create();
|
||||
const { Content } = await render(post);
|
||||
const html = await container.renderToString(Content);
|
||||
return sanitizeHtml(html, {
|
||||
allowedTags: [
|
||||
'p', 'a', 'strong', 'em', 'b', 'i', 'u', 'br', 'hr',
|
||||
'ul', 'ol', 'li',
|
||||
'blockquote', 'pre', 'code',
|
||||
'h1', 'h2', 'h3', 'h4',
|
||||
'img',
|
||||
],
|
||||
allowedAttributes: {
|
||||
a: ['href', 'title', 'target', 'rel'],
|
||||
img: ['src', 'alt', 'title', 'width', 'height'],
|
||||
},
|
||||
allowedSchemes: ['http', 'https', 'mailto'],
|
||||
transformTags: {
|
||||
a: (_tag, attribs) => ({
|
||||
tagName: 'a',
|
||||
attribs: { ...attribs, target: '_blank', rel: 'noopener noreferrer' },
|
||||
}),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** Абсолютный URL поста, стабильный — становится guid для IPB-дедупликации. */
|
||||
export const postUrl = (post: CollectionEntry<'posts'>) =>
|
||||
new URL(`/${post.data.slug}/`, SITE_URL).toString();
|
||||
51
src/pages/[slug].astro
Normal file
51
src/pages/[slug].astro
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
import { getCollection, render } from 'astro:content';
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection('posts');
|
||||
const pages = await getCollection('pages');
|
||||
return [
|
||||
...posts.map((p) => ({ params: { slug: p.data.slug }, props: { entry: p, kind: 'post' as const } })),
|
||||
...pages.map((p) => ({ params: { slug: p.data.slug }, props: { entry: p, kind: 'page' as const } })),
|
||||
];
|
||||
}
|
||||
|
||||
const { entry, kind } = Astro.props;
|
||||
const { Content } = await render(entry);
|
||||
|
||||
const fmtDate = (d: Date) =>
|
||||
d.toLocaleDateString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric' });
|
||||
---
|
||||
<BaseLayout title={entry.data.title} description={kind === 'post' ? entry.data.description : undefined} ogType={kind === 'post' ? 'article' : 'website'}>
|
||||
<article class="post">
|
||||
<header>
|
||||
<h1>{entry.data.title}</h1>
|
||||
{kind === 'post' && (
|
||||
<div class="post-meta">
|
||||
<time datetime={entry.data.pubDate.toISOString()}>{fmtDate(entry.data.pubDate)}</time>
|
||||
{entry.data.categories.length > 0 && (
|
||||
<>
|
||||
{' · '}
|
||||
{entry.data.categories.map((cat, i) => (
|
||||
<>
|
||||
{i > 0 && ', '}
|
||||
<a href={`/category/${entry.data.categorySlugs[i]}/`}>{cat}</a>
|
||||
</>
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</header>
|
||||
<div class="post-body">
|
||||
<Content />
|
||||
</div>
|
||||
</article>
|
||||
|
||||
{kind === 'post' && (
|
||||
<nav class="pagination">
|
||||
<a href="/">← Все новости</a>
|
||||
</nav>
|
||||
)}
|
||||
</BaseLayout>
|
||||
48
src/pages/category/[slug].astro
Normal file
48
src/pages/category/[slug].astro
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection('posts');
|
||||
const bySlug = new Map<string, { name: string; posts: typeof posts }>();
|
||||
|
||||
for (const p of posts) {
|
||||
p.data.categorySlugs.forEach((slug, i) => {
|
||||
const name = p.data.categories[i] ?? slug;
|
||||
if (!bySlug.has(slug)) bySlug.set(slug, { name, posts: [] as any });
|
||||
(bySlug.get(slug)!.posts as any).push(p);
|
||||
});
|
||||
}
|
||||
|
||||
return Array.from(bySlug.entries()).map(([slug, { name, posts }]) => ({
|
||||
params: { slug },
|
||||
props: { name, posts },
|
||||
}));
|
||||
}
|
||||
|
||||
const { name, posts } = Astro.props;
|
||||
const sorted = posts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
|
||||
|
||||
const fmtDate = (d: Date) =>
|
||||
d.toLocaleDateString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric' });
|
||||
---
|
||||
<BaseLayout title={`Категория: ${name}`}>
|
||||
<section>
|
||||
<h1>{name}</h1>
|
||||
<p class="post-meta">
|
||||
{sorted.length} постов ·
|
||||
<a href={`/category/${Astro.params.slug}/feed.xml`}>RSS этой категории</a>
|
||||
</p>
|
||||
<ul class="post-list">
|
||||
{sorted.map((post) => (
|
||||
<li class="post-list-item">
|
||||
<div class="post-meta">
|
||||
<time datetime={post.data.pubDate.toISOString()}>{fmtDate(post.data.pubDate)}</time>
|
||||
</div>
|
||||
<h2><a href={`/${post.data.slug}/`}>{post.data.title}</a></h2>
|
||||
{post.data.description && <p class="post-excerpt">{post.data.description}…</p>}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</section>
|
||||
</BaseLayout>
|
||||
46
src/pages/category/[slug]/feed.xml.ts
Normal file
46
src/pages/category/[slug]/feed.xml.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import rss from '@astrojs/rss';
|
||||
import type { APIContext } from 'astro';
|
||||
import { getCollection } from 'astro:content';
|
||||
import { SITE_TITLE, SITE_URL, SITE_LANG } from '../../../consts';
|
||||
import { getFeedPosts, renderPostHtml, postUrl } from '../../../lib/rss-helpers';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection('posts');
|
||||
const slugs = new Map<string, string>();
|
||||
posts.forEach((p) =>
|
||||
p.data.categorySlugs.forEach((s, i) => slugs.set(s, p.data.categories[i] ?? s))
|
||||
);
|
||||
return Array.from(slugs.entries()).map(([slug, name]) => ({
|
||||
params: { slug },
|
||||
props: { name },
|
||||
}));
|
||||
}
|
||||
|
||||
export async function GET(context: APIContext) {
|
||||
const slug = context.params.slug as string;
|
||||
const { name } = context.props as { name: string };
|
||||
|
||||
const posts = await getFeedPosts((p) => p.data.categorySlugs.includes(slug));
|
||||
|
||||
const items = await Promise.all(
|
||||
posts.map(async (post) => ({
|
||||
title: post.data.title,
|
||||
link: postUrl(post),
|
||||
guid: postUrl(post),
|
||||
pubDate: post.data.pubDate,
|
||||
description: post.data.description || post.data.title,
|
||||
content: await renderPostHtml(post),
|
||||
author: post.data.author,
|
||||
categories: post.data.categories,
|
||||
}))
|
||||
);
|
||||
|
||||
return rss({
|
||||
title: `${SITE_TITLE} — ${name}`,
|
||||
description: `Новости категории «${name}»`,
|
||||
site: context.site ?? SITE_URL,
|
||||
items,
|
||||
customData: `<language>${SITE_LANG}</language><lastBuildDate>${new Date().toUTCString()}</lastBuildDate>`,
|
||||
xmlns: { content: 'http://purl.org/rss/1.0/modules/content/' },
|
||||
});
|
||||
}
|
||||
30
src/pages/feed.xml.ts
Normal file
30
src/pages/feed.xml.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import rss from '@astrojs/rss';
|
||||
import type { APIContext } from 'astro';
|
||||
import { SITE_TITLE, SITE_DESCRIPTION, SITE_URL, SITE_LANG } from '../consts';
|
||||
import { getFeedPosts, renderPostHtml, postUrl } from '../lib/rss-helpers';
|
||||
|
||||
export async function GET(context: APIContext) {
|
||||
const posts = await getFeedPosts();
|
||||
|
||||
const items = await Promise.all(
|
||||
posts.map(async (post) => ({
|
||||
title: post.data.title,
|
||||
link: postUrl(post),
|
||||
guid: postUrl(post),
|
||||
pubDate: post.data.pubDate,
|
||||
description: post.data.description || post.data.title,
|
||||
content: await renderPostHtml(post),
|
||||
author: post.data.author,
|
||||
categories: post.data.categories,
|
||||
}))
|
||||
);
|
||||
|
||||
return rss({
|
||||
title: SITE_TITLE,
|
||||
description: SITE_DESCRIPTION,
|
||||
site: context.site ?? SITE_URL,
|
||||
items,
|
||||
customData: `<language>${SITE_LANG}</language><lastBuildDate>${new Date().toUTCString()}</lastBuildDate>`,
|
||||
xmlns: { content: 'http://purl.org/rss/1.0/modules/content/' },
|
||||
});
|
||||
}
|
||||
47
src/pages/index.astro
Normal file
47
src/pages/index.astro
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
import { FORUMS } from '../consts';
|
||||
|
||||
const posts = (await getCollection('posts'))
|
||||
.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
|
||||
|
||||
const fmtDate = (d: Date) =>
|
||||
d.toLocaleDateString('ru-RU', { year: 'numeric', month: 'long', day: 'numeric' });
|
||||
---
|
||||
<BaseLayout>
|
||||
<section>
|
||||
<h1>Новости</h1>
|
||||
<ul class="post-list">
|
||||
{posts.map((post) => (
|
||||
<li class="post-list-item">
|
||||
<div class="post-meta">
|
||||
<time datetime={post.data.pubDate.toISOString()}>{fmtDate(post.data.pubDate)}</time>
|
||||
{post.data.categories.length > 0 && (
|
||||
<>
|
||||
{' · '}
|
||||
{post.data.categories.map((cat, i) => (
|
||||
<>
|
||||
{i > 0 && ', '}
|
||||
<a href={`/category/${post.data.categorySlugs[i]}/`}>{cat}</a>
|
||||
</>
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<h2><a href={`/${post.data.slug}/`}>{post.data.title}</a></h2>
|
||||
{post.data.description && <p class="post-excerpt">{post.data.description}…</p>}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section id="forums">
|
||||
<h2>Форумы и проекты</h2>
|
||||
<ul class="forums-grid">
|
||||
{FORUMS.map((f) => (
|
||||
<li><a href={f.url} target="_blank" rel="noopener">{f.name}</a></li>
|
||||
))}
|
||||
</ul>
|
||||
</section>
|
||||
</BaseLayout>
|
||||
241
src/styles/global.css
Normal file
241
src/styles/global.css
Normal file
@@ -0,0 +1,241 @@
|
||||
/* Иные Отражения — тёмная палитра в духе старой темы darkness-10, без скевоморфизма */
|
||||
|
||||
:root {
|
||||
--bg: #0d1117;
|
||||
--bg-elev: #161b22;
|
||||
--bg-elev-2: #1c2129;
|
||||
--border: #2a313c;
|
||||
--fg: #d4d4d4;
|
||||
--fg-muted: #8b949e;
|
||||
--fg-dim: #6e7681;
|
||||
--accent: #9a7bff;
|
||||
--accent-hover: #b59aff;
|
||||
--link: #79b8ff;
|
||||
--link-hover: #c8e1ff;
|
||||
|
||||
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
|
||||
--font-serif: 'Lora', 'PT Serif', Georgia, serif;
|
||||
--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
|
||||
|
||||
--container: 760px;
|
||||
--container-wide: 1100px;
|
||||
}
|
||||
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
|
||||
html {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
font-family: var(--font-sans);
|
||||
font-size: 17px;
|
||||
line-height: 1.65;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
width: 100%;
|
||||
max-width: var(--container);
|
||||
margin: 0 auto;
|
||||
padding: 2rem 1.25rem 4rem;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
font-family: var(--font-serif);
|
||||
font-weight: 600;
|
||||
color: #e6edf3;
|
||||
line-height: 1.25;
|
||||
margin: 1.8em 0 0.6em;
|
||||
}
|
||||
|
||||
h1 { font-size: 2.1rem; margin-top: 0.4em; }
|
||||
h2 { font-size: 1.55rem; }
|
||||
h3 { font-size: 1.25rem; }
|
||||
|
||||
p, ul, ol, blockquote { margin: 0 0 1.15em; }
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: color .15s, border-color .15s;
|
||||
}
|
||||
a:hover { color: var(--link-hover); border-bottom-color: var(--link-hover); }
|
||||
|
||||
blockquote {
|
||||
margin: 1.2em 0;
|
||||
padding: .2em 1em;
|
||||
border-left: 3px solid var(--accent);
|
||||
color: var(--fg-muted);
|
||||
background: var(--bg-elev);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
img { max-width: 100%; height: auto; }
|
||||
|
||||
hr {
|
||||
border: 0;
|
||||
border-top: 1px solid var(--border);
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
code, pre {
|
||||
font-family: var(--font-mono);
|
||||
font-size: .92em;
|
||||
}
|
||||
code {
|
||||
background: var(--bg-elev);
|
||||
padding: .1em .35em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
pre {
|
||||
background: var(--bg-elev);
|
||||
border: 1px solid var(--border);
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.site-header {
|
||||
border-bottom: 1px solid var(--border);
|
||||
background: linear-gradient(180deg, #0a0e14 0%, var(--bg) 100%);
|
||||
}
|
||||
.site-header-inner {
|
||||
max-width: var(--container-wide);
|
||||
margin: 0 auto;
|
||||
padding: 1.25rem 1.25rem;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
}
|
||||
.site-title {
|
||||
font-family: var(--font-serif);
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.01em;
|
||||
margin: 0;
|
||||
}
|
||||
.site-title a {
|
||||
color: #e6edf3;
|
||||
border-bottom: none;
|
||||
}
|
||||
.site-title a:hover { color: var(--accent); }
|
||||
.site-tagline {
|
||||
font-size: .85rem;
|
||||
color: var(--fg-muted);
|
||||
display: block;
|
||||
margin-top: 2px;
|
||||
}
|
||||
.site-nav {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.site-nav a {
|
||||
color: var(--fg);
|
||||
border-bottom: none;
|
||||
font-size: .95rem;
|
||||
}
|
||||
.site-nav a:hover { color: var(--accent); }
|
||||
|
||||
/* Footer */
|
||||
.site-footer {
|
||||
border-top: 1px solid var(--border);
|
||||
padding: 2rem 1.25rem 3rem;
|
||||
color: var(--fg-muted);
|
||||
font-size: .88rem;
|
||||
text-align: center;
|
||||
}
|
||||
.site-footer a { color: var(--fg-muted); border-bottom-color: var(--border); }
|
||||
.site-footer a:hover { color: var(--accent); border-bottom-color: var(--accent); }
|
||||
|
||||
/* Post list */
|
||||
.post-list { list-style: none; padding: 0; margin: 0; }
|
||||
.post-list-item {
|
||||
padding: 1.25rem 0;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.post-list-item:last-child { border-bottom: none; }
|
||||
.post-list-item h2 {
|
||||
margin: 0 0 .35em;
|
||||
font-size: 1.35rem;
|
||||
}
|
||||
.post-list-item h2 a {
|
||||
color: #e6edf3;
|
||||
border-bottom: none;
|
||||
}
|
||||
.post-list-item h2 a:hover { color: var(--accent); }
|
||||
.post-meta {
|
||||
font-size: .82rem;
|
||||
color: var(--fg-dim);
|
||||
margin-bottom: .4em;
|
||||
}
|
||||
.post-meta a {
|
||||
color: var(--fg-muted);
|
||||
border-bottom: none;
|
||||
}
|
||||
.post-meta a:hover { color: var(--accent); }
|
||||
.post-excerpt { color: var(--fg-muted); margin: 0; }
|
||||
|
||||
/* Single post */
|
||||
.post header {
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 1em;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.post h1 { margin: 0 0 .3em; }
|
||||
|
||||
/* Forums grid */
|
||||
.forums-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
||||
gap: .75rem;
|
||||
margin: 1em 0 2em;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.forums-grid a {
|
||||
display: block;
|
||||
padding: .75rem 1rem;
|
||||
background: var(--bg-elev);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
color: var(--fg);
|
||||
font-size: .95rem;
|
||||
}
|
||||
.forums-grid a:hover {
|
||||
background: var(--bg-elev-2);
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* Pagination */
|
||||
.pagination {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin: 2em 0;
|
||||
gap: 1rem;
|
||||
}
|
||||
.pagination a {
|
||||
padding: .5em 1em;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 4px;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.pagination a:hover {
|
||||
border-color: var(--accent);
|
||||
color: var(--accent);
|
||||
}
|
||||
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
Reference in New Issue
Block a user