Создание нового блога.

Создание нового блога.

Идеология Блоговой Наны предусматривает возможность работы с одними и теми же данными (посты, комментарии, набор категорий) через блоги, развёрнутые в разных местах сайта. В частном, привычном нам случае, такое место будет всего одно.

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

Но об этом чуть позже.
Пока же нужно создать два простых файла.

1) Документ блога.

Файл дистрибутива ./data/content/blog/index.php демонстрирует, как выглядит документ, в URL-е которого будет развёрнут блог. В нём всего-то два оператора:

<?php /* Выше этой строки в файле ничего не должно быть */

   
$blog_name='main';          # имя инсталляции Блоговой Наны.
   
include($_s['loc']['modul'].$_s['blog']['base'].'_blog.php');

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Набор данных для каждого конкретного блога задаётся через имя инсталляции - это то, что указано в первом операторе как main. Инсталляция должна быть оговорена в файле настроек, как рассмотрено в предыдущем документе. В частности, инсталляции требуется назначить Администратора (или нескольких).

Абсолютно весь функционал блога разворачивается в URL-е рассматриваемого документа. Документ вовсе не обязан быть корневым для папки, как вы наблюдаете в дистрибутиве Блоговой Наны. Это может быть заурядный документ любого фолдера и с любым именем.

1.a) Возможность модернизации.

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

Страдающие подобной фобией просто копируют себе дополнительный кусочек кода, который все ссылки на внешние сайты пропускает через встроенный редиректор Блоговой Наны, используя её же функционал:

## Подмена ссылок на внешние домены собственным редиректом Блоговой Наны.

   
if (preg_match_all('~href="([^"]+?)"~Usi',$_s['content'],$n)) {
      foreach (
$n[1] as $i => $url) {
         if (
b_url_is_ok($url)
         and 
b_furl_ok($url)
         and !
stristr($url,$_s['loc']['host'])) $_s['content']=
         
str_replace(
            
$n[0][$i],
            
'href="'.$_s['loc']['this'].'_url_'.url_code($url).$_s['ext'].'"',
            
$_s['content']
         );
      }
   }

2) Файл меню и его хитрости.

В простейшем случае файл меню выглядит так:

<?php /* Выше этой строки в файле ничего не должно быть */

   
global $_blog;

   if (isset(
$_s['loc']['fold']) and isset($_s['loc']['this'])) {
      if (
$_blog['admin']) get_menu_html_code(
         
$_s['des'],
         array(
            
'Админу:' => array(
               
$_s['loc']['this'].'_settings'.         $_s['ext'] => 'Настройки блога',
               
$_s['loc']['this'].'_edit_post'.        $_s['ext'] => 'Создать новый пост',
               
$_s['loc']['this'].'_comment_inspector'.$_s['ext'] => 'Новые комментарии',
            ),
         )
      );
      
get_menu_html_code(
         
$_s['des'],
         array(
            
'Навигация:' => array(
               
$_s['loc']['fold'].'index'.            $_s['ext'] => 'Морда блога',
            ),
         )
      );
      
get_menu_html_code(
         
$_s['des'],
         (isset(
$_blog['menu']) ? $_blog['menu']: array())
      );
   }

/* Ниже этой строки в файле ничего не должно быть. */ ?>

Тут функция get_menu_html_code(), ответственная за формирование блока меню, встречается три раза. Как следствие, у нас возможны три разных блока меню.

  1. Блок админского меню, появляется только под авторизацией.
    Ссылки с него управляют настройками блога.
    И открывают доступ к осуществлению менеджмента контента.

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

  2. Блок навигации для пользователя. Навигация отображается всегда.
    Минимально она ссылается на морду блога.
    Можете также добавить сюда какие-то свои уместные ссылки.

  3. Блок с наперёд неведомым содержимым.
    Строится самим блогом, это список его категорий и RSS лент.
    Показывается только при нахождении на страницах блога.

Имейте ввиду: третий блок фактически состоит из двух менюшек, первая из которых вообще не отображается, если категория в блоге всего одна. Всё равно в той менюшке будет единственная ссылка, совпадающая со ссылкой на морду блога.

Категория, в которой ещё нет постов, также отсутствует в первой менюшке третьего блока.

Вторая менюшка третьего блока ссылается на RSS ленту всего блога, а также RSS ленту категории, если их в блоге несколько, а на экране раскрыт документ блога, относящийся к данной категории. Это может быть пост, комментарий поста, список постов категории.

Если RSS ленты запрещены, то второе меню третьего блока осутствует.

Также обратите внимание, что ссылки управления блогом строятся не относительно фолдера, как обычно (это была бы переменная $_s['loc']['fold'], подробнее читайте в ЧПУ Наны), а относительно документа $_s['loc']['this']. Следует пояснить, почему именно так.

Во второй блок меню мы можем заселить неограниченное число блогов разных инсталляций. Достаточно наделать ещё файлов из раздела 1) документ блога, например, под именами pepetun.php и pokemon.php, прописав им другие имена инсталляции. Тогда файл меню может быть таким:

php /* Выше этой строки в файле ничего не должно быть */

   
global $_blog;

   if (isset(
$_s['loc']['fold']) and isset($_s['loc']['this'])) {
      if (
$_blog['admin']) get_menu_html_code(
         
$_s['des'],
         array(
            
'Админу:' => array(
               
$_s['loc']['this'].'_settings'.         $_s['ext'] => 'Настройки блога',
               
$_s['loc']['this'].'_edit_post'.        $_s['ext'] => 'Создать новый пост',
               
$_s['loc']['this'].'_comment_inspector'.$_s['ext'] => 'Новые комментарии',
            ),
         )
      );
      
get_menu_html_code(
         
$_s['des'],
         array(
            
'Навигация:' => array(
               
$_s['loc']['fold'].'index'.            $_s['ext'] => 'Титульный блог',
               
$_s['loc']['fold'].'pepetun'.          $_s['ext'] => 'Блог Пепетуна',
               
$_s['loc']['fold'].'pokemon'.          $_s['ext'] => 'Блог Покемона',
            ),
         )
      );
      
get_menu_html_code(
         
$_s['des'],
         (isset(
$_blog['menu']) ? $_blog['menu']: array())
      );
   }

/* Ниже этой строки в файле ничего не должно быть. */ 

Самое интересное, что админское меню при этом будет управлять тем блогом, любой из документов которого открыт в браузере. Список категорий и RSS лент (третий блок меню) также заимствуется от просматриваемого блога.

Если Администратор имеет власть над каждым из этих блогов, то администрирование блогов пользователей сайта может вестись из одного места, и самым удобным для Администратора образом. Ну и серферу тоже удобно - простой доступ к нескольким разным блогам, плюс динамическая менюшка с разделами каждого из блогов. И RSS лентами.