Мой сайт

Сайт обо всем по порядку

WpFatFree. Вывод шаблона.


  Вывод страниц для представления браузере в фреймворке организован с помощью собственного шаблонизатора. Если разбираться с ним лень, вполне можно организовать вывод с php шаблонами. Работа с переменными становится проще и определенную логику можно реализовать на выводе. Хотя и шаблонизатор поддерживает основные конструкции циклов, условий и прочее, что вполне достаточно. Разве что привыкнуть к новому синтаксису. А он похож на подобные и вообще настолько прост, что это займет совсем немного времени.

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

Классы моделей организованы очень простым способом, на основе класса фреймворка 
Class DB\SQL\Mapper. Классы моделей разобраны в следующей статье про модели. Итак, вывод главной страницы блога осуществляется при помощи контроллера.

class MainController extends BaseController {
 function render() {}
}

Делаем выборку нужного количества постов. 

$model = new Pagination($this->database, $limit, $fields, 0 );

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

$model->author = 'SELECT login FROM users '. ' WHERE posts.user_id = users.id';
$model->cat= 'SELECT name FROM categories ' . ' WHERE posts.cat_id = categories.id';

Если выборка ничего не находит, то моя конструкция построения страницы вызывает крах сервера. Поэтому добавлена проверка. Хотя такая возможность маловероятна. Разве что при пустой базе. Но так и случилось при первом развертывании сайта на сервере. Но я ще добавил типовые пост и страницу. На всякий случай.

И таких проверок, видимо, в идеале должно быть много. У меня их совсем не много. Буду добавлять по мере тестирования сайта.

if(empty($post_subset)){
            $this->f3->error(404, 'page not found');
        }

Формируем страницы навигации

$post_subset = $model->getPost($currentPage);

Обрезаем текст поста для вывода. Длина цитаты настраивается из админки.

foreach($post_subset as &$subset){
            $exerpt =  strip_tags(mb_strimwidth($subset['content'], 0 , 250,'[...]'));
            $subset['content'] = $exerpt;
        }

Формируем саму HTML разметку непосредственно для вывода в шаблоне. По идее ее можно было бы формировать  и в шаблоне, но мне что не хотелось все это переделывать, когда все это было мною позаимствовано и реализовано на  php.   

 $pag =  $model->createLinks( '1');
 $this->f3->set('pag', $pag);

Теперь все переменные, предназначенные к выводу в шаблоне, нужно передать классу фреймворка, чтобы он о них знал. Делается это так. На примере разметки навигации. Создаем переменную и устанавливаем ee в фреймворке. Далее ее можно спокойно выводить в шаблоне посредством

{{  @pag }}

И далее идет сам вывод шаблона.

$this->f3->set('view', '/theme/templates/content.htm');
$template = new Template();
echo $template->render('/theme/layout.htm');

Так же устанавливаем дополнительный вид content.htm и выводим его в общем шаблоне
layout.htm. Знакомые со структурой шаблона вордпресс найдут здесь для себя много знакомого. Примерно как-то так.

Нет комментариев
  • Оставьте свой комментарий первым
Быстрый ответ [Окно ответа]