процесс

Свой блог с использованием Тильды. Часть 2.

Акимов Михаил, основатель школы
12 июля 2017
В этой части мы познакомимся с работой сервера apache и создадим простые правила перенаправления в файле .htaccess. Эти правила позволяют создавать ЧПУ - человеко-понятные-урлы для наших страниц: phpcode.online/blog/how-make-blog/.

После того как страницы с нужными урлами начнут открываться - запрограммируем блок в который автоматически будут добавляться новые записи блога.
Прошлый урок: знакомство с API Тильды и библиотекой
На прошлом уроке узнали о том как Тильда сообщает об обновлении страницы. Как запоминать какие страницы обновлены и написали программу, которая скачивает обновления указанных страниц.
веб-сервер
Настройка рерайтов в Апаче
За изменение URL-а и настройки ЧПУ (человеко-понятный урл) используем модуль mod_rewrite у Апача. Сами же правила нужно записывать в файл .htaccess
Все запросы для которых нет файла передаем в корень
При запросе, страницы, которой нет на сервере, то передаем запрос в корень, в скрипт по умолчанию. Там у нас лежит файл index.php - он и будет разбираться, что показать для запрошенной страницы.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . / [QSA,L]
программирование
Вывод списка постов
Для вывода списка статей блога, нужно:
1
создадим каталог /blog/ и в нем файл index.php - в этом файле и будет основная логика вывода.
2
пройдемся по каталогу с мета-информацией по заметкам блога tilda/meta/ и создадим список
3
создадим шаблон страницы для вывода списка
4
соединим шаблон и скрипт со списком заметок
Выводим список заметок
<?php
include $_SERVER['DOCUMENT_ROOT'].'/inc/class_application.php';
Application::one()->init();
$d = dir(Application::one()->PATH_PUBLIC.'tilda/meta/');
while (false !== ($entry = $d->read())) {
    // отбираем только страницы с мета-данными
    if (substr($entry,0,4) == 'page' && substr($entry,-4)=='.php') {
        $arPage = include $d->path.'/'.$entry;
        echo '<a href="/'.$arPage['alias'].'/">'.$arPage['title'].'</a><br>';
    }
}
$d->close();
Шаблон blog.tpl.php
<header class="intro-header cover cover-blog" style="height:100vh;">
        <div class="cover_carier" style="background-color: #111; height: 100vh;"></div>
        <div class="filteropacity" style="height: 100%;"></div>
        <div class="row">
            <div class="container" >
                <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                    <div class="post-heading">
                        <h1>Блог</h1>
                        <span class="meta">о программировании и не только</span>
                       
                    </div>
                </div>
            </div>
        </div>
</header>
<article>
    <ul>
    <?php foreach($arPages as $arPage): ?>
        <li><a href="/<?=$arPage['alias']?>/"><?=$arPage['title']?></a></li>
    <?php endforeach; ?>
    </ul>
</article>
Вывод сортированного списка страниц
<?php
include $_SERVER['DOCUMENT_ROOT'].'/inc/class_application.php';
Application::one()->init();
Application::one()->setTitle('Блог проекта PHPCode.online');
$d = dir(Application::one()->PATH_PUBLIC.'tilda/meta/');
$arVars = array('arPages'=> array());
$arSort = array();
$arPages = array();
while (false !== ($entry = $d->read())) {
    if (substr($entry,0,4) == 'page' && substr($entry,-4)=='.php') {
        $arPage = include $d->path.'/'.$entry;
        if (substr($arPage['alias'],0,5)=='blog/' && $arPage['alias'] != 'blog/') {
            // запомним страницы в отдельном массиве
            $arPages[$arPage['id']] = $arPage;
            // занесем в отдельный массив код страницы и порядковый номер для сортировки
            $arSort[$arPage['id']] = empty($arPage['sort']) ? '1' : $arPage['sort'];
        }
    }
}
$d->close();
// отсортируем массив номерам сортировки с сохранением ключей (они же коды страниц)
arsort($arSort);
// переберем отсортированный массив и в этом порядке внесем страницы в массив для передачи в шаблон
foreach ($arSort as $id => $sort) {
    $arVars['arPages'][] = $arPages[$id];
}
unset($arPages);
// отобразим страницу blog
Application::one()->showPage('blog','main', $arVars);
Если есть вопросы - сначала попробуйте сами найти ответ (гугл в помощь) и только если не получится, тогда спрашивайте :)
Made on
Tilda